安卓对抗之Unidbg检测(进阶)
环境Env检测
因为env_set
被unidbg偷偷实现了,如果不去改他的源代码或者实现自定义syscall_handler
,是没办法做到java层env的设置和他native的同步的哦!
Os.setenv("key", "value", true)
auto value = getenv("key")
子进程pid
与ppid
尝试fork出来一个子进程继续运行,然后获取pid
和ppid
,unidbg默认并没有实现get_ppid()
,如果出现pid和ppid一致,则可能还有另外的问题?
Jni行为异常检测
unidbg的Jni行为不是非常合理,就像上文的libc堆区检测一样。
-
有部分不常用的JNI操作没有实现
-
不能通过native调用native jni函数(出现running错误)
-
错误的method_id调用
1,继承关系异常
(1)本质体现为,使用Object对象的
toString
方法对context
进行call,会出现该方法不是android.os.Context
的方法相关的错误。其实逻辑上来说,Context继承了Object(unidbg里面可以在new Context的时候指定一下父类)。
(2)上面的方法有一个进阶操作,从
java.io.File
(使用这个不引起怀疑)获取toString
的method_id
,然后拿去给context做toString
操作,你不能说Context继承File吧?如果你敢指定继承关系,直接拿context跑一下getAbsolutePath
跑过了直接非法环境。
method_id
和class_id
可特征
这个检测方法我都懒得说,因为很容易过掉,但是还是说一下,Unidbg的mthod_id什么的是通过java.lang.Object.hashCode(): int
算出来的。