上一篇 《教我兄弟学Android逆向09 IDA动态破解登陆验证》我带你分析了黑宝宝.apk,并且用IDA动态调试破解了登陆验证 看上节课你学习的不错 这节课给你带来的是过反调试的教程

在进入本节课之前我先问你一个问题
什么是反调试?
答:反调试技术是为了保护自己程序的代码不被逆向。增加逆向分析的难度 防止程序被破解, 针对动态分析。
要么学!要么不学!学和不学之间没有中间值 不学就放弃,学就要去认真的学!    --致选择


分析环境:JEB2.2.7+IDA7.0  测试手机:nexus
IDA7.0下载链接
链接:https://pan.baidu.com/s/1xEtjnTVZFuLiMpHKwMOY2Q 密码:g3v9

前言
测试一:首先拿到反调试挑战.apk 安装后直接运行,这里因为我没有动态调试程序,所以弹出框恭喜你,挑战成功!
测试二:用第9课讲的调试方法 先运行程序等程序弹框后再挂起IDA调试 发现IDA直接退出 猜测程序做了反调试。

一 用jeb反编译反调试挑战.apk
1打开Manifest查看android:debuggable="true" 说明此程序是可以被动态调试的。
2找到程序入口MainActivity 分析可知程序运行的时候调用了myJNI类中的Native函数checkport并弹框 所以checkport是弹框的内容 看函数名可知里面也有可能做了反调试
3分析代码可知程序弹框后说明checkport函数已经执行完了,但是IDA挂起来后程序还是退出,说明还是被反调试了 猜想有两种情况:
猜想一: checkport函数中开启了一个线程循环来做反调试 就算函数执行完 这个线程中的反调试还是运行的 (如果不开启线程 循环检测反调试程序主线程将会堵塞 )
猜想二: 我们知道init_array和JNI_OnLoad会在so加载的时候就开始执行,所以程序也有可能会在这里开启线程进行反调试。

<ignore_js_op>

2. 怎么在IDA里面找到动态注册的函数呢?动态注册的函数一般会在.data.rel.ro.local或data中 Ctrl+s打开segment表  找到.data.rel.ro.local  这个段里面放的是动态注册的函数 点进去后就找到Checkport函数了 函数的定义在dword_1140中
<ignore_js_op>

 


<ignore_js_op>

 

3点进dword_1140发现这部分代码IDA没有解析好  这里需要手动解析一下 点住dword_1140右键Data转化成数据 然后鼠标放在__unwind按住P键就转换成函数了 这个函数就是checkport对应的函数
<ignore_js_op>

 

相关文章: