首页
社区
课程
招聘
[原创] 开源安卓Dex2C (Java2C) 加固
发表于: 2019-8-18 22:20 38801

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

2019-8-18 22:20
38801

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虚拟机没有测试过,理论上应该兼容。
我测试过的安卓版本有5.1.1,7.1.1,9, Q beta。Dalvik虚拟机没有测试过,理论上应该兼容。
最后,发现问题欢迎提issue,我会尽力解决。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 17
支持
分享
打赏 + 5.00雪花
打赏次数 1 雪花 + 5.00
 
赞赏  orz1ruo   +5.00 2019/08/19 上个星期之前看过,一直没测试
最新回复 (57)
雪    币: 3897
活跃值: (157)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
666
2019-8-18 23:15
0
雪    币: 2719
活跃值: (1595)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
好东西啊    
2019-8-18 23:27
0
雪    币: 25
活跃值: (1111)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
好东西 已star
2019-8-18 23:58
0
雪    币: 3134
活跃值: (1222)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
划重点:在被微信封号前
滑稽,已star
2019-8-19 00:36
0
雪    币: 722
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
2019-8-19 00:41
0
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
微信、淘宝这些不使用加固的原因,就是影响使用。发现卡,说明加固的方法不行,影响效率。
2019-8-19 01:13
0
雪    币: 1385
活跃值: (5609)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
8
好东西,不说了。
2019-8-19 08:06
0
雪    币: 14865
活跃值: (6088)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
是不是没有扔掉java虚拟机?否则不会卡。
2019-8-19 08:59
0
雪    币: 90
活跃值: (173)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
v1 = foo(v0)
v2 = v1
v1 = foo1(v0)

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

2019-8-19 09:34
0
雪    币: 40
活跃值: (680)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
dex的函数全部转吗?  能控制只转某个包下的类不  ?
2019-8-19 09:43
0
雪    币: 78
活跃值: (1848)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
编译后的so大吗
2019-8-19 10:20
0
雪    币: 51
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
只是来打酱油 dex的函数全部转吗? 能控制只转某个包下的类不 ?
应该是可以的,有个filter
2019-8-19 10:29
0
雪    币: 931
活跃值: (199)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
mark,感谢楼主开源。
2019-8-19 11:23
0
雪    币: 2314
活跃值: (2205)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
15
牛逼
2019-8-19 11:27
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
加固显然是影响效率的,超级app一般都是动态对抗,加固属于静态对抗,而且还影响效率
2019-8-19 13:03
0
雪    币: 210
活跃值: (641)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
17
牛皮,
2019-8-19 13:39
0
雪    币: 163
活跃值: (509)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
6啊 
2019-8-19 14:09
0
雪    币: 62
活跃值: (281)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
牛x 给大佬跪了
2019-8-19 14:35
0
雪    币: 1144
活跃值: (1274)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
开源了,牛逼
2019-8-19 15:18
0
雪    币: 3818
活跃值: (4228)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
21
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)
2019-8-19 17:55
0
雪    币: 3818
活跃值: (4228)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
22
只是来打酱油 dex的函数全部转吗? 能控制只转某个包下的类不 ?
修改filter.txt可以实现,当前支持用正则筛选需要编译的函数.后面应该会支持类,方法注解.
2019-8-19 17:59
0
雪    币: 3818
活跃值: (4228)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
23
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编辑 ,原因:
2019-8-19 18:06
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
24
多谢大佬
2019-8-19 22:50
0
雪    币: 1564
活跃值: (3572)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
25
大佬牛批
2019-8-19 22:55
0
游客
登录 | 注册 方可回帖
返回
//