首页
社区
课程
招聘
[原创 ]KCTF 2019 Q2 第五题 越过山丘
发表于: 2019-6-24 21:26 7422

[原创 ]KCTF 2019 Q2 第五题 越过山丘

HHHso 活跃值
22
2019-6-24 21:26
7422

一、序幕

Apk,走流程

(1)     zip解压

(2)     apktool转jar,未成功,无关紧要

lib目录结构,想来应该使用了NDK的JNI,选个简单熟悉的架构,x86拖进IDA

├─arm64-v8a

│      libgogogo.so

├─armeabi-v7a

│      libgogogo.so

├─x86

│      libgogogo.so

└─x86_64

        libgogogo.so

与此同时,也把zip解压出来的classes.dex直接拖进另一个IDA

二、成功之母

在classes.dex的响应函数中,我们看到了对JNI的check_key调用,并根据结果判断是否正确,成功入套。




按上面的逻辑,一眼望过去,应该不合逻辑,

因为可以个字节要么是0x00(False),要么是0x01(True),

我们得到key的十六进制编码如下,显然不合逻辑,这一步是做完后补充测试的结果,

因为题目要求特定新版本以上,我们有理由怀疑不同版本的srand和rand实现不同,会有影响,但实际可能是多想了。

可能就是新版的WebView一类的功能控件。

一、偶遇后门

在随机浏览lib库函数中,我们不经意留意到下面竟然开启侦听

神经过敏的感觉是:作者竟然在样例中安插后门!怀着应该不存的好奇心理看下这“后门”干啥

(1)     手机A(扮演路由)提供热点HotPoint

(2)     PC的wifi连接上HotPoint

(3)     安装该apk样例的手机B也连接上HotPoint

(为啥不直接在手机A上安装apk?这个随意)



我们curl一下(其它工具也行,随意,只是顺手拿起curl)看下apk后门返回啥,如图,

怪怪的,莫非是攻击载荷?当然,WebAssembly关键字高速我们,应该内有乾坤


四、疑车无据

正常的套路,我们应该按apk的启动顺序,逐个看下相关的函数

如从下面的MainActivity.OnCreate里我们看到,实际上作者在设计时在layout上弄了一套EditText,View,Button的界面输入三件套

但实际其是使用的陷阱,作为伪装,或者是最初的设计原型;

实际主要通过WebView的loadUrl加载 mainActivity_u的URL内容工作,mainActivity_u由JNI 的sayHello返回 http://127.0.0.1:8000

即,前面的后门是为自己开的,除非别人也知道,且还能POC进去。

这个是攻击完成后补充分析,先上的船,后面补的票。当然,正常套路,应该是先买票,按部就班,再上船。

在攻击时,并不知道android有WebView这东西,也不晓得WebAssembly是啥,毕竟不搞android和web开发

当然,职业直接告诉我们WebAssembly应该是种汇编语言。

实际上完成攻击并不是主要目标,这后门和WebAssembly成了好奇点,好奇害死猫。

这apk的后门没啥新奇,就开启侦听,返回页面内容,我们看下返回的内容完整是啥。



四、Html


我们可以看到,其返回的Hi_Ptr2HtmlContent_off_2F94内容,并不像我们在前面通过【curl 192.168.43.27:8000】敲门拿到的内容,

应该是加密了。再多看一眼后门的代码,显然,都是通过xor 0x67进行异或加密和解密。


直接上,在IDAPython里执行【for i in range(34290):  PatchByte(0x3004+i,GetOriginalByte(0x3004+i)^0x67)】

我们解密得到需要的内容

我们保存为index.html,如下(其中省略了WebAssembly的字节内容,全文参考附件index.html)

我们用浏览器打开,效果如图,有意思,竟然和apk交互一样。

五、WebAssembly 之路

三个参考页面内容

其中第一个页面内容告诉我们,Chrome竟然可以调试WebAssembly,当然,Script层是可以调试的。WebAssembly层怎么进去,未曾深究模仿。

【需要声明,此图片内容归原页面作者所有】


很不幸,Chrome用F12后我们的内容跟上图的有些出入,我们没有WebAssembly文件。

所以我们要处理一下,我们把WebAssembly的字节转换为二进制wasm文件,

我们将WebAssembly中的内容复制出来,

如下图,其中省略部分内容(参考附件d.py文件)保存为python文件,通过执行【python d.py】同目录下,我们得到WebAssembly的编译二级制文件wasmkc.wasm


我们参考上述第二个页面的内容,将index.html修改为引用外部WebAssembly文件的方式,如下图;

(这个可能需要将index_wasm.html和wasmkc.wasm放自己的服务器才能正常执行)


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-6-27 09:00 被HHHso编辑 ,原因:
上传的附件:
收藏
免费 3
支持
分享
最新回复 (2)
雪    币: 4357
活跃值: (979)
能力值: ( LV8,RANK:142 )
在线值:
发帖
回帖
粉丝
2
当初卡在调试wasm上,谢谢您的分享。
2019-6-27 18:48
0
雪    币: 7
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
 
最后于 2019-7-4 15:33 被bluth编辑 ,原因:
2019-7-2 11:12
0
游客
登录 | 注册 方可回帖
返回
//