无法在Android上禁用系统应用程序的签名检查

时间:2013-08-17 13:51:43

标签: android android-permissions

我需要在我的Android三星Galaxy S2上使用cm 10.1 nightly rom禁用系统应用程序的签名检查,以开发一个防盗应用程序。所以我尝试使用this solution反编译Services.jar来尝试this tutorial

更换文件并重新启动后,我的手机“忘记了”我的所有应用程序(只有rom应用程序仍然在这里),我无法安装其他应用程序(通过USB调试)。所以我尝试直接在一个新的rom(zip)文件中编辑文件,出现同样的问题。

你知道问题出在哪里吗?或者可能是另一种安装具有系统签名应用程序权限的应用程 我们知道cm的私钥吗?那么也许我可以用钥匙签署我的应用程序? (但我知道这个密钥,这是一个安全问题,所以我认为我们不能)

由于

1 个答案:

答案 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字节码,如果我犯了一些错误,请告诉我。

希望它会有所帮助!