先来说下遇到的问题:调试某个app的so时,ida动态调试使用jdb附加,断点断在了linker处,然后开始加载so文件,目标so还没加载出来,app闪退,动态调试终止。
之前一直以为是什么反调试,我还一直百思不得其解,因为我要逆向的这个app是没加壳的,java层反调试也没hook到,说明程序根本没运行到反调试这一步。毕竟反调试肯定要写在代码里,现在初始化都没完成就崩了。查遍各种资料都没有见到在linker加载so的时候会崩溃这种情况。
后来终于在看到一篇文章时大受启发,了解到了armeabi-v7a和armeabi的区别。我之前一直使用的调试真机是小米四,32位(对应使用ida的android_server,如果是64位要使用android_server64),miui开发版,安卓版本6.0.1。经过调试大量的app,得到结论,这个手机只能调试lib中有armeabi的app。现在主流app解包后的lib下就只有armeabi-v7a。
于是开始各种借测试机来尝试,最后成功的机器是,红米note8,64位,安卓版本9。断点终于成功打进了目标so中,此时再按F9,app还是会退出,是因为这个so中加了反调试,在静态分析时已经看到了,后面就是对反调试的处理了。
另外,在使用各种不同的系统机型来测试时,发现会有一种情况的出现,jdb附加直接报io异常,并且没有很好的提示异常出现的原因。
出现这个异常和monitor无关,如果是因为monitor没打开的话,这个io异常后面会明确说明sockt什么什么错误。而这里并没有任何说明。经过多次测试,发现只要手机安卓版本10,ida附加jdb就会出现这个问题。换成低版本就不会有这个问题。具体为什么会出现这个问题,我也没有深入研究,看报错信息前两句的意思好像是创建虚拟机的时候发生了什么不可描述的事情。