您的位置:首页 > 移动开发 > Android开发

让你的Android彻底裸奔吧!! -- 瘫痪Android的安全机制

2016-03-11 08:42 549 查看
首先提取system/framework下的core.jar和services.jar,反编译

先修改core.jar

打开core.jar.out/smali/java/security/MessageDigest.smali

搜索.method public static isEqual,只有一个地方

.method public static isEqual([B[B)Z

.locals 4

.parameter "digesta"

.parameter "digestb"

.prologue

const/4 v1, 0x0

.line 302

array-length v2, p0

array-length v3, p1

if-eq v2, v3, :cond_1

.line 310

.....

.....

.....

.end method

把.prologue下面,.end method上面的全部删掉,删之前保留.prologue下面的第一行出现的.line XXX

在.line XXX(比如我这里是.line 302)下面一行,输入 const/4 v0, 0x1,留空一行,再下一行输入 return v0

修改好后是这样

.method public static isEqual([B[B)Z

.locals 1

.parameter "digesta"

.parameter "digestb"

.prologue

.line 302

const/4 v0, 0x1

return v0

.end method

保存

这个改了以后apk只要有签名就可以安装,不管签名后的apk是否修改过

下面是去除不同签名不能覆盖安装的显示!!

还是core.jar,打开core.jar.out/smali/java/security/Signature.smali

搜索:.method public final verify

会找到2处地方,这2个地方都要改

.method public final verify([B)Z

.locals 2

.parameter "signature"

.annotation system Ldalvik/annotation/Throws;

value = {

Ljava/security/SignatureException;

}

.end annotation

.prologue

.line 372

iget v0, p0, Ljava/security/Signature;->state:I

const/4 v1, 0x3

if-eq v0, v1, :cond_0

.line 373

......

......

......

return v0

.end method

第二行的.locals 2改成.locals 1

然后.line 372下面到return v0上面都删掉,.line 372下面添加一行 :const/4 v0, 0x1,下面空一行

修改完后:

.method public final verify([B)Z

.locals 1

.parameter "signature"

.annotation system Ldalvik/annotation/Throws;

value = {

Ljava/security/SignatureException;

}

.end annotation

.prologue

.line 372

const/4 v0, 0x1

return v0

.end method

第二处搜索到的地方也是这样改

也是.prologue下面一行.line XXX下面开始到return v0上面删掉,添加const/4 v0, 0x1

接下来改services.jar

反编译后打开services.jar.out/smali/com/android/server/pm/PackageManagerService.smali

搜索:.method static compareSignatures,只有一处

.method static compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I

.locals 7

.parameter "s1"

.parameter "s2"

.prologue

.line 2257

if-nez p0, :cond_1

.line 2258

if-nez p1, :cond_0

const/4 v6, 0x1

.line 2277

:goto_0

return v6

.line 2258

:cond_0

const/4 v6, -0x1

goto :goto_0

。。。

。。。

。。。

:cond_5

const/4 v6, -0x3

goto :goto_0

.end method

.locals 7改成.locals 1

.prologue .line XXXX下面到.end method上面的都删除,.line XXXX下一行添加 const/4 v0, 0x0,空一行,再下一行添加return v0

修改后:

.method static compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I

.locals 1

.parameter "s1"

.parameter "s2"

.prologue

.line 2257

const/4 v0, 0x0

return v0

.end method

重新编译后放framework,重启,重启后会提示Android正在升级,升级完后就可以体验了

本文并非教你写病毒来破解Android系统,所提及的操作,均要求用户主动参与
本文主要针对是平板.Andoird手机由于涉及你的帐号/资金的安全,非常不建议你使用下面的方法!!
先感谢一下硬件小二,rk28小组的协助
第一步,/system可写

Rk2918现在可使用我不久前发明的方法,将/system映射在/data/sysrw
Rk2818的话,自然是使用aufs这种xda发明的方法,但使用rk2918的方法会快些
第二步,获取root权限

因为是完全击垮,故需要使用完全自由的su程序,改造自Superuser的su源码–
无限制无管理功能的su
这里提供的su,去掉了GUI确认等繁琐操作,任何程序都可以无提示获取root权限
自行添加的话,请确保所在分区支持suid,并设置su的权限为6777
第三步,移除apk的签名验证机制

在此之前,尝试美化系统界面的童鞋都知道,系统apk千万千万不要签名,否则肯定用不了
对此我就不信邪,偏偏要破解掉这个限制,实现任意签名的apk,都能安装,完全跳过签名验证机制!!
方法如下:

下载apktool,并安装好JRE或JDK,把apktool解压到D:\apktool
在机器上拷贝/system/framework/services.jar到硬盘的D:\apktool\services.apk
进入命令行,进入D:\apktool,执行 apktool.bat d services.apk ,稍等片刻,就能能看到新建的services文件夹
用UE或notepad++打开D:\apktool\services\smali\com\android\server\PackageManagerService.smali
查找private verifySignaturesLP,这就是校验签名的方法
在verifySignaturesLP方法体中,找到:goto_0,在后面加一行 const/4 v0, 0x1 ,含义是赋值为true,以Java来表达,就是return true,这是verifySignaturesLP方法的最终return语句之前的一句,故任何调用本方法的语句,都能拿到true,即签名验证永远为真. 注意,这里的0x1中的x是小写字母X,貌似很多人直接拷贝的话,会变成全角的X.如果你没有找到goto_0,那就找return v0之类的语句.一般都只有一个return语句!!
保存,重新打包: apktool.bat b services services.jar ,然后拷贝回机器,重启就可以了

完成以上步骤,你的Android设备就彻底裸奔了

System可写 – 为任意改系统文件创造条件
无限制的su – 任何程序都能悄无声息地获取root权限,加上上一条的System可写,即任何程序都能修改/system
不再有签名验证 – 任何apk程序都可以声明自己是系统程序,甚至可以动态生成apk程序进行安装(随便签名就行!!)

从此,你的Android设备完全不设防了!!

Android
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: