这个题目拿到题目后直接拖进模拟器里
是这个样子,我们也不尝试输入数值了(我不想看eorry之类的提示)
使用JEB打开apk,分析这个apk
我们需要寻找app入口点
打开Manifest
显然 入口点是sctf.demo.myapplication.t
,但是我们找不到,只能看到sctf.hello
这个包。这可能是app动态释放文件
应对方法
整体的思路就是使用反射大师(安卓),frida dex dump(python)将app运行时候的dex给dump下来再进行分析。
安装反射大师具体步骤与使用教程
对dump下来的代码进行分析
找到关键位置sctf.demo.myapplication.t
但其在oncreate方法里面使用意图转到了sctf.demo.myapplication.MAIN
即sctf.demo.myapplication.s,并重写了onActivityResult根据返回结果进行操作
那我们不妨先分析sctf.demo.myapplication.s里面的逻辑
这里首先对输入字符串长度进行判断(length==30)
然后将输入字符串拆分成了两段前12位放入v1。并进行base64加密(v1=s.sctf(v1))然后通过后面if(v1.equals("c2N0ZntXM2xjMG1l"))
这句话可以得到前12的内容。对c2N0ZntXM2xjMG1l
解密可以得到 sctf{W3lc0me
接下来进入到sctf.demo.myapplication.t
中对v2里的内容进行加密。
分析sctf.demo.myapplication.t
可以看到程序先将syclover
MD5后和sctf.demo.myapplication.s
返回的v2一起作为参数传入到了f.encode
中
先去加解密网站上面拿到syclover的MD5 : 8bfc8af07bca146c937f283b8ec768d4
然后分析f.encode
逻辑很简单,将之前传入的v2
字符串按照偶数的方式(每隔一位放入一位)和syclover的md5放入一起形成新的字符串
再与~8t808_8A8n848r808i8d8-8w808r8l8d8}8
比较 由于索引v3/v1其中的v1是传入的md5的length使得其每次都只能取到这个md5的索引0即第一位数字8 所以去除数字~8t808_8A8n848r808i8d8-8w808r8l8d8}8
中的数字8即为剩下的flag
~t0_An4r0id-w0rld}