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
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
上传的附件: