程序界面,点击按钮"爬一层楼"则已爬的楼层+1按钮"爬到了,看FLAG"无法点击1.分析清单文件,获取包名,以及入口类2.分析入口类3.AndroidKill修改并重新编译此时,重新安卓编译后的APK,点击一次已爬楼层按钮后,则能够点击出现FLAG了虽然此时已经告破,但是想研究一下so层的反调试和so层的方法具体做了什么
1.发现不是静态加载方法,那么应该是JNI_onLoad动态注册;发现在JNI_onLoad前还有_init函数,所以分析顺序:_init->初始化数组->JNI_onLoad->注册方法2.分析_init2.1但是奇怪了,动态调试了好几次,都在fork()后就出错了,提示:got SIGCHLD signal (Child status has changed)
3.接下来就能够断在JNI_onLoad函数3.1通过动态调试JNI_onLoad的注册方法的参数,获得注册方法位置是0xF90分析传入参数,通过算法便能计算除FLAG
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
可以用frida hook (需要设置frida为spawn模式启动,可以绕过ptrace反调)
android.widget.Button.setClickable()
修改参数为true即可
启动参数:frida -U -f com.ctf.test.ctf_100 -l palouti.js
脚本如下
function hookSetVisibility() { Java.perform(function () { let Button = Java.use("android.widget.Button"); Button.setClickable.implementation = function (arg) { console.log("button clicked"); return this.setClickable(true); } }) } setImmediate(hookSetVisibility)