首页
社区
课程
招聘
[原创]利用签名漏洞#9695860构造仿LBE免Root功能的apk(附源码)
发表于: 2013-11-15 22:01 24970

[原创]利用签名漏洞#9695860构造仿LBE免Root功能的apk(附源码)

2013-11-15 22:01
24970
      LBE利用#9695860漏洞实现了免ROOT启动,漏洞原理可以参考这篇文章http://safe.baidu.com/2013-10/android-masterkey-9695860.html
       这个漏洞的优势是,在没有原始符合签名的文件的情况下,也可以过签名验证。Patch System进程,可获取System权限
      这里参照lbe,对com.android.providers.settings进行Patch(Android4.0系统的模拟器环境)
一、还原出带classes.dex的apk
      在模拟器下使用命令
adb pull /system/app/XXX.apk XXX.apk
从/system/app目录下拷贝出SettingsProvider.apk  SettingsProvider.odex
      拷贝出的apk里没有classes.dex,用工具将odex转化成classes.dex后,打包进SettingsProvider.apk.新生成的apk不能直接安装,因为新包含进去的classes.dex跟原始的不一样,过不了签名验证。
      将包含classes.dex的apk用apktool解包到SettingsProvider目录下
二、构造新的classes.dex,使之包含新增加的功能
     
从AndroidManifest.xml上可以看到这个apk包含一个Content Provider:SettingsProvider,可以在这个Provider加载的时候,把嵌入的功能加载起来。
 1)首先构造一个将要嵌入的类,新建一个com.android.providers.settings工程,New一个PatchClass类

 PatchClass里使用列举/data目录的方法判断是否有system权限,如果有system权限就创建一个名为root的SharePreference,否则创建名为notroot的SharePreference代码如下:
 
保存为未签名的apk包的后,用apktool解包,拷贝出包里的PatchClass.smali
2)Patch  SettingsProvider.smali
将上一步生成的PatchClass.smali拷贝到步骤一生成的SettingsProvider目录下的
SettingsProvider\smali\com\android\providers\settings文件夹下,修改SettingsProvider.smali文件,在OnCreate函数中调用PatchClass类的ActivityGetRoot函数
 
3)修改AndroidManifest.xml文件
原始的AndroidManifest.xml文件:
 
修改后的AndroidManifest.xml文件:
 
上面三步修改完后,将SettingsProvider目录用apktool重新打包,然后用zip解压出包里的AndroidManifest.xml和classes.dex文件
三、生成可绕过签名的apk
将上一步生成的AndroidManifest.xml、classes.dex和包含classes.dex的SettingsProvider.apk都放到附件的loader.exe同文件夹下,在命令行下运行loader.exe SettingsProvider.apk会生成SettingsProvider_gen.apk,构造完成。

SettingsProvider_gen.apk的签名被识别为跟原始的APK一样,可对原来的SettingsProvider.apk进行更新安装。安装好后,重启系统,在/data/data/com.android.providers.settings/shared_prefs目录下生成root.xml。
可用普通权限的apk进行嵌入Class权限进行对比,安装附件的Calculator_gen.apk替换系统中的计算器apk,在对应的shared_prefs目录下生成的是notroot.xml
       初学Android,如有不对之处,欢迎指正
      附件包含构造绕过签名apk源代码和构造好的SettingsProvider_gen.apk和Calculator_gen.apk

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (25)
雪    币: 13279
活跃值: (4331)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
沙发占领,等待广告商
2013-11-16 08:11
0
雪    币: 206
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
精华,学习了
2013-11-16 09:48
0
雪    币: 77
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
应该不是真正意义上的root,uid并不是0,只是提升到了system组的权限吧,uid等于1000吧
2013-11-16 12:10
0
雪    币: 101
活跃值: (88)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
5
spark@spark-VirtualBox:~/tools$ ./CheckMasterKeyExploit.py /mnt/ShareFolder/T1
/mnt/ShareFolder/T1/Calculator_gen.apk
/mnt/ShareFolder/T1/Calculator_gen.apk is evil on MasterKey vulnerability #9695860.
/mnt/ShareFolder/T1/SettingsProvider_gen.apk
/mnt/ShareFolder/T1/SettingsProvider_gen.apk is evil on MasterKey vulnerability #9695860.

忽略我吧....
2013-11-16 12:43
0
雪    币: 53
活跃值: (280)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
http://safe.baidu.com/2013-10/android-masterkey-9695860.html
LZ的方案跟上述原文描述的原理是不同的,但也能绕过,其实是加了两个文件夹,原理类似Lbe免ROOT,即下文。
http://safe.baidu.com/2013-10/lbe-root.html
2013-11-17 15:06
0
雪    币: 427
活跃值: (64)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
路过留名
2013-11-17 15:58
0
雪    币: 88
活跃值: (156)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
下面的文章更有针对性,根本原理还是9695860,文件夹略过不属于漏洞。用winrar解压再压缩出来的zip格式的apk包里都文件夹,但并不影响签名验证。加文件夹可以略过欲修改的原始文件的签名验证,不然需要有原始的classes.dex和AndroidManifest.xml才能过签名,而系统apk对应的odex还原出来的classes.dex跟原始的不一样,用文件夹略过刚好比较方便得解决这个问题
2013-11-17 16:15
0
雪    币: 269
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
9
就是注入到system_server里面,没有root权限
2013-11-18 10:05
0
雪    币: 88
活跃值: (156)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
确实无root权限,是system权限的,谢谢指正
2013-11-18 11:18
0
雪    币: 53
活跃值: (280)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
system提升root身份是门学问,4.1之后比较麻烦了
不能再用原先的那些往/data/local.prop中写ro.kernel.qemu=1这种方式了
可以使用 写persist属性触发uevent_helper 的方式,之前在Android4.x备份恢复漏洞和root大师中看到过。

odex版本利用签名漏洞,也不可能修改原classes.dex,可修改AndroidManifest.xml,打开android:debuggable即可,
利用JDWP协议插入执行代码,root大师用过,以此system身份来执行特殊操作提升至root,具体原理可参见。
http://www.saurik.com/id/17
2013-11-18 13:11
0
雪    币: 269
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
12
谢科普,学习了~

odex也没关系,能覆盖装上就可以拿到system,系统会优先加载/data/app下面的新包,不许要修改修改原classes.dex
2013-11-19 10:16
0
雪    币: 322
活跃值: (113)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
mark!!!
2013-11-19 18:04
0
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
mark 以备日后学习
2013-11-19 20:00
0
雪    币: 1
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
感谢分享!下来学习学习
2014-1-21 13:26
0
雪    币: 2197
活跃值: (155)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
绝对是Xjun 名字好明显啊。楼主辛苦了
2014-2-14 21:10
0
雪    币: 286
活跃值: (381)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
初学者,路过,打算研究一下,确定其原理
2014-2-18 15:56
0
雪    币: 89
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
mark
2014-2-26 16:56
0
雪    币: 266
活跃值: (44)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
这个帖子得定 科普~~
2014-2-26 22:46
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
楼主,为什么我使用你提供的源码,安装在4.0版本上,提示
Failure [INSTALL_FAILED_ALREADY_EXISTS]

这个是怎么回事,没有能够安装上
2014-2-28 21:01
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
SettingsProvider_gen.apk这里面只有一个classes.dex文件,那么java在进行验证的时候验证的原始文件是哪个?
2014-3-1 13:59
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
感谢分享,已经成功实现~
2014-4-28 22:33
0
雪    币: 238
活跃值: (11)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
23
4.3以后,写persist无法再触发uevent_helper,求system提升root的方法
2014-4-29 09:43
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
我感兴趣的loader.exe是怎样实现的
2014-5-2 19:19
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
多谢,学习了
2014-5-5 15:38
0
游客
登录 | 注册 方可回帖
返回
//