android 反调试 实践

Posted 明风的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 反调试 实践相关的知识,希望对你有一定的参考价值。

(一)xposed 检测

1. 每一个被hook的进程,都会将xposed 的相关库文件和jar 文件加载到相应的进程空间中,如图:

这里看到进程空间中加载了

1)app_process32_xposed

2)libxposed_art.so

3)XResourcesSuperClass.dex

既然能看到,一般的应用都会使用读取maps 文件的方法检测到,如何规避呢:

1)刷机关键字替换。

2)hook 相关的函数做到读取文件伪装。(maps 函数,open 函数)

2. 通过PackageManager查看安装列表

最简单的检测,PackageManager的API来遍历系统中应用程序安装的情况来辨别是否有安装Xposed Installer相关的软件包。

PackageManager packageManager = context.getPackageManager();
List applicationInfoList = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo applicationInfo: applicationInfoList) 
    if (applicationInfo.packageName.equals("de.robv.android.xposed.installer")) 
        // is Xposed TODO... 
    

既然能看到,一般的应用都会使用系统的方法检测到,如何规避呢:

1)代理或者替换使不可见。

3. classloader 检测

android 未安装Xposed框架时的Android应用中的ClassLoader

 

Xposed挟持后的classloader

 

 

所以可以检测, 反检测方法有。

 

4 异常读取栈

try throw new Exception("blah"); catch(Exception e) for (StackTraceElement stackTraceElement: e.getStackTrace()) // stackTraceElement.getClassName() stackTraceElement.getMethodName() 是否存 在Xposed

所以可以检测, 反检测方法也有。

5. 反射调用读取Xposed相关类和方法。

1) 反射调用xposed 的某一个关键类和关键方法是否在classloader 中存在。

6. 检查关键Java方法被变为Native JNI方法

当一个Android App中的Java方法被莫名其妙地变成了Native JNI方法,则非常有可能被Xposed Hook了。由此可得,检查关键方法是不是变成Native JNI方法,也可以检测是否被Hook。

通过反射调用Modifier.isNative(method.getModifiers())方法可以校验方法是不是Native JNI方法,Xposed同样可以篡改isNative这个方法的返回值。

7. 判断某些xposed 的库的导出函数的特征信息,基于载入库文件的文件名或文件路径。

void* lookup_symbol(char* libraryname,char* symbolname)

void *imagehandle = dlopen(libraryname, RTLD_GLOBAL | RTLD_NOW);

if (imagehandle != NULL) void * sym = dlsym(imagehandle, symbolname);

if (sym != NULL) return sym; //发现Cydia Substrate相关模块 ...

8.反hook 的检测, 每一个函数在编译连接后加载到内存后每一条指令是一定的,位置一定的。

这个是maps 文件 so 基于segment 加载的分布, 第一行包含代码段是可以执行的。其他两个相关的bss 和数据,栈段。

可以读取maps 文件 的某一个so 的某一个函数进行特征分析。

1)取样分析函数的机器码的变化。

9. mprotect 函数可以动态改变内存地址的rwx 属性。(可以采取自身kook)

 

 

 

https://blog.csdn.net/u010746456/article/details/80956290

https://tech.meituan.com/2018/02/02/android-anti-hooking.html

以上是关于android 反调试 实践的主要内容,如果未能解决你的问题,请参考以下文章

浅谈android反调试之 转发端口

Frida反调试

浅谈Android反调试 之 PTRACE_TRACEME

修改Android手机内核,绕过反调试

修改Android手机内核,绕过反调试

修改Android手机内核,绕过反调试