0%

IDA 动态调试so文件从入门到放弃

前言

最近遇到很多加壳的apk,一开始只是简单的脱壳,现在想进一步去调试整个加壳的apk分析整个壳解密的流程,于是有了这篇文章,这里不得不吐槽下我的设备的复杂度,不仅仅在于我的Mac环境,还有我的Android设备,醉了醉了,于是便有了这篇文章,记录一下自己踩的坑。

环境

  • 电脑: Mac 10.14.5
  • adb版本: 29.0.4-5871666
  • IDA版本: IDA 7.0
  • 测试机: Nexus 5x Android 8.0

正式开始

一般来说,由于各种反调试手段,IDA动态调试无法在程序解密时无法直接attach上去,因此在程序未加载so之前进行attach,然后通过各种手段去检测和bypass各种反调试。本次测试的一个apk是 MSC的第二题,附件在这,
程序打开后界面如下,

具体如何使用IDA pro动态调试请参见ANDROID 逆向学习笔记 (三)- IDA 动态调试 SO
这里主要描述在我的调试过程中遇到的问题,

Problem 1

当使用命令adb shell am start -D -n com.yaotong.crackme/.MainActivity以调试模式启动这个应用时,此时我的IDA也已经attach上去,
程序截图以及IDA attach上去后,截图如下


之后便启动ddms,此时发现ddms始终卡在白屏的样子,如下:

经过多番google发现,主要原因在于 jdk版本过高
具体解决办法参见 ,大意就是你或者直接降你的jdk版本到特定版本,或者直接去官网下载最新版本的swt.jar文件替换$ANDROID_SDK/tools/lib/monitor-x86_64/plugins目录下的org.eclipse.swt.cocoa.macosx.x86_64_3.100.1.v4236b.jar文件,我这里采取的第二个方法

Problem 2

最终打开ddms,如下

emmmmm,我的正在调试的进程呢!!!,然后jdb转发也是

呵呵,一番百度,一番google没有找到解决方案,尝试过设置全局ro.debuggable但是mprop设置失败,最终放弃,算了,换测试机.

Problem 3

换了测试机,我再来,这次换的测试机是Nexus 5 Android 6.0,重复之前的操作这次ddms也能显示我的调试进程了,下一步,IDA 继续attach吧,这时要注意的是 在连接远程主机的时候设置的debugger option都是假的!!!
在attach上去后一定要记得重新设置debugger option,不然会由于程序的反调试一直一直闪退!

在jdb转发后,并且设置好debugger option后我们开始进行正式的调试,F9后,奇怪的是并没有出现参考文章所说的两次提示,而只是在output窗口出现

亲测,这是关键!!!,只有当output窗口出现我们想要调试的那个so文件我们才能在control+s快捷键显示的窗口找到这个so文件的存在!,此时找到JNI_Onload函数并在入口处下段,这样便可以正常调试JNI_Onload函数了,接下来不再赘述。

后记

一个IDA 动态调试so整的这么麻烦我也是醉了。。遇到的问题真的是数不胜数,真的是从入门到放弃,这里放在这记录一下,也希望能够对别人有所帮助吧。。最后感谢各位大佬的博客给予我的帮助,再次感谢,由于本人水平有限,文中如有错误,敬请见谅。