-
-
[原创]CTF2019晋级赛Q2第五题分析(qwertyaa)
-
发表于: 2019-6-13 16:46 3016
-
首先用 jadx,反编译 Java 层 MainActivity
的代码,可以看到疑似调用了 JNI 层的 gogogoJNI.check_key
,但这个函数本身校验的串只能由 \00\01
组成,是个陷阱。
实际上看到的样式是 HTML,根据被调用的所谓 text1View
的 loadUrl
可以猜测这实际上是个网页,网页地址由 JNI 层的函数 XOR 解码得来,为 http://127.0.0.1:8000/
。JNI 层中的 JNI_OnLoad
里可以看到是在通过建立一个发送 so 文件内部分内容异或结果的 http 来提供这个网页。
我们可以直接用电脑访问手机 IP 来得到内容,核心校验逻辑在一个 WASM 模块中。可使用
来获得 wasm 文件内容。可以采用 wabt 工具的 wasm2c 来将内容转译为 c 代码,删去函数调用层数、memory 访问越界检查后用 gcc -O3
编译 c 文件后将 ELF 文件用 ida 打开就可以看到基本是人可看的代码(冗余内容被优化掉了)。
可以看到关键的 check_key
以外的函数仅将读取到的内容存入内存,而这个函数首先将这些内容的每个字节进行异或后得到 32 个变量,判断这 32 个值的线性组合是否等于特定值。
可将方程输入 Mathematica 求解,如下:
得到:
最后用 python 将被异或的内容还原即可:
得到输出 K9nXu3_2o1q2_w3bassembly_r3vers3
。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
看原图
赞赏
雪币:
留言: