首页
论坛
专栏
课程

Android万能脱壳机

2019-6-27 18:11 8173

Android万能脱壳机

2019-6-27 18:11
8173
我本人一般不习惯也不喜欢发帖子,但是看着身边人经常说自己在哪里哪里发过什么原创帖子,感觉没发过几个原创帖子都不好意思在社会上混了。

很多人觉得Android加固很牛逼,试着用各种方法去研究,然后弄个脱壳机,牛不牛逼咱不知道,写个脱壳机还是可以的。
Android加固分为Dex加固和so加固,我这里只给出脱dex的方法,本人声明仅用于学习交流目的,你们不要用它搞破坏,本人对此概不负责!!!
下面提供两种方法:
方法一:
核心思路:反射 + mCookie(其实脱壳的点太多了,这是其中一个)
步骤:
1、找到加固apk的任一class,一般选择主Application或Activity
2、通过该类找到对应的Classloader
3、通过该Classloader找到BaseDexClassLoader
4、通过BaseDexClassLoader找到其字段DexPathList
5、通过DexPathList找到其变量Element数组dexElements
6、迭代该数组,该数组内部包含DexFile结构
7、通过DexFile获取其变量mCookie和mFileName(这个名字没什么鸟用)

至此我们已经获取了mCookie

对该mCookie的解释(有些现在记不太清楚了):
#1、4.4以下好像,mCookie对应的是一个int值,该值是指向native层内存中的dexfile的指针
#2、5.0是一个long值,该值指向native层std::vector<const DexFile*>* 指针,注意这里有多个dex,你需要找到你要的
#3、我还测试了8.0手机,该值也是一个long型的值,指向底层vector,但是vector下标0是oat文件,从1开始是dex文件
// 至于你手机是那个版本,如果没有落入我上面描述的,你需要自己看看代码

8、根据mCookie对应的值做转换,最终你能找到dexfile内存指针
9、把该指针转换为dexfile结构,通过findClassDef来匹配你所寻找的dex是你要的dex
10、dump写文件


代码说明(代码包括java层和native层,但java层只需定义一个native函数即可):
1、代码核心部分为dump_dex.h 和 dump_dex.cpp,里面涉及你需要自行实现的部分(我测试用的5.0.2 moto手机,
如果你的手机版本或者手机型号不同,你可能需要修改我表明的地方)
2、代码相对简单,你可以自行阅读

坑:
此方法思路相对简单,但是操作相对繁琐
1、你需要重打包apk
2、如果遇到签名校验,你同时需要在重打包中加入hook签名代码

方法二:
核心思路(方法数不胜数,这是其中一个毕竟简单的):
hook系统libart.so的ClassLinker->DefineClass函数

hook工具:
frida

这里提供了两种测试方式:
1、基于命令行的(dexcl.js)
2、基于python程序的(dumpdex.js + main.py)


注意:
你可能需要修改的地方(代码已经对可能需要修改的地方进行了标明)
1、我测试手机是moto 5.02版本,不同版本不同手机该导出函数的原型可能不同,你需要修改
2、有函数原型不同的原因,传入参数可能需要修改,相应的Interceptor.attach的args相关需要进行修改
3、你的class descriptor需要修改为你要找的dex的里面任一类(如Lcom/example/hello/MainApplication;)
4、python中的相应的class descriptor,js文件路径,保存dump的dex路径


测试机型 moto 5.02,frida版本12.6.8

脱壳方法千千万,特别是方法二的思路千千万,随便找个点秒脱,记住他们在变也不会脱离系统机制,否则谁也玩不起来。
关于适配,代码里都有标明,相信只要你会编程和汇编都可以轻松搞定。
github: github代码
受大家影响,没个github都不好意思混了,欢迎学习交流。

这个帖子就让它沉了吧,欢迎来这个加固的帖子看看
https://bbs.pediy.com/thread-252828.htm


[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最后于 2019-7-30 17:12 被angelToms编辑 ,原因: 修改链接
打赏 + 2.00
打赏次数 1 金额 + 2.00
收起 
赞赏  supperlitt   +2.00 2019/06/29
最新回复 (85)
Superoot 2019-6-27 18:28
2
0
感谢分享, 学习学习
Hero少年 2019-6-27 19:30
3
0
大佬有没有联系方式
gamehack 2019-6-27 19:50
4
0
虽然不是很懂,但是一看就知道很历害,很实用,收藏了!
Hero少年 2019-6-27 19:55
5
0
有没有详细教程
上海刘一刀 2 2019-6-27 20:33
6
0
虽然我也不是很懂 但是我还是觉得你是大佬
学编程 1 2019-6-27 22:34
7
0
这种拖出来的DEX有包含抽取的方法吗
angelToms 2019-6-27 22:59
8
0
学编程 这种拖出来的DEX有包含抽取的方法吗
你试试不就知道了,art以下或许会出现你说的问题,但是有baksmali方案,art以上除非它也走解释执行,否则编译oat过程是需要完整dex文件的,我不相信加固厂商都不让走art,另外编译不是完整的dex,修改成本太大了。

补充:
多谢仁兄提醒,之前的确没注意,没有注意到某些厂商真让它走解释执行, 那我后面跟一下,看看他们有没有编译oat文件,如果有那么用frida稍作修改就可以脱,如果没有也没关系, 已经找到dex文件内存指针, 即使不用baksmali方案,也完全可以自己通过ClassDef--->MethodItem---->CodeItem还原回来。

最后于 2019-6-27 23:18 被angelToms编辑 ,原因:
xmtools 2019-6-28 08:51
9
0
小小白表示看不懂,能弄个视频就太好咯
桃木剑 2019-6-28 08:55
10
0
请问怎么hook系统libart.so的ClassLinker的DefineClass函数呢
angelToms 2019-6-28 09:21
11
0
桃木剑 请问怎么hook系统libart.so的ClassLinker的DefineClass函数呢
用frida
gaybc 2019-6-28 09:36
12
0
思路清晰简明 好评
刚学的时候想了很久才想到第一步
后来用这个思路更新了FUPK3
huluxia 2019-6-28 09:50
13
0
神级作品必须顶
Loopher 2019-6-28 10:01
14
0
frida脱其实好用,楼主思路很清晰源码翻了很多次吧
十八垧 1 2019-6-28 10:04
15
0
学编程 这种拖出来的DEX有包含抽取的方法吗
光dump出dex不修复,只是不完整脱壳,现在的壳基本都vmp了。
羽傲天 2019-6-28 10:06
16
0
新手不会玩~
桃木剑 2019-6-28 10:16
17
0
hook后APP会重启,并且一直提示[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
[*] leave to dump dex ...
这是因为APP不可调试吗? 应该怎么设置呢
kanxiaoming 2019-6-28 10:25
18
0
学习了,点睛神作啊。
angelToms 2019-6-28 10:33
19
0
桃木剑 hook后APP会重启,并且一直提示[*] leave to dump dex ... [*] leave to dump dex ... [*] leave to dump dex ... [ ...
注意手机型号,如果型号和我给出的样例不符,需要适配(稍作修改),与调试无关。
angelToms 2019-6-28 10:38
20
0
十八垧 光dump出dex不修复,只是不完整脱壳,现在的壳基本都vmp了。
vmp不vmp对脱壳没有太大影响, 在art 模式下脱壳比dvm脱壳要相对容易,点也比较多, 如果加固厂商不负责,加固的app后面都强制走解释执行那另说,否则你dex vmp,你要编译oat,dex必须还原,只要有还原就有机会脱。上面也有仁兄提到用FUPK3,思路都差不多,不是说不能写。
angelToms 2019-6-28 10:46
21
0
脱壳方法千千万,大牛千千万,大牛都低调,一般大牛就看看笑笑,我这也是班门弄斧,也提供一种思路,其实dex加固并没有什么神奇,也不见得多牛逼, 很多app不用加固(微信、qq、支付宝、所有访问量大的,但他们很强大),而且加固带来很多问题,很多同学可能做安全第一步就是研究加固,我倒是觉得不要把过多精力放在dex加固上,没什么太多技术含量,和系统强绑定,可以研究研究支付宝、微信这样的app怎么实现对抗的,so怎么加固的等等。
yptk 2019-6-28 10:47
22
0
如果知道机器码和注册码,安卓可不可以破解,或者模拟出注册机
Hero少年 2019-6-28 13:06
23
0
大哥有没有详细教程 学习一下 或者留下联系方式 有偿请教一下
gotyou 2019-6-28 13:18
24
0
只是dump会不会太简单了,有点标题了,不过感谢你的付出和分享
十八垧 1 2019-6-28 13:20
25
0
angelToms vmp不vmp对脱壳没有太大影响, 在art 模式下脱壳比dvm脱壳要相对容易,点也比较多, 如果加固厂商不负责,加固的app后面都强制走解释执行那另说,否则你dex vmp,你要编译oat,dex必 ...
可以了解一下现在各个厂家的商业版VMP壳的原理,并不是你说的这样。
十八垧 1 2019-6-28 13:26
26
0
angelToms vmp不vmp对脱壳没有太大影响, 在art 模式下脱壳比dvm脱壳要相对容易,点也比较多, 如果加固厂商不负责,加固的app后面都强制走解释执行那另说,否则你dex vmp,你要编译oat,dex必 ...
“vmp不vmp对脱壳没有太大影响”。。。。。。楼主脱过dex-vmp的壳吗?
最后于 2019-6-28 13:28 被十八垧编辑 ,原因:
GeneBlue 2 2019-6-28 13:37
27
0
angelToms vmp不vmp对脱壳没有太大影响, 在art 模式下脱壳比dvm脱壳要相对容易,点也比较多, 如果加固厂商不负责,加固的app后面都强制走解释执行那另说,否则你dex vmp,你要编译oat,dex必 ...
dex vmp,oat 优化的时候不需要指令还原后再优化,这两者之间本来就没有关系的。搞定vmp只有一个方法,逆人家实现的 vm,因为指令解释都是在别人实现的 vm 里解释的,和 dalvik/art 没有关系,在 dalvik/art 里找什么脱壳点都没用
xie风腾 2019-6-28 13:42
28
0

高大上,多谢楼主分享哟
angelToms 2019-6-28 14:02
29
0
GeneBlue dex vmp,oat 优化的时候不需要指令还原后再优化,这两者之间本来就没有关系的。搞定vmp只有一个方法,逆人家实现的 vm,因为指令解释都是在别人实现的 vm 里解释的,和 dalvik/art ...
不是很理解你说的, 也不是很明白你说的oat优化指什么 也不知道咋俩说的是不是一回事, 不知道是否你的意思是否是指hook 系统 invoke method, 请指教!
angelToms 2019-6-28 14:06
30
0
十八垧 angelToms vmp不vmp对脱壳没有太大影响, 在art 模式下脱壳比dvm脱壳要相对容易,点也比较多, 如果加固厂商不负责,加固的app后面都强制走 ...
 惭愧,真没有,愿闻其详!
GeneBlue 2 2019-6-28 14:16
31
0
angelToms 不是很理解你说的, 也不是很明白你说的oat优化指什么 也不知道咋俩说的是不是一回事, 不知道是否你的意思是否是指hook 系统 invoke method, 请指教!
我是针对你这句话 “你dex vmp,你要编译oat,dex必须还原,只要有还原就有机会脱” 解释的,dexvmp 和 oat 优化没有任何关系,不用混在一起。实现的 dexvmp 也不需要 hook  dalvik/art 函数。有一些介绍性的资料,楼主可以搜索看看
angelToms 2019-6-28 14:51
32
0
GeneBlue 我是针对你这句话 “你dex vmp,你要编译oat,dex必须还原,只要有还原就有机会脱” 解释的,dexvmp 和 oat 优化没有任何关系,不用混在一起。实现的 dexvmp 也不需要 hook ...
好嘞,多谢大牛指点。
angelToms 2019-6-28 14:53
33
0
gotyou 只是dump会不会太简单了,有点标题了,不过感谢你的付出和分享
谢谢大佬,不这么标题,恐怕没人看,哈哈
angelToms 2019-6-28 14:57
34
0
十八垧 可以了解一下现在各个厂家的商业版VMP壳的原理,并不是你说的这样。
大佬指出的对,我这个脱壳确实比较落后了,没想到加固已经发现到如此地步,望尘莫及呀。
nsec 2019-6-28 15:09
35
0
method2中 args[5]对应的 DexFile&,地址+4就是真实dex的地址,这个+4是怎么分析出来的呢?求大佬明示。
eyascn 2019-6-28 15:11
36
0
基于frida,脱壳无敌
angelToms 2019-6-28 15:12
37
0
nsec method2中 args[5]对应的 DexFile&,地址+4就是真实dex的地址,这个+4是怎么分析出来的呢?求大佬明示。
代码里有注释
Hero少年 2019-6-28 15:46
38
0
angelToms 代码里有注释
能不能回一下
Hero少年 2019-6-28 15:47
39
0
有没有联系方式 我这边有偿请教这个问题 
GeekCheng 2 2019-6-28 15:50
40
0
现在基本关键算法和逻辑都在so实现,然后加O和VM
angelToms 2019-6-28 16:52
41
0
GeekCheng 现在基本关键算法和逻辑都在so实现,然后加O和VM
嗯,是呀,确实如此。研究so加固更有意思。
空空飞飞 2019-6-28 17:39
42
0
学习下大神的技能
angelToms 2019-6-28 17:54
43
0
nsec method2中 args[5]对应的 DexFile&,地址+4就是真实dex的地址,这个+4是怎么分析出来的呢?求大佬明示。
class DexFile {
private:
const byte* const begin_;
...
};

这个我的手机是32位的,指针长度为4个字节,DexFile是c++结构, 第一个指针是指向虚表的指针, 0 + 4 就是begin的指针,这里的begin就是DexHeader的指针,就这样,我代码里面有写的。 
// args[5] == art::DexFile
// DexFile + 0 = vtable addr
// DexFile + 4 = *begin_ = *DexHeader
angelToms 2019-6-28 17:56
44
0
Hero少年 有没有联系方式 我这边有偿请教这个问题
您的好意我心领了,有问题可以抛出来,方便回答的,一定会回答的,这里面有很多大牛, 我只是一个菜鸟,相互学习。
gtict 2019-6-28 19:19
45
0
刚试了一下。不行。修改的包名跟activity二个地方。手机谷歌亲儿子5-6.0系统。frida/12.26

Hero少年 2019-6-28 19:27
46
0
angelToms 您的好意我心领了,有问题可以抛出来,方便回答的,一定会回答的,这里面有很多大牛, 我只是一个菜鸟,相互学习。
我想知道 为什么我的win10系统 无法弄这个环境  你能不能留一个联系方式 大佬
angelToms 2019-6-28 19:51
47
0
gtict 刚试了一下。不行。修改的包名跟activity二个地方。手机谷歌亲儿子5-6.0系统。frida/12.26
适配手机, 我代码有标注需要修改的地方, 这个不是拿过来就能直接用的。如果你的手机是moto 5.0.2是没问题的,这里只提供了一个思路。
angelToms 2019-6-28 19:54
48
0
Hero少年 我想知道 为什么我的win10系统 无法弄这个环境 你能不能留一个联系方式 大佬
这个于什么系统没有关系, 除dex vmp(我真不了解,所以不敢妄语) 、dex 指令抽取(我这里没做修复,dex抽取是能修复的),方法二应该比较简单, 安装frida,然后命令行跑一下就ok, 这个真没法在具体说了, 你可以先了解一下frida怎么用。 
Hero少年 2019-6-28 20:10
49
0
angelToms 这个于什么系统没有关系, 除dex vmp(我真不了解,所以不敢妄语) 、dex 指令抽取(我这里没做修复,dex抽取是能修复的),方法二应该比较简单, 安装frida,然后命令行跑一下就ok, 这个 ...
所以想要你联系方式 请教一下 可以吗
Hero少年 2019-6-28 20:14
50
0
angelToms 这个于什么系统没有关系, 除dex vmp(我真不了解,所以不敢妄语) 、dex 指令抽取(我这里没做修复,dex抽取是能修复的),方法二应该比较简单, 安装frida,然后命令行跑一下就ok, 这个 ...
大佬理解一下 刚接触这个frida  求教 大佬不要拒绝我啊
游客
登录 | 注册 方可回帖
返回