首先提取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,都能安装,完全跳过签名验证机制!!
方法如下:
完成以上步骤,你的Android设备就彻底裸奔了
从此,你的Android设备完全不设防了!!