对Android Hook检测技术的一些浅谈

查看 128|回复 9
作者:LivedForward   
大部分对hook的检测还是比较依赖系统 api 或者改动hook框架很容易就失效。
比如检测libxxx.so,命名空间,指定类等等。
我在这里提出一种检测思路:
对比内存中的.text段和文件中的.text的crc是否相等。
大致流程:
1.解析/proc/self/maps。
2.匹配到你需要检测的so文件,获取其的加载基地址和文件路径。
3.通过mmap将文件映射到内存,然后把内容传给ELF解析工具,获取其.text段的偏移和大小 。   
4.通过偏移+加载基地址 和 偏移+mmap返回值 以及.text段大小来计算crc,并比对。
这种方式最好放到线程里面去做,缺陷是app自身不能使用inline hook,否则也会被检测到。
针对xposed hook、frida hook的检测话,还有一种方法,就是被xposed hook的Java方法修饰符都会变成native,
以getPackageInfo的检测代码示例:
void check_native_modifier_task(__int64 addr){
    int check_time = 10;
    while (1) {
        if((~*(_DWORD *)(addr + 4) & 0x80000) !=0){
            // find xposed, frida hook.
            break;
        }else if(check_time FindClass("android/content/pm/PackageManager");
    jmethodID getPackageInfoMethodID = env->GetMethodID(packageManagerClass,"getPackageInfo", "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");
    thread checkThread = std::thread(check_native_modifier_task, getPackageInfoMethodID);
    checkThread.detach();
    env->DeleteLocalRef(packageManagerClass);
}
示例Apk
https://www.123pan.com/s/lN7UVv-pbYJ


Screenshot_2023-01-20-13-09-54-165_com.ysh.hookap.jpg (40.49 KB, 下载次数: 0)
下载附件
2023-1-20 13:12 上传



IMG_20230120_131004.jpg (134.13 KB, 下载次数: 0)
下载附件
2023-1-20 13:12 上传

下载次数, 文件

周谋   

学习学习一下
mengyoyoyo   

前排来学习
yxx6   

谢谢楼主,已学习
BG3SPD   

谢谢楼主分享,学习了
wangsking   

谢谢楼主分享,学习了
z5530012   

优秀啊,可以的
qq882011   

谢谢分享。。。
xihuxiaren666   

棒!收藏下,回头细读。
zhangsf123   

谢谢分享,学习了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部