首页
社区
课程
招聘
[原创]CTF2019晋级赛Q2第五题分析(qwertyaa)
发表于: 2019-6-13 16:46 3016

[原创]CTF2019晋级赛Q2第五题分析(qwertyaa)

2019-6-13 16:46
3016

首先用 jadx,反编译 Java 层 MainActivity 的代码,可以看到疑似调用了 JNI 层的 gogogoJNI.check_key,但这个函数本身校验的串只能由 \00\01 组成,是个陷阱。

实际上看到的样式是 HTML,根据被调用的所谓 text1ViewloadUrl 可以猜测这实际上是个网页,网页地址由 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期)

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//