APK反編譯工具
反編譯工具 |
Java層反編譯 |
// dex/smali dex2smali/smali2dex dex2jar // dex/smali/jar/.class // smali/java Smali2Java Smali2JavaUI |
|
|
|
|
Java代碼反編譯工具
Smali2Java
Smali文件轉java文件工具。
參考:
https://github.com/demitsuri/smali2java
Baksmali.jar
Github開源項目,支持dex與smali文件的相互轉換。版本已經比較穩定,仍在更新中。
功能:.dex反編譯.smali文件,.smali文件編譯.dex文件。
反編譯.dex文件: dex2smali java -jar baksmali-2.1.3.jar -o classout/ classes2.dex smali2dex java -jar smali-2.1.3.jar classout/ -o classes.dex |
|
v2.2.0
反編譯.apk文件: java -jar baksmali-2.2.0.jar disassemble apk-name.apk -o path java -jar baksmali-2.2.0.jar disassemble xxxv2.apk -o xxx-path 反編譯apk java -jar baksmali-2.2.0.jar disassemble xxx3.dex -o xxx3-path 反編譯dex smali2dex java -jar smali-2.2.0.jar assemble path -o dex-name.dex java -jar smali-2.2.0.jar assemble xxx-path -o apk-name.apk 編譯apk java -jar smali-2.2.0.jar assemble xxx3-path -o dex-name.dex 編譯dex |
Ref:
https://bitbucket.org/JesusFreke/smali/downloads/
Apktool
開源項目,可以對整個APK做反編譯,重新打包。APKkiller核心部分基於Apktool。版本持續更新,最新已經到2.3.0版本。
// 反編譯 apktool d test.apk apktool d xxx.apk反編譯命令 |
// 重新打包 apktool b test apktool b xxx-path 編譯 apktool if xxx.apk安裝框架 // ? |
Ref:
https://ibotpeaches.github.io/Apktool/
https://ibotpeaches.github.io/Apktool/documentation/
https://github.com/iBotPeaches/Apktool
http://blog.csdn.net/ysc123shift/article/details/52985435
http://blog.csdn.net/wolinghuanyun/article/details/52440989
android 逆向工程apktool dex2jar jd-gui Jadx Smali2Java
ApkTool 下載
APKTOOL的使用心得 cnblogs
dex2jar
Github開源項目,支持dex/jar/smali/.class文件之間的轉換。
dex-reader/writer: Read/write the Dalvik Executable (.dex) file. It has a light weight API similar with ASM.
d2j-dex2jar: Convert .dex file to .class files (zipped as jar)
smali/baksmali: disassemble dex to smali files and assemble dex from smali files. different implementation to smali/baksmali, same syntax, but we support escape in type desc "Lcom/dex2jar\t\u1234;"
other tools: d2j-decrypt-string
反編譯dex to jar
d2j-dex2jar.bat classes2.dex |
Ref:
https://github.com/pxb1988/dex2jar
apk編譯/反編譯工具baksmali和smali用法 新浪博客
Android DEX安全攻防戰 dex解析
android-classyshark
Executables (apk, multi-dex, jar) browser for Android, Java and Kotlin.反編譯解析能力還比較差,適合整個APK代碼架構分析。
適用APK數據統計,如每個dex/包的方法數等。
Ref:
https://github.com/google/android-classyshark
http://blog.csdn.net/sp6645597/article/details/51301663
jadx
jadx是一款Android反編譯gui工具,它支持apk、dex、jar、class、zip、aar等文件。jadx操作方便,反編譯后的代碼可讀性高,同時還擁有較完善的gui界面,除去混淆部分的代碼,jadx已經非常接近源代碼了。
Smali解析為java效果比較好。
Ref:
https://github.com/skylot/jadx
http://www.jb51.net/softs/544428.html
Smali2Java
Github開源項目,沒有提供jar包下載。解析率低,不建議使用。
參考:
https://github.com/demitsuri/smali2java
Smali2JavaUI
Smali/jar文件轉java文件,版本較老,轉換率低。解析率低,不建議使用。
Ref:
JD-GUI
主要功能:從.class/.jar文件查看java代碼。解析能力有限,已兩年多未更新。
參考:
Java Decompiler JD-GUI-1.4.0
https://github.com/java-decompiler/jd-gui
signapk.jar
功能:修改后的apk加簽名。
簽名命令:
java -jar signapk.jar platform.x509.pem platform.pk8 test.apk test-signed.apk |
注意:簽名前刪除META-INF文件夾,否則會導致安裝包解析失敗。
參考:
Apktool signapk.jar 可簽名 CSDN下載
異常問題:
Q1. Exception in thread "main" java.lang.UnsupportedClassVersionError
較高版本的JDK編譯的java class文件試圖在較低版本的JVM上運行產生的錯誤。java -version和javac -version命令來查看版本是否一致。
Test01:jdk1.7 => jdk1.8
換成jdk1.8運行環境后,出現新問題:Exception in thread "main" com.beust.jcommander.MissingCommandException: Expected a command, got -o
參考:
java編譯中出現了Exception in thread “main" java.lang.UnsupportedClassVersionError
Unsupported major.minor version 52.0怎么處理
Q2.方法總數統計
http://inloop.github.io/apk-method-count/
https://github.com/KeepSafe/dexcount-gradle-plugin
參考:
JesusFreke/smali github
JesusFreke smali jar下載
apk反編譯工具(smali/baksmali) v2.1.3 使用示例
Android對apk源碼的修改--反編譯+源碼修改+重新打包+簽名 CSDN
其他參考
androguard
androguard/androguard github
Android平台APK分析工具包androguard的部署使用和原理分析 博客園
Androguard基本使用方法 CSDN