首页
社区
课程
招聘
[讨论]LBE免root的分析
发表于: 2013-10-14 15:03 19993

[讨论]LBE免root的分析

2013-10-14 15:03
19993
LBE 5.1公测版宣称利用了Master Key漏洞实现免ROOT开启主动防御,这两天进行了一下分析。

Master Key漏洞目前我已知有三种利用方法:
1、修改原始APK文件中的DEX或其他文件,然后利用文件名重复导致签名绕过
2、利用整数溢出导致的DEX计算区间被覆盖导致签名绕过
3、在system分区写入apk,保持XML来导致签名被绕过

预期LBE应该是用的第一个,但是所谓LBE的解释貌似又是第二个。唯一能确定的就是,LBE是替换系统的SettingProvider。

首先排除3,因为要写system分区就会破坏所谓了保修协议(这也是LBE的宣传标语之一)

然后剩下就是1和2,这两种都需要修改dex文件。不幸的是,我的HTC手机的settingprovider.apk根本就不包含dex文件。这样一来,LBE怎么触发MaseterKey漏洞呢。

进一步通过packages.xml获得了LBE安装的补丁APK,一看根本就没有重名文件,说明肯定不是方法1。

再回首,难道真的用的方法2,但是方法2也需要DEX代码...难道MasterKey还有第四种?

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 12940
活跃值: (4036)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
据说LBE公开之后
250+110成了第一个免root的
2013-10-14 16:47
0
雪    币: 341
活跃值: (138)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
这么碉堡啊 我更新去。。
2013-10-14 19:15
0
雪    币: 77
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
LBE公开?它是开源的吗?
2013-10-15 09:29
0
雪    币: 168
活跃值: (81)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
修改原始APK文件中的DEX或其他文件,然后利用文件名重复导致签名绕过 文件名重复这个在对新版本的系统没啥影响了都修复了
2013-10-16 09:22
0
雪    币: 125
活跃值: (35)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
没有人分析过吗?还是没弄出来LBE是怎么利用master-key漏洞的
2013-10-16 11:23
0
雪    币: 293
活跃值: (225)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
7
LBE应该用的是 http://www.saurik.com/id/18/ 这篇所说的方法。
我获得lbe_patch里确实没有重复的文件,但是这个lbe_patch的zip格式是有问题的:
CERT.RSA的Central Directory结构里,其file comment length为32768,根据http://www.saurik.com/id/18/所说,java用的是readShort(),这样读的长度是0,但是C++里读的仍然是32768。
所以java层的签名校验是,解析Central Directory的时候,会直接读取接下来的那个Central Directory, 接下来两个Central Directory结构的file name都是以"/"结尾的,如下图:


而在PackageParser.java
(/frameworks/base/core/java/android/content/pm/PackageParser.java)中:


isDirectory()函数如下:


所以遇到文件名以"/"结尾的就直接pass了。

这样LBE就在java层的校验上通过了,同时在C++层面,解析完CERT.RSA Central Directory 后是正确的AndroidManifest.xml和classes.dex, 46 + filename_length + filecomment_length(32768) + extra_field_length会正好跳到AndroidManifest.xml,这样代码加载没有问题,同时又绕过了签名校验。

不知道讲清楚没。
上传的附件:
2013-10-16 14:53
0
雪    币: 293
活跃值: (225)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
8
LBE应该用的是 http://www.saurik.com/id/18/ 这篇所说的方法。
我获得lbe_patch里确实没有重复的文件,但是这个lbe_patch的zip格式是有问题的:
CERT.RSA的Central Directory结构里,其file comment length为32768,根据http://www.saurik.com/id/18/所说,java用的是readShort(),这样读的长度是0,但是C++里读的仍然是32768。
所以java层的签名校验是,解析Central Directory的时候,会直接读取接下来的那个Central Directory, 接下来两个Central Directory结构的file name都是以"/"结尾的,如下图:


而在PackageParser.java
(/frameworks/base/core/java/android/content/pm/PackageParser.java)中:


isDirectory()函数如下:


所以遇到文件名以"/"结尾的就直接pass了。

这样LBE就在java层的校验上通过了,同时在C++层面,解析完CERT.RSA Central Directory 后是正确的AndroidManifest.xml和classes.dex, 46 + filename_length + filecomment_length(32768) + extra_field_length会正好跳到AndroidManifest.xml,这样代码加载没有问题,同时又绕过了签名校验。

不知道讲清楚没。
上传的附件:
2013-10-16 14:55
0
雪    币: 213
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
漏洞的原理,可以参考我的文章:
http://www.colordancer.net/blog/2013/08/26/android-%E7%AC%AC%E4%BA%8C%E4%B8%AA%E7%AD%BE%E5%90%8D%E6%BC%8F%E6%B4%9E-9695860-%E6%8F%AD%E7%A7%98/

leb怎么利用这个漏洞的,提示一下:patch
2013-10-16 15:18
0
雪    币: 77
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
看了博主的文章,还有一些不明白的地方,求博主修改index绕过 签名的apk
2013-10-24 00:20
0
游客
登录 | 注册 方可回帖
返回
//