首页
社区
课程
招聘
Android万能脱壳机
发表于: 2019-6-27 18:11 24537

Android万能脱壳机

2019-6-27 18:11
24537

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


很多人觉得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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-7-30 17:12 被angelToms编辑 ,原因: 修改链接
收藏
免费 9
支持
分享
打赏 + 2.00雪花
打赏次数 1 雪花 + 2.00
 
赞赏  supperlitt   +2.00 2019/06/29
最新回复 (89)
雪    币: 175
活跃值: (211)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享, 学习学习
2019-6-27 18:28
0
雪    币: 4256
活跃值: (3843)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
D-t
3
大佬有没有联系方式
2019-6-27 19:30
0
雪    币: 6096
活跃值: (5515)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
4
虽然不是很懂,但是一看就知道很历害,很实用,收藏了!
2019-6-27 19:50
0
雪    币: 4256
活跃值: (3843)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
D-t
5
有没有详细教程
2019-6-27 19:55
0
雪    币: 977
活跃值: (435)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
虽然我也不是很懂 但是我还是觉得你是大佬
2019-6-27 20:33
0
雪    币: 163
活跃值: (1623)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
这种拖出来的DEX有包含抽取的方法吗
2019-6-27 22:34
0
雪    币: 3040
活跃值: (1150)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
8
学编程 这种拖出来的DEX有包含抽取的方法吗
你试试不就知道了,art以下或许会出现你说的问题,但是有baksmali方案,art以上除非它也走解释执行,否则编译oat过程是需要完整dex文件的,我不相信加固厂商都不让走art,另外编译不是完整的dex,修改成本太大了。

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

最后于 2019-6-27 23:18 被angelToms编辑 ,原因:
2019-6-27 22:59
0
雪    币: 5190
活跃值: (832)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
小小白表示看不懂,能弄个视频就太好咯
2019-6-28 08:51
0
雪    币: 41
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
请问怎么hook系统libart.so的ClassLinker的DefineClass函数呢
2019-6-28 08:55
0
雪    币: 3040
活跃值: (1150)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
11
桃木剑 请问怎么hook系统libart.so的ClassLinker的DefineClass函数呢
用frida
2019-6-28 09:21
0
雪    币: 33
活跃值: (322)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
思路清晰简明 好评
刚学的时候想了很久才想到第一步
后来用这个思路更新了FUPK3
2019-6-28 09:36
0
雪    币: 1696
活跃值: (2297)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
神级作品必须顶
2019-6-28 09:50
0
雪    币: 210
活跃值: (641)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
14
frida脱其实好用,楼主思路很清晰源码翻了很多次吧
2019-6-28 10:01
0
雪    币: 2039
活跃值: (1468)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
15
学编程 这种拖出来的DEX有包含抽取的方法吗
光dump出dex不修复,只是不完整脱壳,现在的壳基本都vmp了。
2019-6-28 10:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
新手不会玩~
2019-6-28 10:06
0
雪    币: 41
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
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不可调试吗? 应该怎么设置呢
2019-6-28 10:16
0
雪    币: 1548
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
学习了,点睛神作啊。
2019-6-28 10:25
0
雪    币: 3040
活跃值: (1150)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
19
桃木剑 hook后APP会重启,并且一直提示[*] leave to dump dex ... [*] leave to dump dex ... [*] leave to dump dex ... [ ...
注意手机型号,如果型号和我给出的样例不符,需要适配(稍作修改),与调试无关。
2019-6-28 10:33
0
雪    币: 3040
活跃值: (1150)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
20
十八垧 光dump出dex不修复,只是不完整脱壳,现在的壳基本都vmp了。
vmp不vmp对脱壳没有太大影响, 在art 模式下脱壳比dvm脱壳要相对容易,点也比较多, 如果加固厂商不负责,加固的app后面都强制走解释执行那另说,否则你dex vmp,你要编译oat,dex必须还原,只要有还原就有机会脱。上面也有仁兄提到用FUPK3,思路都差不多,不是说不能写。
2019-6-28 10:38
0
雪    币: 3040
活跃值: (1150)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
21
有时候自己脑袋总犯浑说一些或者随便评价一些不着边际的话,回过头来在看自己才发觉自己是那么的可笑、无知,我需要反省自己,并且为犯过的错承担后果,我实在不知天高地厚,让大佬们见笑了,还请大佬和各位同仁原谅。
最后于 2020-3-20 20:06 被angelToms编辑 ,原因:
2019-6-28 10:46
0
雪    币: 305
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
如果知道机器码和注册码,安卓可不可以破解,或者模拟出注册机
2019-6-28 10:47
0
雪    币: 4256
活跃值: (3843)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
D-t
23
大哥有没有详细教程 学习一下 或者留下联系方式 有偿请教一下
2019-6-28 13:06
0
雪    币: 164
活跃值: (61)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
只是dump会不会太简单了,有点标题了,不过感谢你的付出和分享
2019-6-28 13:18
0
雪    币: 2039
活跃值: (1468)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
25
angelToms vmp不vmp对脱壳没有太大影响, 在art 模式下脱壳比dvm脱壳要相对容易,点也比较多, 如果加固厂商不负责,加固的app后面都强制走解释执行那另说,否则你dex vmp,你要编译oat,dex必 ...
可以了解一下现在各个厂家的商业版VMP壳的原理,并不是你说的这样。
2019-6-28 13:20
0
游客
登录 | 注册 方可回帖
返回
//