本题是一个apk文件,但我在比赛中自认为找到了解析关键,但一直不得其法,没想到赛后看了别人的解析文章,才知道自己掉到出题者挖好的陷阱中了。
本题提示必须系统为Android8以上,所以只能把之前卸载的Genymotion安装上
安装运行app
打开后,随便输入,然后点击按钮,提示Not Correct!
jadx打开
可以看到,给button设置点击事件,然后通过jni的check_key方法,只有返回值为1才能成功。
IDA打开so
直接来到check
我就是卡在这个方法中得不到解,直到看别人的分析文章才知道这是出题者挖的坑
打开开发者选项中的显示布局边界
可以看到真正的TextView、EditText、Button都是不可见的,check_key方法根本不会用到,页面显示的是webview,而activity_main这个布局文件中,除了webview其他view都是android:visibility=”invisible”。所以应该着重于webview干了什么
在代码中webview.loadUrl(this.f33u);
f33u = gogogoJNI.sayHello();
所以应该查看so文件中的sayHello方法
我在这里直接用Android Killer修改了smali代码,在onCreat方法中插入了toast,把u这个全局变量toast展示,然后重新编译打包,并安装到手机上。
发现u的值是字符串’http://127.0.0.1:8000’
后续的解析涉及到各种转码,触及到我的知识盲区,只好未完待续了。
其实我也发现CTF中的Android题大体上分为两种,一种是真正的android题,只是把key判断隐藏在so文件了,分析so逻辑一步步走就可以了。而另一种是伪装成Android,真正的题通过web等方式来隐藏在so文件中,需要转码等方式得到真正的题。
只能说后续要学的知识点还是太多。