首页
社区
课程
招聘
[原创]【2019看雪CTF】Q2赛季 第五题 丛林的秘密 WP
发表于: 2019-7-2 00:13 6196

[原创]【2019看雪CTF】Q2赛季 第五题 丛林的秘密 WP

2019-7-2 00:13
6196

安卓题,主要java层代码如下:

有native代码,java层调用了其两个函数sayHellocheck_key
sayHello函数返回字串'190K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9K6b7e0R3H3x3o6m8Q4x3U0M7`. ,而check_key似乎不像校验函数:

再看java层中的loadUrlsetJavaScriptEnabled,似乎有猫腻。再细看native代码。
JNI_OnLoad函数中调用了地址为B30的函数,解码了大量数据,并建立了socket,监听8000端口,模拟web服务,有客户端连接后将解码的数据发送到客户端。

数据解码后为html内容,内嵌WebAssembly,html部分内容为(去除了WebAssembly部分):

原来这才是真正的校验交互接口,校验逻辑自然在WebAssembly里。
将WebAssembly写入到文件,转成c再编译,最后反编,得到check_flag的伪代码如下:

先调用了8个函数对输入的32字节进行异或处理,然后调用xxx函数进行最终校验,xxx函数中通过32个32元一次代数方程进行校验,直接解方程得到

即:S0m3time_l1tt1e_c0de_1s_us3ful33
32字节异或的常量值为:

直接异或得到原始输入:


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

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