打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
解决反编译后的安卓apk会被报毒的方法

目前几种常用的反编译工具如ApkIDE、APKDB、Androidkiller及较早版本的ApkToolBox 等反编译某些安卓热门apk会被一些安全软件检测含有木马或恶意程序,产生误判误报。

原因是一些手机上的安全软件如360等会将这些安卓热门apk的非官方签名列入了与安卓APK文件名一一对应黑名单,解决办法就是重新生成新的证书文件testkey.x509.pem和密钥文件testkey.pk8,替换掉那些反编译工具上被一些安全软件列入黑名单的证书文件testkey.x509.pem和密钥文件testkey.pk8,再重新对安卓APK反编译后签名即可。

需要jdk或jre支持,官方下载地址: https://www.oracle.com/technetwork/java/javase/downloads/

环境变量JAVA_HOME,要指向jdk或jre目录,若电脑上环境变量没有JAVA_HOME路径,可在电脑上设置本机环境变量JAVA_HOME路径

       Windows 64位系统安装*****-windows-x64为64位的jdk或jre以及Windows 32位系统安装*****-windows-i586为32位的jdk或jre的Java路径为 C:\Program Files\Java\ 如:

       C:\Program Files\Java\jdk1.7.0_80             64位系统安装 jdk-7u80-windows-x64   32位系统安装 jdk-7u80-windows-i586
       C:\Program Files\Java\jre7                    64位系统安装 jdk-7u80-windows-x64  

       C:\Program Files\Java\jdk1.8.0_192            64位系统安装 jdk-8u192-windows-x64  32位系统安装 jdk-8u192-windows-i586
       C:\Program Files\Java\jre1.8.0_192            64位系统安装 jdk-8u192-windows-x64  

       C:\Program Files\Java\jre1.7.0_80             64位系统安装 jre-7u80-windows-x64   32位系统安装 jre-7u80-windows-i586   
       C:\Program Files\Java\jre1.8.0_161            64位系统安装 jre-8u161-windows-x64  32位系统安装 jre-8u161-windows-i586  

       Windows 64 位系统安装*****-windows-i586为32位的jdk或jre的Java路径为 C:\Program Files (x86)\Java\ 如:

       C:\Program Files (x86)\Java\jdk1.7.0_80       64位系统安装 jdk-7u80-windows-i586
       C:\Program Files (x86)\Java\jdk1.8.0_192      64位系统安装 jdk-8u192-windows-i586
       C:\Program Files (x86)\Java\jre1.7.0_80       64位系统安装 jre-7u80-windows-i586
       C:\Program Files (x86)\Java\jre1.8.0_161      64位系统安装 jre-8u161-windows-i586

   在电脑上可按以下方法设置环境变量:JAVA_HOME、PATH

       JAVA_HOME:我的电脑(计算机)->属性->高级(高级系统设置)->单击“环境变量”按钮
                  ->单击“系统变量”区域的“新建”按钮->在“变量名”文本框中输入JAVA_HOME
                  在“变量值”文本框中输入JDK的安装路径(如:C:\Program Files\Java\jdk1.7.0_80),单击确定

       PATH:     在系统变量中查看PATH变量,如果存在PATH,则在最末尾多添加一个%JAVA_HOME%\bin;(直接添加,连;也加上,无需加空格之类的,以下相同)
                  如果不存在,则新建变量PATH,设定变量值为:%JAVA_HOME%\bin;

  

具体过程如下:

一、生成*****.keystorede如bug.keystore证书密钥文件

   1、在附件中以管理员权限运行“命令提示符”,打开dos界面,根据电脑上安装的jdk位数

   Windows 64位系统安装*****-windows-x64为64位的jdk以及Windows 32位系统安装*****-windows-i586为32位的jdk 输入以下代码
   cd C:\Program Files\Java\jdk*\bin         
   Windows 64 位系统安装*****-windows-i586为32位的jdk 输入以下代码
   cd C:\Program Files (x86)\Java\jdk*\bin
   切换到jdk的bin目录:C:\Program Files\Java\jdk*\bin 或 C:\Program Files (x86)\Java\jdk*\bin

   在dos窗口输入:keytool -genkey -alias androiddebugkey -keyalg RSA -validity 36500 -keysize 2048 -keystore debug.keystore -keypass android -storepass android

   出现问题并填写
   您的名字与姓氏是什么?
       [Unknown]: localhost
   您的组织单位名称是什么?
       [Unknown]: test
   您的组织名称是什么?
       [Unknown]: test
   您所在的城市或区域名称是什么?
       [Unknown]: test
   您所在的省/市/自治区名称是什么?
       [Unknown]: test
   该单位的双字母国家/地区代码是什么?
       [Unknown]: test
   CN=localhost, OU=test, O=test, L=test, STtest, C=test 是否正确?
       [否]:  y

   填写相关信息后会在Java的bin目录下生成密钥文件 debug.keystore   
   就是我们需要的安卓Android签名密钥文件,(-validity 36500 表示证书的有效天数为36500天)

   其中:
        KeystoreFile密钥文件名为    debug.keystore
        -alias密钥别名为            androiddebugkey  
        -storepass密钥密码为        android
        -keypass android 表示密钥密码keypassPassword为      android
        密钥文件名debug.keystore、密钥别名 androiddebugkey、 密钥storepass和keypassPassword密码 android 都可根据自己的需要设定

就能得到.jks格式 .keystore证书密钥文件debug.keystore,可用apksigner或jarsigner两种签名代码之一给反编译后的安卓APK文件签名就不会报毒了。

如果要用signapk方式签名给反编译后的安卓APK文件签名就需要将.jks格式 .keystore证书密钥文件debug.keystore转换成testkey.x509.pem证书文件+testkey.pk8密钥文件

二、jks格式 .keystore证书密钥文件debug.keystore转换成testkey.x509.pem证书文件+testkey.pk8密钥文件的方法

   转换签名文件需要OpenSSL环境支持

   Openssl第三方下载地址: http://slproweb.com/products/Win32OpenSSL.html

   根据OpenSSL的版本和安装路径添加OpenSSL环境变量,如安装 Win64OpenSSL 则

   在计算机->属性->高级系统配置->高级->环境变量
   编辑系统变量
   变量名:         PATH
   在变量值中加入: C:\Program Files\OpenSSL-Win64\bin;
      
   完成以上步骤后,开始验证是否设置正确
   运行cmd(开始,运行,输入cmd,回车),或点击“附件”中的“命令提示符”,
   输入     openssl
   回车出现 openssl>

   或输入start openssl
   弹出dos窗口 openssl>

   就表明OpenSSL环境变量配置正确
  
   或下载安装Win32OpenSSL 或 Win64OpenSSL后,将OpenSSL-Win32或OpenSSL-Win64文件夹bin目录中的所有文件复制到java下如jdk1.*.0_*的bin目录中

   然后将.jks格式 .keystore证书密钥文件debug.keystore复制到java的bin目录中
   如: C:\Program Files\Java\jdk1.8.0_192\bin
           C:\Program Files\Java\jdk1.7.0_80\bin

方法一:

在附件中以管理员身份运行运行“命令提示符”,打开dos界面,输入以下命令,如
cd C:\Program Files\Java\jdk1.8.0_192\bin
cd C:\Program Files\Java\jdk1.7.0_80\bin

1. 将keystore文件转换为pkcs12格式

   keytool -importkeystore -srckeystore debug.keystore -destkeystore testkey.p12 -srcstoretype JKS -deststoretype PKCS12

   按提示在dos窗口
   输入目标密钥库口令 如:android   再次输入新口令 如:android
   输入源密钥库口令   如:android
   目标密钥库口令一定要设置并且和源密钥库口令一样,如:android

或 keytool -importkeystore -srckeystore debug.keystore -srcstoretype JKS -srcalias androiddebugkey -srcstorepass android -srckeypass android -destkeystore testkey.p12 -deststoretype PKCS12 -destalias testkey -deststorepass android -destkeypass android

2. 将PKCS12 dump成pem

openssl pkcs12 -in testkey.p12 -nodes -out testkey.rsa.pem

按提示在dos窗口
Enter Import Password:    如:android

testkey.rsa.pem 可以直接用文本格式查看

用“记事本”打开 testkey.rsa.pem 文件,可查看其中的证书(CERTIFICATE)和 私钥(PRIVATE KEY ),可能有RSA KEY 这个不用管,如下所示

Bag Attributes
    friendlyName: testkey
    localKeyID: 54 69 6D 65 20 31 35 34 37 37 33 30 35 37 36 33 31 39
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDfp3ZTr57zhvQW
wvmmB1dGleMHq+Kg67SCx1Yy7Bf95Dz8Tipt2FzEdfEEkQvDcXhpkVqgc95Q/7eu
5mGh61LY7V8qzTU7sBc4Yy9xMIjraL8Jd7fGSEH5n6iZe6O9UJTNfGTdIzYrHaGx
XCl5S9G1t8Qbsziherzacm7hURjZpPK0wqre0ONjTJIPNicU287WUjb4GW159S7e
BVSmi8IJHxk9TPLH1Dz5GqOvgU84x4JPZ/ikwiKXAoGANP7EYVnig81kQtqjRdaQ
/f5Y6UGqURGw8hGDDTssXAuVAyb4bDokH4DSrEvdprO6TuFqFIeDn56V6hvXhWSH
+Fguhg2r4mzX8LQsJmKozcsUY+DrY/eP+1b+nU+uOzSCwanEGyrESRYVCznH3kYY
CTnpBXQscLijgmac/rPhGiM=
-----END PRIVATE KEY-----
Bag Attributes
    friendlyName: testkey
    localKeyID: 54 69 6D 65 20 31 35 34 37 37 33 30 35 37 36 33 31 39
subject=C = Test, ST = Test, L = Test, O = Test, OU = Test, CN = Doublemine

issuer=C = Test, ST = Test, L = Test, O = Test, OU = Test, CN = Doublemine

-----BEGIN CERTIFICATE-----
MIIDYTCCAkmgAwIBAgIEP5A+yjANBgkqhkiG9w0BAQsFADBgMQ0wCwYDVQQGEwRU
ZXN0MQ0wCwYDVQQIEwRUZXN0MQ0wCwYDVQQHEwRUZXN0MQ0wCwYDVQQKEwRUZXN0
MQ0wCwYDVQQLEwRUZXN0MRMwEQYDVQQDEwpEb3VibGVtaW5lMCAXDTE5MDExMDIz
LE70Z9yAszLB3HNI7VSEea7WY5KBKUHLZlA2y/8idL4hqqPeKOJ/+/82NBHBlByn
Wrf1j0dvIk3FAMs7mLoYoRZVddKkK09OEEdotmXbXklmA+pXuaUxzBgs9NoDoUi4
8vF/rlqqx+3zEJDXehKq703BIJ0SxAY/RglGfUgmE5qFk/q0ZsuS/hAO1K8BhpiZ
AKsjk5A=
-----END CERTIFICATE-----

复制从“BEGIN CERTIFICATE”到“END CERTIFICATE”含有证书信息的文本内容后,新建文本文档,保存为 testkey.x509.pem
或将从“BEGIN CERTIFICATE”到“END CERTIFICATE”含有证书信息的文本内容保留后,另存为           testkey.x509.pem
如下所示

-----BEGIN CERTIFICATE-----
MIIDYTCCAkmgAwIBAgIEP5A+yjANBgkqhkiG9w0BAQsFADBgMQ0wCwYDVQQGEwRU
ZXN0MQ0wCwYDVQQIEwRUZXN0MQ0wCwYDVQQHEwRUZXN0MQ0wCwYDVQQKEwRUZXN0
MQ0wCwYDVQQLEwRUZXN0MRMwEQYDVQQDEwpEb3VibGVtaW5lMCAXDTE5MDExMDIz
Wrf1j0dvIk3FAMs7mLoYoRZVddKkK09OEEdotmXbXklmA+pXuaUxzBgs9NoDoUi4
8vF/rlqqx+3zEJDXehKq703BIJ0SxAY/RglGfUgmE5qFk/q0ZsuS/hAO1K8BhpiZ
AKsjk5A=
-----END CERTIFICATE-----

testkey.x509.pem 文件即是我们最后需要的证书文件

复制从“BEGIN RSA PRIVATE KEY”到“END RSA PRIVATE KEY”含有私钥信息的文本内容后,新建文本文档,保存为 testkey.pem
或将从“BEGIN RSA PRIVATE KEY”到“END RSA PRIVATE KEY”含有私钥信息的文本内容保留后,另存为           testkey.pem
如下所示

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDfp3ZTr57zhvQW
wvmmB1dGleMHq+Kg67SCx1Yy7Bf95Dz8Tipt2FzEdfEEkQvDcXhpkVqgc95Q/7eu
5mGh61LY7V8qzTU7sBc4Yy9xMIjraL8Jd7fGSEH5n6iZe6O9UJTNfGTdIzYrHaGx
BVSmi8IJHxk9TPLH1Dz5GqOvgU84x4JPZ/ikwiKXAoGANP7EYVnig81kQtqjRdaQ
/f5Y6UGqURGw8hGDDTssXAuVAyb4bDokH4DSrEvdprO6TuFqFIeDn56V6hvXhWSH
+Fguhg2r4mzX8LQsJmKozcsUY+DrY/eP+1b+nU+uOzSCwanEGyrESRYVCznH3kYY
CTnpBXQscLijgmac/rPhGiM=
-----END PRIVATE KEY-----

3. 生成pk8格式的私钥

   openssl pkcs8 -topk8 -outform DER -in testkey.pem -inform PEM -out testkey.pk8 -nocrypt
或 openssl pkcs8 -topk8 -in testkey.pem -inform PEM -passin pass:android -out testkey.pk8 -outform DER -nocrypt

即可生成testkey.pk8 私钥文件,然后将先前制作的证书文件证书文件testkey.x509.pem和密钥文件testkey.pk8复制保存下来给apk签名:
java -jar signapk.jar testkey.x509.pem testkey.pk8 unsigned.apk signed.apk

方法二:

在附件中以管理员身份运行运行“命令提示符”,打开dos界面,输入以下命令,如
cd C:\Program Files\Java\jdk1.8.0_192\bin
cd C:\Program Files\Java\jdk1.7.0_80\bin

1. 把.jks转换为pkcs12标准的证书+私钥文件

     keytool -importkeystore -srckeystore debug.keystore -srcstoretype JKS -srcalias androiddebugkey -srcstorepass android -srckeypass android -destkeystore testkey.p12 -deststoretype PKCS12 -destalias testkey -deststorepass android -destkeypass android

   因为pkcs12不支持keypass
   所以-destkeypass如果单独设置密码的话
   keytool会提示你
   这个密码不起作用
   但是如果你不设置密码的话
   后面导出key的时候会报错
   所以这里必须要设置destkeypass
   并且和deststorepass设置的一样

或 keytool -importkeystore -srckeystore debug.keystore -destkeystore testkey.p12 -srcstoretype JKS -deststoretype PKCS12

   按提示在dos窗口
   输入目标密钥库口令 如:android   再次输入新口令 如:android
   输入源密钥库口令   如:android
   目标密钥库口令一定要设置并且和源密钥库口令一样,如:android

2. 从生成的pkcs12标准的证书+私钥文件testkey.p12中,先提取得到含有证书信息的.x509.pem证书文件

   openssl pkcs12 -nokeys -in testkey.p12 -passin pass:android -out testkey.x509.pem -passout pass:android
    -nokeys,就是指不要私钥key信息,只要证书cert信息,直接导出含有证书信息的.pem文件,即为.x509.pem 证书文件

3. 把私钥key信息提取出来,不过提取出来含有私钥key信息的.pem文件是pkcs12标准的

   openssl pkcs12 -nocerts -in testkey.p12 -passin pass:android -out testkey.pem -passout pass:android
    -nocerts,就是指不要证书cert信息,只要私钥key信息,直接导出含有私钥信息pkcs12标准的.pem文件

4. 把之前的pkcs12标准的私钥.pem文件,转换为pkcs8标准,就得到.pk8私钥文件

     openssl pkcs8 -topk8 -in testkey.pem -inform PEM -passin pass:android -out testkey.pk8 -outform DER -nocrypt
  或 openssl pkcs8 -topk8 -outform DER -in testkey.pem -inform PEM -out testkey.pk8 -nocrypt

即可生成testkey.pk8 私钥文件,然后将先前制作的证书文件证书文件testkey.x509.pem和密钥文件testkey.pk8复制保存下来给apk签名:
java -jar signapk.jar testkey.x509.pem testkey.pk8 unsigned.apk signed.apk

两钟方法不同之处是将pkcs12格式的.p12证书密钥文件转换成含证书信息和密钥信息的.pem文件时

方法一未在openssl命令参数中添加拆分命令,一次性将证书和密钥信息转换在同一个.pem文件中
需要通过“记事本”等将含证书信息和私钥信息文本信息的一个.pem文件拆分成两个单独的证书信息.pem文件和私钥信息.pem文件

方法二则在openssl命令参数中,添加了拆分命令:-nokeys(不要私钥key信息,只要证书cert信息)、-nocerts(不要证书cert信息,只要私钥key信息)
分两次将证书信息和密钥信息转换成两个单独的证书信息.pem文件和私钥信息的.pem文件
无需再通过“记事本”等对已经是单独的证书信息.pem文件和私钥信息.pem文件进行拆分

方法三、利用SSL在线工具转换

SSL在线工具-在线证书格式转换|证书在线合并|p12、pfx、jks证书在线合成解析:
http://www.ssleye.com/jks_pkcs12.html


1. 打开SSL在线工具网站,将JKS格式的 debug.keystore证书密钥文件“点击上传或拖拽到此处”
   选择“JKS”转成“PEM”
   在右边2个框中,分别输入私钥密码KEY,如 android (KEY,若私钥加密对其进行解密),也可不输入这个私钥密码KEY ,  和JKS密码,如 android

结果,就能得到如

私钥

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA36d2U6+e84b0FsL5pgdXRpXjB6vioOu0gsdWMuwX/eQ8/E4q
bdhcxHXxBJELw3F4aZFaoHPeUP+3ruZhoetS2O1fKs01O7AXOGMvcTCI62i/CXe3
xkhB+Z+omXujvVCUzXxk3SM2Kx2hsbFUEp7EkL6s/D7U2YodPVXWqdAMoREcAjrb
pMIilwKBgDT+xGFZ4oPNZELao0XWkP3+WOlBqlERsPIRgw07LFwLlQMm+Gw6JB+A
0qxL3aazuk7hahSHg5+eleob14Vkh/hYLoYNq+Js1/C0LCZiqM3LFGPg62P3j/tW
/p1Prjs0gsGpxBsqxEkWFQs5x95GGAk56QV0LHC4o4JmnP6z4Roj
-----END RSA PRIVATE KEY-----


证书

-----BEGIN CERTIFICATE-----
MIIDYTCCAkmgAwIBAgIEP5A+yjANBgkqhkiG9w0BAQsFADBgMQ0wCwYDVQQGEwRU
ZXN0MQ0wCwYDVQQIEwRUZXN0MQ0wCwYDVQQHEwRUZXN0MQ0wCwYDVQQKEwRUZXN0
MQ0wCwYDVQQLEwRUZXN0MRMwEQYDVQQDEwpEb3VibGVtaW5lMCAXDTE5MDExMDIz
Wrf1j0dvIk3FAMs7mLoYoRZVddKkK09OEEdotmXbXklmA+pXuaUxzBgs9NoDoUi4
8vF/rlqqx+3zEJDXehKq703BIJ0SxAY/RglGfUgmE5qFk/q0ZsuS/hAO1K8BhpiZ
AKsjk5A=
-----END CERTIFICATE-----

2.分别将含有证书信息和私钥信息的文本内容复制到新建的2个文本文档中,重命名为含有证书信息的 ***.x509.pem文件和含私钥信息的***.pem文件
  如证书文件testkey.x509.pem  和 私钥文件testkey.pem

3. 把含私钥信息testkey.pem文件转换成.pk8格式私钥文件

在附件中以管理员身份运行运行“命令提示符”,打开dos界面,输入以下命令,如
cd C:\Program Files\Java\jdk1.8.0_192\bin
cd C:\Program Files\Java\jdk1.7.0_80\bin

   openssl pkcs8 -topk8 -outform DER -in testkey.pem -inform PEM -out testkey.pk8 -nocrypt
或 openssl pkcs8 -topk8 -in testkey.pem -inform PEM -passin pass:android -out testkey.pk8 -outform DER -nocrypt

即可生成testkey.pk8 私钥文件,然后将先前制作的证书文件证书文件testkey.x509.pem和密钥文件testkey.pk8复制保存下来给apk签名:
java -jar signapk.jar testkey.x509.pem testkey.pk8 unsigned.apk signed.apk

最后用上述三种方法之一得到的证书文件testkey.x509.pem 和私钥文件testkey.pem 替换掉反编译工具上被一些安全软件列入黑名单的证书文件testkey.x509.pem和密钥文件testkey.pk8,再重新对安卓APK反编译后签名就不会被安全软件报毒了。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
android应用程序的签名(Signature)
[z][Android]使用platform密钥来给apk文件签名的命令
Android中的签名方式2
Android 外接sdk之支付宝
windows下eclipse中,涉及源码编译的apk开发——使用系统签名机制
Android传输数据时加密详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服