我需要在我的Android三星Galaxy S2上使用cm 10.1 nightly rom禁用系统应用程序的签名检查,以开发一个防盗应用程序。所以我尝试使用this solution反编译Services.jar来尝试this tutorial。
更换文件并重新启动后,我的手机“忘记了”我的所有应用程序(只有rom应用程序仍然在这里),我无法安装其他应用程序(通过USB调试)。所以我尝试直接在一个新的rom(zip)文件中编辑文件,出现同样的问题。
你知道问题出在哪里吗?或者可能是另一种安装具有系统签名应用程序权限的应用程 我们知道cm的私钥吗?那么也许我可以用钥匙签署我的应用程序? (但我知道这个密钥,这是一个安全问题,所以我认为我们不能)
由于
答案 0 :(得分:0)
我在安装问题发生时检查了logcat,我有这个错误
"Cannot install platform packages to user storage"
我查看了cm github,我发现了这部分代码
Signature[] s1 = null;
if (obj instanceof SharedUserSetting) {
s1 = ((SharedUserSetting)obj).signatures.mSignatures;
}
if ((compareSignatures(pkg.mSignatures, s1) == PackageManager.SIGNATURE_MATCH)) {
Slog.w(TAG, "Cannot install platform packages to user storage");
mLastScanError = PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION;
return null;
}
以前,通过本教程,我编辑了compareSignatures()
函数,使其返回SIGNATURE_MATCH
。但是在此代码中,当函数返回此值时会发生错误。
似乎此代码是添加的安全性,以确保系统应用程序不会安装在“用户存储”中。解决我的问题的唯一方法是让错误永远不会附加(我不认为这是一个很大的漏洞,但也许我错了,如果你有更好的解决方案告诉我)
所以除了第一个教程之外,我还要替换
invoke-static {v3, v0}, Lcom/android/server/pm/PackageManagerService;->compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I
move-result v3
if-nez v3, :cond_1d1
.line 3715
const-string v3, "PackageManager"
const-string v4, "Cannot install platform packages to user storage"
invoke-static {v3, v4}, Landroid/util/Slog;->w(Ljava/lang/String;Ljava/lang/String;)I
通过
invoke-static {v3, v0}, Lcom/android/server/pm/PackageManagerService;->compareSignatures([Landroid/content/pm/Signature;[Landroid/content/pm/Signature;)I
const/4 v3, -0x3
if-nez v3, :cond_1d1
.line 3715
const-string v3, "PackageManager"
const-string v4, "Cannot install platform packages to user storage"
invoke-static {v3, v4}, Landroid/util/Slog;->w(Ljava/lang/String;Ljava/lang/String;)I
它有效:)我以前从未使用过反编译的Java字节码,如果我犯了一些错误,请告诉我。
希望它会有所帮助!