安卓对抗之Unidbg检测(进阶)

环境Env检测

因为env_set被unidbg偷偷实现了,如果不去改他的源代码或者实现自定义syscall_handler ,是没办法做到java层env的设置和他native的同步的哦!

Os.setenv("key", "value", true)
auto value = getenv("key")

子进程pidppid

尝试fork出来一个子进程继续运行,然后获取pidppid,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 (使用这个不引起怀疑)获取toStringmethod_id ,然后拿去给contexttoString操作,你不能说Context继承File吧?如果你敢指定继承关系,直接拿context跑一下getAbsolutePath 跑过了直接非法环境。

method_idclass_id可特征

这个检测方法我都懒得说,因为很容易过掉,但是还是说一下,Unidbg的mthod_id什么的是通过java.lang.Object.hashCode(): int 算出来的。