APK反编译及重新打包

  • 使用aapt查看APK信息

aapt在SDK的build-tools目录下

aapt dump badging D:\xxx.apk
  • 使用apktool反编译APK

apktool项目地址

apktool_xxx.jar d xxx.apk

可以得到图片、XML配置、语言资源等文件

  • 使用dex2jar反编译APK中的classes.dex

dex2jar项目地址

d2j-dex2jar classes.dex

可以得到classes-dex2jar.jar

  • 使用jd-gui将classes-dex2jar.jar的class文件

jd-gui项目地址

  • 或者使用procyon反编译class

procyon项目地址

java -jar decompiler.jar java.lang.String
java -jar decompiler.jar -jar myJar.jar -o out
  • 使用apktool重新打包
apktool b folder -o xxx.apk
  • 生成密钥
keytool -genkey -alias xxx_alias -keyalg RSA -validity 20000 -keystore xxx.keystore

-genkey 生成密钥

-alias 密钥对的别名(密钥库可以存在多个密钥对,用于区分不同密钥对)

-keyalg 生成密钥对的算法(常用RSA/DSA,DSA只用于签名,默认采用DSA)

-validity 密钥对的有效期(单位: 天)

-keystore 密钥库名字以及存储位置(默认当前目录)

  • 重新签名
jarsigner -verbose -keystore xxx.keystore -storepass xxx_password -signedjar xxx_signed.apk xxx.apk xxx_alias

-verbose:suboptions 签名/验证时输出详细信息。子选项可以是 all, grouped 或 summary

-keystore 密钥库位置

-signedjar 已签名的APK文件的名称