jd-gui和luyten
用jd-gui打开编译后的jar 类中出现多行注释Byte code:开头
这是由于反编译工具的JDK版本过高导致的显示差异,并非代码本身问题。使用低版本JDK进行反编译以获得正常显示。或者用luyten打开jar查看。
修改Apk
使用apk messenger查看app信息、查看apk信息
打开APK Messenger.exe,将apk拖到界面上后可查看app信息。
下载地址:https://www.ghxi.com/apkinfo.html
使用jadx查看apk反编译代码
打开jadx-gui-1.5.5.exe,可直接再打开apk文件查看反编译的代码。可继续全局搜索,查看目标所在的文件。
下载地址:Release 1.5.5 · skylot/jadx · GitHub
使用apktool反编译apk
知道要修改位置后,可以使用apktool反编译apk,输出反编译后的smali代码和资源文件。
先进入apktool目录,再用java命令执行apktool.jar,结果会在apktool目录下生成输出的反编译后的文件夹:
#java -jar apktool.jar d APK文件路径 java -jar apktool.jar d d:\app-release-260513.apk使用Apktool重新打包修改后的文件
修改文件后,使用Apktool重新打包,会在反编译后的文件夹中的dist目录中生成重新打包后的新的未签名的apk。
#java -jar apktool.jar b 反编译后的文件夹路径 java -jar apktool.jar b D:\tools\apktool_2.11.1\app-xdl-release-260513使用zipalign工具对APK进行对齐
为了提高安装效率和性能,可以使用zipalign工具对APK进行对齐。zipalign工具是Android SDK的一部分,用于优化APK文件,确保所有未压缩的数据都以4字节边界对齐,从而提高应用程序的运行效率。
zipalign可以在V1签名后执行,只能在V2签名前执行。
cd C:\Users\Administrator\AppData\Local\Android\Sdk\build-tools\37.0.0 # zipalign -v 4 未签名APK文件路径 对齐后的APK文件路径 zipalign -v 4 D:\tools\apktool_2.11.1\app-xdl-release-260513\dist\app-xdl-release-260513.apk D:\tools\apktool_2.11.1\app-xdl-release-260513\dist\app-xdl-release-260513-aligned.apk签名apk
- jarsigner是JDK提供的针对jar包签名的通用工具,位于JDK/bin/jarsigner.exe。
- apksigner是Google官方提供的针对Android apk签名及验证的专用工具,位于Android SDK/build-tools/SDK版本/apksigner.bat。
- V1签名:来自JDK(jarsigner), 对zip压缩包的每个文件进行验证,签名后还能对压缩包修改(移动/重新压缩文件)。
- V2签名:来自Google(apksigner),对zip压缩包的整个文件验证,签名后不能修改压缩包(包括zipalign)。
- Android 开发现状:虽然 jarsigner 可对 APK(本质是 ZIP/JAR)进行 V1 签名,但 Android 7.0+ 强制要求 V2/V3 签名。目前 Google 推荐使用
apksigner 工具替代 jarsigner 进行 APK 签名,以支持现代安全方案 。 - 安全性:默认算法可能较旧(如 SHA1),生产环境建议显式指定
SHA-256等强算法 。从 Android 11 (API 级别 30) 开始,Google Play 为了增强 APK 的安全性,要求所有上传到 Google Play 的 APK 必须使用签名方案 v2 或更高版本进行签名。
使用jarsigner工具对APK进行签名,jarsigner是Java提供的一个用于签名和验证文件的工具,位于jdk中。
apksigner位于C:\Users\Administrator\AppData\Local\Android\Sdk\build-tools\37.0.0下。
#使用 jarsigner 签名 # jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore keystore文件路径 -storepass keystore密码 -signedjar 签名后的APK文件路径 未签名的APK文件路径 keystore别名 jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore D:\AndroidStudio\XdlLib\bjxdljg.jks -storepass 密码 -signedjar D:\tools\apktool_2.11.1\app-xdl-release-260513\dist\app-xdl-release-260513-signed.apk D:\tools\apktool_2.11.1\app-xdl-release-260513\dist\app-xdl-release-260513.apk 别名 jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore D:\AndroidStudio\XdlLib\bjxdljg.jks -signedjar D:\tools\apktool_2.11.1\app-xdl-release-260513\dist\app-xdl-release-260513-signed.apk D:\tools\apktool_2.11.1\app-xdl-release-260513\dist\app-xdl-release-260513.apk 别名 #使用 apksigner 签名 #apksigner sign --ks [your private key storage path] --ks-key-alias [your key alias] --out [path to signed file] [path to unsigned file] apksigner sign --ks D:\AndroidStudio\XdlLib\bjxdljg.jks --ks-key-alias bjxdljg_alias --out D:\tools\apktool_2.11.1\app-xdl-release-260513\dist\app-xdl-release-260513-aligned-signed.apk D:\tools\apktool_2.11.1\app-xdl-release-260513\dist\app-xdl-release-260513-aligned.apk检查 APK 的签名版本
在签名或重新签名之后,使用以下命令来检查 APK 的签名版本:
apksigner verify --verbose --print-certs xxx.apk如果APK已正确签名,会看到类似“VERIFIED OK”的消息。并查看输出中是否包含V3.0 Signer: certificate,确认是否使用了 v2 或更高版本的签名方案。