程序界面,点击按钮"爬一层楼"则已爬的楼层+1按钮"爬到了,看FLAG"无法点击 1.分析清单文件,获取包名,以及入口类 2.分析入口类 3.AndroidKill修改并重新编译 此时,重新安卓编译后的APK,点击一次已爬楼层按钮后,则能够点击出现FLAG了虽然此时已经告破,但是想研究一下so层的反调试和so层的方法具体做了什么
1.发现不是静态加载方法,那么应该是JNI_onLoad动态注册;发现在JNI_onLoad前还有_init函数,所以分析顺序:_init->初始化数组->JNI_onLoad->注册方法 2.分析_init 2.1但是奇怪了,动态调试了好几次,都在fork()后就出错了,提示:got SIGCHLD signal (Child status has changed)
3.接下来就能够断在JNI_onLoad函数 3.1通过动态调试JNI_onLoad的注册方法的参数,获得注册方法位置是0xF90 分析传入参数,通过算法便能计算除FLAG
3.1但是很奇怪,找到注册方法后,并且下了断点,放开程序运行,结果加载失败,程序并不会运行起来,而是就卡在那,但是IDA动态调试页面却又是运行状态3.2是否是在_init的时候nop那句fork出现了问题?导致无法加载成功?3.3分析_init具体是如何反调试的呢?
上传示例apk,以上几个问题还望有大神能够解惑!
[2022夏季班]《安卓高级研修班(网课)》月薪两万班招生中~