LBE主动防御逆向
运行程序,LBEApplication会释放assets/hips.jar文件,解压缩至app_hips目录。开启主动防御功能后,会申请获取su权限,运行bootstrap可执行文件。
Bootstrap:关闭selinux,运行core.jar
Bootstrap文件的作用就是关闭selinux安全机制,为后续的注入工作做准备,并运行core.jar文件。
core.jar&&core.so:实现进程注入
core.jar包中的主要功能就是将client.jar、client.so注入到所有父进程为Zygote进程的子进程中,并将service.jar和service.so注入到system_server目标进程。
实现类加载器,回调java代码
成功注入后,会调用client.so中的loadClient、service.so中的loadService方法。这2个函数都实现了一个类加载器,会加载对应的jar包,并反射调用java层的指定代码,为后续的hook做准备。
client.jar分析
ClientContainer类下的initialize方法,会通过反射获取当前ActivityThread对象的mInstrumentation成员和mH成员的mCallback属性,并将其替换为本地继承了Callback、Instrumentation的自定义类。其中mInstrumentation用于监控应用程序与系统的交互,mH对应的内部类H处理从AMS接收到的消息,从而实现拦截Activity生命周期回调的HOOK功能,这个方式和金山的比较类似。。
疑惑
- 对于将service.jar、service.so注入到System_service进程中的作用不是很清楚,相关的hook拦截即主动防御的功能基本都是在client.jar、client.so中实现的。因为要与底层服务进行通信,所以要注入这个进程?
- 跟进nativeenablehook方法,发现它会为android.webkit.BrowserFrame、com.android.org.chromium.content.browser.ContentViewCore类动态注册nativeloadurl、nativePostUrl、nativeLoadData本地方法。但是这些函数在对应的类路径(系统类)下是有jni方法的,这里就是有个疑问,同一个native方法可以重复注册么,还是说这是jni hook的一种实现方式?
------ 本文结束 感谢阅读 ------