首页
社区
课程
招聘
[原创]利用文件系统漏洞阻止 apktool,baksmali 反汇编apk
发表于: 2013-8-19 11:44 16760

[原创]利用文件系统漏洞阻止 apktool,baksmali 反汇编apk

2013-8-19 11:44
16760
原理很简单
apktool 要使用 java 类的类名来创建出相应的 smali 反汇编文件,
在windows/linux/mac 系统中,有些文件名是被保留给系统用的,如果用这个文件名去创建文件是非法的,如 con,com1,com2... 等等,这样就能使apk中的类不能被直接反汇编成smali文件了,很简单的一个工具

虽然比不上人家的字节码加密,却也能实现简单的阻止反汇编功能

附上工具


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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 4
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
附上测试用的例子

本例子中有一个类名为 com.example.packlite.test

被替换为 com.example.packlite.com1 后

apktool 和 baksmali 工具无法逆向出 smali 文件

crypt_test.rar
上传的附件:
2013-8-19 13:41
0
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不能阻止dex2jar啊
2013-8-19 15:09
0
雪    币: 4
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
本来想用垃圾java 类 文件目录重名来实现防止 dex2jar ,确实是防止了dex2jar,但是实现后程序无法正常安装了,
看来字节码加密靠谱些,谁丢个雏形码吧
2013-8-19 16:19
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
使用系统保留名,自带混淆工具也支持,加参数-classobfuscationdictionary xxx.txt。比如使用sdk\tools\proguard\examples\dictionaries\windows.txt
2013-8-19 16:40
0
雪    币: 1
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢lz的工具。

不过在使用中发现一个问题,dex经过加密后,重新放回apk里,签名,安装时却报错了

Failure [INSTALL_FAILED_DEXOPT]
2013-8-19 16:43
0
雪    币: 4
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
有个方法可以实现 dex2jar 失败,实现是这样的,在编写代码时加入我们代码中并不会调用的垃圾类,或者代码执行正常情况下不会执行的异常处理代码,然后对这些代码任意处理成非法的Java字节码,则apk正常执行,而dex2jar 却要倒霉!

过两天我放个垃圾类处理工具吧
2013-8-19 17:42
0
雪    币: 4
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=gudboy;1212142]感谢lz的工具。

不过在使用中发现一个问题,dex经过加密后,重新放回apk里,签名,安装时却报错了

Failure [INSTALL_FAILED_DEXOPT][/QUOTE]

这个工具只是一个示例,只能加密一个类,加密多了,Java 类就出现重名了,回头我改进一个支持多类加密的吧。
2013-8-19 17:45
0
雪    币: 1
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我也是加密了一个类,但是安装时还是会提示Failure [INSTALL_FAILED_DEXOPT]
2013-8-20 12:25
0
雪    币: 4
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
[QUOTE=gudboy;1212375]我也是加密了一个类,但是安装时还是会提示Failure [INSTALL_FAILED_DEXOPT][/QUOTE]

我自己试了下,确实有这个问题,我在虚拟机里安装时得到的信息是这个。

  08-20 03:46:25.673: E/dalvikvm(302): Out-of-order string_ids: 'Lcom/Utility/con;' then 'Lcom/Utility/a/g;'
  08-20 03:46:25.673: E/dalvikvm(302): Trouble with item 558 @ offset 0x928
  08-20 03:46:25.683: E/dalvikvm(302): Cross-item verify of section type 0001 failed
  08-20 03:46:25.683: E/dalvikvm(302): ERROR: Byte swap + verify failed

从谷歌代码中搜索得到的是修改了字符串后,没有重新排序字符串,正在修改中。
2013-8-20 14:48
0
雪    币: 473
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
lz,如果更改方法名、类名使之随机,字符串将需要重新排序,很多未改变的普通字符串(非类名,非方法名)id都将会改变,那代码中会按原来的id去引用这个字符串,那是不是会引起错误?
而且更改类名、方法名,字符串重新排序,methodid / filedid/ classdef 都将需要做相应的重新排序,这感觉要读出dex所有的结构并存储,改好之后,再按一定顺序写入新的dex,感觉难度好大啊。
不知道lz是怎么解决的,能不能提示下,
2013-12-3 16:31
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我也是加密了一个类,但是安装时还是会提示Failure [INSTALL_FAILED_DEXOPT]
2015-7-7 23:23
0
游客
登录 | 注册 方可回帖
返回
//