加固与脱壳04 - 一些简单的脱壳方法

这里只讨论一些简单壳的脱壳方法及其原因。

FRIDA-DEXDump

  • https://github.com/hluwa/FRIDA-DEXDump

适用于不需要研究那些被强保护起来的代码,只是想单纯的看看某个地方的业务逻辑。

原理:

对于完整的 dex,采用暴力搜索 dex035(DEX有多个版本,可以自行匹配)即可找到。而对于抹头的 dex,通过匹配一些特征来找到。

  • https://www.anquanke.com/post/id/221905

该工具使用起来极其简单就不演示了。

Frida-fart

这个是有两个版本,一个是修改源码的思路,一个是使用 frida 的思路。

介绍使用 frida 的思路:

  • https://github.com/jas502n/FART-dump/blob/master/frida_fart.zip

里面提供了两个脚本,一个是使用 hook,一个是使用反射,脚本里面都有详细使用说明:

拿 hook 方式来说:

  • 首先拷贝fart.sofart64.so/data/app目录下,并使用chmod 777 设置好权限,然后就可以使用了。

  • 需要以spawn方式启动app,等待app进入Activity界面后,执行fart()函数即可。

    如app包名为com.example.test,则执行frida -U -f com.example.test -l frida_fart_hook.js --no-pause,然后等待app进入主界面,再执行fart()

  • 高级用法:如果发现某个类中的函数的CodeItem没有dump下来,可以调用dump(classname),传入要处理的类名,完成对该类下的所有函数体的dumpdump下来的函数体会追加到bin文件当中。

这个会比上面的**FRIDA-DEXDump**要强一点,因为它可以主动的dump一些没有执行过的方法。因为对于函数抽取壳来说,如果一个函数没有执行,那么它 DEX 中的 CodeItem可能是没有还原过的。

上面说的这两种都没法处理具有反调试的壳。对于一些加固厂商来说,他们提供的免费版加固都是比较好处理的,没有反调试。但是对于付费版来说,反调试是必带的功能,它可以识别到 frida 特征,这个时候再去脱壳就会卡在启动界面,frida-server 进程也会挂掉。

这个时候,要么去分析反调试逻辑,要么就采用修改源码刷镜像的方式来脱壳。FART仅提供了6.08.0的镜像可以刷机。如果你刷的是 debug 版镜像,一些加固还会识别手机是否 root,这时你又要处理如何绕过 root,所以只能刷 release 镜像。

由于FRAT是一个非常知名的项目,一些加固厂商已经将 FART 的特征加到黑名单里面去了,比如:

  • https://bbs.kanxue.com/thread-266247.htm

BlackDex

  • https://github.com/CodingGay/BlackDex

这个是基于插件化的思路,将其他 app 当成一个插件,运行起来到自己的进程中,这样它就能获取到app中真实的类。有兴趣的可以去看一下作者博客,不难理解:

  • https://blog.niunaijun.top/index.php/tag/BlackDex/

由于项目开源的原因,特征也很明显,所以加固厂商也很好对抗。

讨论了一些简单的脱壳方案,发现最后还是改源码编译镜像最好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二手的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值