apktool is a tool for reverse engineering 3rd party, closed, binary Android apps.
这是用来反编译app的,大部分人应该都用过,还有一款jadx,只要把app拖进去就能看到反编译后的java代码,非常方便,此篇只介绍apktool。
apktool 的相关命令
usage: apktool
-advance,--advanced prints advance information.
-version,--version prints the version then exits
usage: apktool if|install-framework [options] <framework.apk>
-p,--frame-path <dir> Stores framework files into <dir>.
-t,--tag <tag> Tag frameworks using <tag>.
usage: apktool d[ecode] [options] <file_apk>
-f,--force Force delete destination directory.
-o,--output <dir> The name of folder that gets written. Default is apk.out
-p,--frame-path <dir> Uses framework files located in <dir>.
-r,--no-res Do not decode resources.
-s,--no-src Do not decode sources.
-t,--frame-tag <tag> Uses framework files tagged by <tag>.
usage: apktool b[uild] [options] <app_path>
-f,--force-all Skip changes detection and build all files.
-o,--output <dir> The name of apk that gets written. Default is dist/name.apk
-p,--frame-path <dir> Uses framework files located in <dir>.
For additional info, see: http://ibotpeaches.github.io/Apktool/
For smali/baksmali info, see: https://github.com/JesusFreke/smali
之前使用的主要的操作步骤是:
1.unzip apk
2.dex2jar classes.dex classes-dex2jar.jar
3.jd-gui class.jar
这样就能看到源代码了。
等等,事情可能没你想的那么简单,到了第二步,你可能会遇到这个问题:
app做了防止反编译,这时候就需要apktool了。
apktool 的命令
apktool.jar d app.apk -o out
,反编译后的资源文件及布局,还有smali 会输出到 out
目录。但是,很多app做了防止反编译的措施,比如:
这个app对resource.asrc 做了处理,导致直接反编译失败。
下载最新版本的apktool可以解决。
得到smali 文件后,查找导致崩溃的方法testdex2jarcrash
,删掉这些目录,重新打包apktool.jar b out
,当然重新打包的过程很可能失败,但是此时应该已经生成了我们想要的dex 文件了。
接着重新运行 sh d2j-dex2jar.sh classes.dex --force
,然后将生成的jar 文件拖到jd-gui
中就可以了。
如果只是查看源代码使用jadx
更简单方便,直接拖进去就好,因为后面要动态调试apk,所以需要smali文件,所以选择apktool。