-
-
[原创]【2019看雪CTF】Q2赛季 第五题 丛林的秘密 WP
-
发表于: 2019-7-2 00:13 6196
-
安卓题,主要java层代码如下:
有native代码,java层调用了其两个函数sayHello
和check_key
。sayHello
函数返回字串'190K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9K6b7e0R3H3x3o6m8Q4x3U0M7`. ,而check_key
似乎不像校验函数:
再看java层中的loadUrl
和setJavaScriptEnabled
,似乎有猫腻。再细看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字节异或的常量值为:
直接异或得到原始输入:
赞赏
他的文章
赞赏
雪币:
留言: