系统级别Apk文件反编译,修改后重新打包签名过程

版权声明:本文为博主原创文章,转载希望能注明出处,感谢。 https://blog.csdn.net/u010126792/article/details/66970881

今天给大家带来一个小的知识点,系统内置软件的反编译,修改,重新打包和签名。

很多时候我们拿到别人的软件,想要简单的修改下,例如把不是Launcher的软件改为launcher,查看apk的AndroidManifest.xml文件,获取apk的图片.xml文件资源,简单修改Activity的

横竖屏,去掉添加的Ad广告activity,或者修改部分功能进行测试,这时就需要对apk进行反编译,修改重新打包签名。

用到的工具:

反编译,打包工具:apktool_2.0.3.jar

签名工具:signapk.jar (位置:out/host/linux-x86/framework/signapk.jar)

平台秘钥:platform.x509.pem(公钥文件)  

     platform.pk8 (私钥文件) (位置:build/target/product/security/*)不同平台略有差异。

1.反编译文件 

java -jar apktool_2.0.3.jar d 360launcher.apk 

生成 360launcher 文件夹,AndroidManifest.xml文件可以直接查看修改;

apktool将Android字节码文件转换为smali文件:

smali文件夹就是android的源码文件,smali是将Android字节码用可阅读的字符串形式表现出来的一种语言,可以称之为Android字节码的反汇编语言。依赖于smali文件中的代码行数(.line关键字)和变量别名(.local关键字)等信息,可以最大程度还原原始的java代码。还原出的java代码将具有原始的变量命名,代码的顺序也与原始的java代码保持一致。

解压之后

 

smali文件内部语法展示


 

 

////////////////////////

AXMLPrinter2.jar

java -jar AXMLPrinter2.jar AndroidManifest.xml (二进制文件)

可以直接查看XML的二进制文件,直接解压apk得到的文件资源文件,二进制文件

 

查看,修改源码文件:

   smali-1.2.5.jar (smali文件转换成dex文件)  

      java -jar smali.jar classout/ -o classes.dex

 

      dex2jar  (classes.dex文件转换成classes-dex2jar.jar)   

      sh dex2jar-2.0/d2j-dex2jar.sh classes.dex

 

      jdgui 查看jar文件,可以看到源码(混效过的) 直接以界面形式打开,并能全部保存源码,保存过后利用编译器打开就可以修改源码

 

      baksmali-1.2.6.jar (dex文件转换成smali文件)

      java -jar baksmali.jar -o classout/ classes.dex

 

 

其他方式:直接解压apk文件,得到dex文件,利用dex2jar, jdgui工具也可以进行源码查看,但这种方式存在问题:R.id.....换成了具体的数字,另外是很多地方多加了this指针,包括内部类调用父亲的私有函数上,再就是{}原来不换行的,现在换行了等.

2,修改,重新打包 

可以修改smali文件,但有点难度,现在的很多软件都会进行代码的混淆,所以想要修改还是存在一点难度的,但大牛们一定有办法,我这里只讲解过程,如果后续有好的建议,会再进行更新。

java -jar apktool_2.0.3.jar b  360launcher -o a.apk

 

3,重新进行签名

我们这里只讨论系统级别的软件,也就是系统内置软件的签名,普通软件的签名自己生成一个签名就可以方便的实现签名。

系统级别利用源代码下的platform密钥对apk进行签名

platform.x509.pem  platform.pk8 必须先公钥,再私钥顺序

java -jar signapk.jar platform.x509.pem platform.pk8  a.apk new_signed.apk

 

密钥文件:进入build/target/product/security ,platform.pk8platform.x509.pem系统默认使用的密钥。

签名工具:signapk.jar的源码位置build/tools/signapk,编译以后生成的文件路径:out/host/linux-x86/framework/signapk.jar

4 其他签名工具(普通应用):

Jdk自带秘钥生成和签名工具:

签名工具  

/usr/lib/jvm/java-8-openjdk-amd64/bin/jarsigner

生成秘钥文件工具

/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/keytool

./keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore

/*说明:-genkey 产生密钥

       -alias demo.keystore 别名 demo.keystore

       -keyalg RSA 使用RSA算法对签名加密

       -validity 40000 有效期限4000

       -keystore demo.keystore */

./jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore

/*说明:-verbose 输出签名的详细信息

       -keystore  demo.keystore 密钥库位置

       -signedjar demor_signed.apk demo.apk demo.keystore 正式签名,三个参数中依次为签名后产生的文件demo_signed,要签名的文件demo.apk和密钥库demo.keystore.*/


猜你喜欢

转载自blog.csdn.net/u010126792/article/details/66970881