移动安全安卓APP指令抽取壳浅析

移动安全 2年前 (2023) admin
541 0 0

目标样本为2022年某次比赛中一道Android逆向题目,按照解题情况来看,解出此题目的人数不多,难点在于大量的核心代码被抽取,需要逆向还原代码,掌握了此类考点后,再分析类似于抽取壳就比较容易了。

直接使用adb install对目标程序进行安装,发现报错,可以尝试使用adb -t 进行允许测试包的安装,也可自行修改配置文件,将测试选项修改掉。

移动安全安卓APP指令抽取壳浅析

通过逆向查看配置文件发现程序包名为 com.example.nothingcode ,其实其真实的包名应该为 com.example.testchouqu

直接查看其源代码,未能找到具体的核心逻辑。

移动安全安卓APP指令抽取壳浅析

程序有加壳特征。但是使用查壳工具暂未查出明显特征。

移动安全安卓APP指令抽取壳浅析

反编译后,继续使用逆向工具查看,依旧发现无任何核心业务逻辑代码 ,都被指令抽取。

移动安全安卓APP指令抽取壳浅析

先尝试使用blackdex 脱壳还原,拿到的dex文件如下:

移动安全安卓APP指令抽取壳浅析

移动安全安卓APP指令抽取壳浅析

使用反编译工具查看,发现其dex壳代码被脱下,及相关指令还是被抽取,无核心逻辑代码。

第一种方案失败,通过该抽取壳的官方描述:

dpt-shell是函数抽取壳的实现。一种将dex文件中的函数代码抽空,然后在程序运行时将函数代码填回的那么一种壳。因此这里继续使用frida-dexdump,直接从内存中将壳代码dump出来,看能否还原会源代码。工具能直接暴力搜索程序的内存,使用-d(deep search)参数从内存中进行暴力深搜,

命令如下:

frida-dexdump -U -d -n testchouqu -o xxxdex_out
frida-dexdump -U -d -n com.example.nothingcode -o xxxdex_out

在这里尝试使用 Android 8 Android8.1 Android 13 ,Android11 等多个版本,程序都闪退,未能完成脱壳。

抓取日志查看

adb logcat -c

adb logcat -> log.txt

通过分析日志,重新使用谷歌官方镜像,在Android studio中的模拟器,Android10下进行操作,按照以上步骤,adb install -t 成功安装目标apk,并成功完成脱壳,脱壳的内容很多,如下:

移动安全安卓APP指令抽取壳浅析

经过文件大小排序,逐一排查,发现最终脱壳成功的classes05.dex为我们的目标,因此分析此dex文件。

移动安全安卓APP指令抽取壳浅析

在Classes05.dex文件中先分析check函数,代码逻辑已经还原。

移动安全安卓APP指令抽取壳浅析

传递的参数也能看到,但是代码被混淆。

移动安全安卓APP指令抽取壳浅析

加密核心逻辑如下:

移动安全安卓APP指令抽取壳浅析

使用javadeobfuscator或者threadtear 进行去控制流进行解密,写出还原代码。

enc=[71 ,105 ,118 ,101 ,121 ,48 ,117 ,114 ,102496510312110711199]
for i in enc:
    print(chr(i),end="")
# Givey0urf1Agykoc

最终得到flag Givey0urf1Agykoc

该指令抽取壳相关项目地址:

https://github.com/luoyesiqiu/dpt-shell



总结

题目核心逻辑简单易懂,但是使用混淆以及指令抽取能极大的增加软件不被逆向的概率,作为比赛题目,对初次接触该领域的选手而言,还是具备一定难度的。

原文始发于微信公众号(山石网科安全技术研究院):移动安全安卓APP指令抽取壳浅析

版权声明:admin 发表于 2023年4月18日 上午10:49。
转载请注明:移动安全安卓APP指令抽取壳浅析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...