看雪CTF2019 Q2丛林的秘密

CTF题目解析思路

Posted by JovenHe on July 3, 2019

本题是一个apk文件,但我在比赛中自认为找到了解析关键,但一直不得其法,没想到赛后看了别人的解析文章,才知道自己掉到出题者挖好的陷阱中了。

本题提示必须系统为Android8以上,所以只能把之前卸载的Genymotion安装上

安装运行app

打开app.png

打开后,随便输入,然后点击按钮,提示Not Correct!

jadx打开

jadx打开.png

可以看到,给button设置点击事件,然后通过jni的check_key方法,只有返回值为1才能成功。

IDA打开so

直接来到check

so-check.png

我就是卡在这个方法中得不到解,直到看别人的分析文章才知道这是出题者挖的坑

打开开发者选项中的显示布局边界

打开布局边界.png

可以看到真正的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文件中,需要转码等方式得到真正的题。

只能说后续要学的知识点还是太多。