如何强行安装签名错误的 Android 应用

如何强行安装签名错误的 Android 应用,第1张

首先提取system/framework下的corejar和servicesjar,反编译

先修改corejar

打开corejarout/smali/java/security/MessageDigestsmali

搜索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是否修改过。

方法/步骤

1

1 win7,开始菜单,搜索cmd

2

2 打开cmd

3

3 进入android

4

4 使用命令keytool -list -v -keystore debugkeystore

5

5 需要安装keytool,办法是安装jdk,百度搜索jdk并下载安装;具体平台按实际情况选择

6 安装完毕,进入到jdk安装bin目录,并复制地址

7 回到cmd命令窗口,输入cd + 空格,并在标题栏右侧点击粘贴

8 回车,进入到这个目录

9 再次输入keytool -list -v -keystore debugkeystore命令并回车,出现错误

10 先执行以下命令keytool -genkey -v -keystore debugkeystore -alias androiddebugkey -keyalg RSA -validity 10000

11 按提示输入密码(自己定),密保答案等;到后来需要重新再输入密码,生成完成

12 到keytool目录下,看到debugkeystore已经生成成功

13 将这个文件复制到android文件夹下

14 现在再次键入生成android签名的命令:keytool -list -v -keystore debugkeystore,按提示输入密码,即可成功生成签名

步骤阅读

15 在标题栏右键选择标记复制其中的SHA1的值,即为android的签名

也有提到怎么单独给一个apk签名,这里补充一下android的签名权限控制机制。

android的标准签名key有:

     testkey

     media

    latform

    hared

    以上的四种,可以在源码的/build/target/product/security里面看到对应的密钥,其中sharedpk8代表私钥,sharedx509pem公钥,一定是成对出现的。

    其中testkey是作为android编译的时候默认的签名key,如果系统中的apk的androidmk中没有设置LOCAL_CERTIFICATE的值,就默认使用testkey。

   而如果设置成:

   LOCAL_CERTIFICATE := platform

    就代表使用platform来签名,这样的话这个apk就拥有了和system相同的签名,因为系统级别的签名也是使用的platform来签名,此时使用android:sharedUserId="androiduidsystem"才有用!

     在/build/target/product/security目录下有个README,里面有说怎么制作这些key以及使用问题(android42):

     从上面可以看出来在源码下的/development/tools目录下有个make_key的脚本,通过传入两个参数就可以生成一对签名用的key。

    其中第一个为key的名字,一般都默认成android本身有的,因为很多地方都默认使用了这些名字,我们自定义的话只需要对第二个参数动手脚,定义如下:

    C ---> Country Name (2 letter code) ST ---> State or Province Name (full name) L ---> Locality Name (eg, city) O ---> Organization Name (eg, company) OU ---> Organizational Unit Name (eg, section) CN ---> Common Name (eg, your name or your server’s hostname) emailAddress ---> Contact email addre

    另外在使用上面的make_key脚本生成key的过程中会提示输入password,我的处理是不输入,直接enter,不要密码!后面解释,用自定义的key替换/security下面的。

    可以看到android源码里面的key使用的第二个参数就是上面README里面的,是公开的,所以要release版本的系统的话,肯定要有自己的签名key才能起到一个安全控制作用。

    在上面提到如果apk中的编译选项LOCAL_CERTIFICATE没有设置的话,就会使用默认的testkey作为签名key,我们可以修改成自己想要的key,按照上面的步骤制作一个releasekey,修改android配置在/build/core/configmk中定义变量:

在主makefile文件里面:

ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/releasekey)

  BUILD_VERSION_TAGS += release-key

这样的话默认的所有签名将会使用releasekey。

修改完之后就要编译了,如果上面的这些key在制作的时候输入了password就会出现如下错误:

我在网上找到了合理的解释:

其实会出现这个错误的最根本的原因是多线程的问题。在编译的时候为了加速一般都会执行make -jxxx,这样本来需要手动输入密码的时候,由于其它线程的运行,就会导致影响当前的输入终端,所以就会导致密码无法输入的情况!

再编译完成之后也可以在buildprop中查看到变量:

这样处理了之后编译出来的都是签名过的了,系统才算是release版本

我发现我这样处理之后,整个系统的算是全部按照我的要求签名了。

网上看到还有另外的签名release办法,但是应该是针对另外的版本的,借用学习一下:

make -j4 PRODUCT-product_modul-user dist

这个怎么跟平时的编译不一样,后面多了两个参数PRODUCT-product_modul-user 和 dist 编译完成之后回在源码/out/dist/目录内生成个product_modul-target_files开头的zip文件这就是我们需要进行签名的文件系统

我的product_modul 是full_gotechcn,后面加“-user”代表的是最终用户版本,关于这个命名以及product_modul等可参考>

以上就是关于如何强行安装签名错误的 Android 应用全部的内容,包括:如何强行安装签名错误的 Android 应用、如何获取android app的签名、android 系统签名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9635684.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存