安卓逆向案例(3)owasp_UnCrackable-Level3.apk
1. 案例来源
https://github.com/OWASP/mastg/tree/master/Crackmes/Android
2. 分析过程
先安装apk后运行看一眼,看起来是要输入正确的内容然后验证,先随便输入一个试试看。
用jadx-gui打开,定位到核心代码。
看一下this.check.check_code函数,重定向到了Native库。
找到bar函数,恢复类型后看一下大概逻辑。
这里v8数组和qword_15038都是动态填充的,硬分析逻辑比较麻烦,这里采取动态调试的方法来Get flag会比较简单。
3. 调试之前先干掉反调试
在调试之前,我们要先干掉程序的反调试机制。
简单看一下MainActivity的逻辑,可以看到程序进行了so文件完整性检测、调试状态检测和Root检测,这里可以用修改代码、Frida Hook等方式干掉他们。这里简单起见,我就用修改代码的方式来操作。
在APK Editor里面定位到OnCreate函数。
注释掉相关检测代码,然后重新打包APK。
可以重新反编译新打包的APK验证一下,确实相关检测代码已经消失。
4. 调试
启动调试的步骤我就不赘述了,网上都能找到。比如:https://blog.csdn.net/star_nwe/article/details/134277620 。注意,调试的时候把Android Studio给关掉,不然可能会出现jdb无法连接的问题。
先断到init函数,这里还有一个反调试,用子进程ptrace父进程以阻止调试器。
调试时跳过fork,将程序运行起来。
输入一个长度为24的字符串,然后点击按钮,断在bar函数处。
找到字符串比较的位置。
逐步调试修正值,最后得到字符串为:making owasp great again,成功。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 凌虚的博客!