静态分析反调试apk

测试步骤参看

吾爱破解

知识点儿

  1. 工具ID7.0+Jeb+ApkTool
  2. 根据程序功能逻辑分析其可能存在反调试代码位置。
  3. 拿到APK先在Jeb等反编译工具中分析程序函数,是个好习惯。
  4. IDA使用技巧
  • Ctrl+s打开segment表
  • 右键Data转化成数据、P键转换成函数、F5转化为C伪代码、点住函数按x键可以知道被哪里调用。
    (点进dword_1140发现这部分代码IDA没有解析好 这里需要手动解析一下 点住dword_1140右键Data转化成数据 然后鼠标放在__unwind按住P键就转换成函数了 这个函数就是checkport对应的函数)
  1. .data.rel.ro.local 这个段里面放的是动态注册的函数 ,点进去后可以找到动态注册的函数
  2. ADB命令
  • ps 查看包名对应的PID
  • CAT PROC/PID值/status 查看当前程序状态信息(其中Tracerpid为0,说明没有被调试)
  • 修改IDA调试端口:/data/local/tmp/and7.0 -p 23947
    adb forward tcp:23947 tcp:23947
  • 可以是程序运行完,反调试程序(线程)循环运行,导致主线程堵塞。
  • 可以在init_array和JNI_OnLoad两个函数中开启线程进行反调试,因为init_array和JNI)Onload会在so加载的时候就开始执行。
  • init_array段是在so加载的时候执行的 执行顺序要优先于 JNI_OnLoad 所以这里是最早被执行的函数 把反调试和so的解密放到这里是比较好的选择。
    -检测反调试的技巧:
    a. 进程名中包含android_server,gdbserver,gdb等名称 则认为程序当前被动态调试 退出程序。
    b. 读取/proc/pid/status文件下的TracePid的值 如果大于0说明程序正在被调试 退出程序。
    c. 读取/proc/net/tcp,查找23946端口 如果找到则认为程序当前被动态调试 退出程序。

2.对于thread_create函数我们可以刷机改内核让TracePid的值永远为0
参考文章《逆向修改内核,绕过TracerPID反调试 》
3.对抗SearchObjProcess函数可以将android_server改成其他名字然后运行 比如zs ls ww(张三,李四,王5)
参考文章《教我兄弟学Android逆向番外03 Android逆向必会命令》

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容