首页
论坛
专栏
课程

[原创] 开源安卓Dex2C (Java2C) 加固

2019-8-18 22:20 3905

[原创] 开源安卓Dex2C (Java2C) 加固

2019-8-18 22:20
3905
DCC(Dex-to-C Compiler)是我参考顶象加固实现的Dex2C编译器,可以把Dex 方法转化为CPP方法,进而可以使用native代码的防护方案对代码进行进一步的保护。相对于我手上顶象样本,还做了一些性能上的优化,主要是全局缓存解析jclass,jmethodID, jfieldID的结果。
仓库地址:DCC
对实现原理有兴趣的朋友可以看看这个简单的实现文档:HowItWorks
我个人测试下来觉得还算稳定,我自己测试了:
  • 安卓art虚拟机art/test/003-omnibus-opcodes测试集。
  • 网上找的几个java小游戏。
  • 微信7.0.5 9个dex,大概20W个方法,转换成功的都可以编译通过(NDK r17c)。编译第一个Dex中的方法(约2.7W),重新打包后,测试转换后的代码语义是否正确。在被微信封号前,测试了登录,登录验证,收发文本,表情,语音信息,刷朋友圈,功能都正常,就是特别的卡。
  • 淘宝,拼多多转换classes.dex后,在主页随便滑动,点开商品详情,功能都还正常,不过也是很卡。貌似他们都做了风控,重新打包都经常提示网络连接断开。
我测试过的安卓版本有5.1.1,7.1.1,9, Q beta。Dalvik虚拟机没有测试过,理论上应该兼容。
最后,发现问题欢迎提issue,我会尽力解决。
附件是art/test/003-omnibus-opcodes转成的CPP代码.


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

上传的附件:
打赏 + 5.00
打赏次数 1 金额 + 5.00
收起 
赞赏  雪衫   +5.00 2019/08/19
最新回复 (37)
飞飞fei 2019-8-18 23:15
2
0
666
Vn小帆 2019-8-18 23:27
3
0
好东西啊    
繁华皆成空 2019-8-18 23:58
4
0
好东西 已star
小堆 1 2019-8-19 00:36
5
0
划重点:在被微信封号前
滑稽,已star
think8765 2019-8-19 00:41
6
0
无边 2019-8-19 01:13
7
0
微信、淘宝这些不使用加固的原因,就是影响使用。发现卡,说明加固的方法不行,影响效率。
supperlitt 2019-8-19 08:06
8
0
好东西,不说了。
tDasm 2019-8-19 08:59
9
0
是不是没有扔掉java虚拟机?否则不会卡。
fneig 1 2019-8-19 09:34
10
0
v1 = foo(v0)
v2 = v1
v1 = foo1(v0)

请问楼主,对于这种情况你是怎么处理的?
我是使用引用计数来解决这问题。

只是来打酱油 2019-8-19 09:43
11
0
dex的函数全部转吗?  能控制只转某个包下的类不  ?
lookaside 2019-8-19 10:20
12
0
编译后的so大吗
leonrain 2019-8-19 10:29
13
0
只是来打酱油 dex的函数全部转吗? 能控制只转某个包下的类不 ?
应该是可以的,有个filter
uniking 2019-8-19 11:23
14
0
mark,感谢楼主开源。
莫灰灰 8 2019-8-19 11:27
15
0
牛逼
myeanngg 2019-8-19 13:03
16
0
加固显然是影响效率的,超级app一般都是动态对抗,加固属于静态对抗,而且还影响效率
Loopher 2019-8-19 13:39
17
0
牛皮,
刘lhhh 2019-8-19 14:09
18
0
6啊 
卑鄙游侠 2019-8-19 14:35
19
0
牛x 给大佬跪了
seandong 2019-8-19 15:18
20
0
开源了,牛逼
krash 2019-8-19 17:55
21
0
fneig ``` v1 = foo(v0) v2 = v1 v1 = foo1(v0) ``` 请问楼主,对于这种情况你是怎么处理的? 我是使用引用计数来解决这问题。
你指的是引用释放吗?我这么释放的
DeleteLocalRef(v1)
v1 = foo(v0)
DeleteLocalRef(v2)
// v2 = v1
v2 = NewLocalRef(v1)
DeleteLocalRef(v1)
v1 = foo1(v0)
krash 2019-8-19 17:59
22
0
只是来打酱油 dex的函数全部转吗? 能控制只转某个包下的类不 ?
修改filter.txt可以实现,当前支持用正则筛选需要编译的函数.后面应该会支持类,方法注解.
krash 2019-8-19 18:06
23
0
lookaside 编译后的so大吗
我觉得很大
应用                方法数(classes.dex)        so大小
微信(7.0.5)           27K                            42m
淘宝(8.10.0)         16K                            26m
拼多多(4.69.0)     40K                            38m
最后于 2019-8-19 18:11 被krash编辑 ,原因:
Ericky 6 2019-8-19 22:50
24
0
多谢大佬
xiaofu 8 2019-8-19 22:55
25
0
大佬牛批
endlif 1 2019-8-19 23:36
26
0
大佬牛逼
lscmxl 2019-8-20 09:13
27
0
dex2c这条路问题还是不少,在足够的测试用例下,部分java特性生成的smali还是存在转译困难。
使用上方法一定需要filter,效率会有影响(函数存在循环非常明显)。
whitelen 2019-8-20 09:48
28
0
MARK
爱吃菠菜 1 2019-8-20 10:55
29
0
Zkeleven 2019-8-20 13:40
30
0
tDasm 2019-8-20 15:01
31
0
lscmxl dex2c这条路问题还是不少,在足够的测试用例下,部分java特性生成的smali还是存在转译困难。 使用上方法一定需要filter,效率会有影响(函数存在循环非常明显)。
dex2c看来还是离不开java虚拟机,理论上dex2c不如java2c。
koflfy 1 2019-8-21 11:52
32
0
mark
hanbingle 1 2019-8-22 09:24
33
0
66666
bluth 2019-8-22 21:44
34
0
s试了试·  helloworld 感觉支持的方法数有点少
AqCxBoM 2019-8-24 17:35
35
0
牛逼
mb_hnosypqa 2019-8-26 22:28
36
0
感谢楼主分享
miyuecao 2019-8-27 09:53
37
0
mark,慢慢学习研究
kongfubull 2019-8-27 10:58
38
0
start
游客
登录 | 注册 方可回帖
返回