type
status
date
slug
summary
tags
category
icon
password
一、JNI交互
尽可能增加补JAVA环境所需的时间成本,打个比方,在SO中编写1000个对JAVA层的访问和调用函数,每次计算时根据时间戳使用其中的50个,这样做的话,运算的时间成本不高,但因为时间戳一直在变,所以得在Unidbg中补齐全量的JAVA访问。使用Unidbg暂不支持的JNI调用src/main/java/com/github/unidbg/linux/android/dvm/DalvikVM.java 是Unidbg中实现JNI方法的类,可以发现,只实现了最常用的那部分JNI方法,所以可以在样本中使用这些Unidbg尚未实现的JNI方法。
二、系统调用
Unidbg实现了许多常见的系统调用,但还有一些偏冷门的系统调用未实现,以及不偏僻但较难完美实现的系统调用,典型代表——fork相关系统调用。
三、文件访问
尽可能多的文件访问和交互
四、检测Unidbg
样本可以感知并检测自己运行在Unidbg环境中,并走向错误的分支。这一块我的了解不多,但确实是可以的,Unidbg的执行环境和真机是有很大差距的。打个比方,每个Android进程都有一些初始化环境变量,Android系统启动时通过setEnv设置,Unidbg中则没有。
五、目标函数无法被单独执行
尽其所能的增加目标函数被执行的”前置条件“,或者说初始化函数。这里面可以玩的花招、阴招太多了。这应该作为一个主要的反Unidbg的方向,它是有效且杀伤力巨大的。
- 作者:404False
- 链接:https://blog.404nofoundx.top//article/f18f30ba-1dde-40a3-9b64-e1f5310f8539
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。