apktool与dex2jar

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] 
 -p,--frame-path    Stores framework files into .
 -t,--tag           Tag frameworks using .
usage: apktool d[ecode] [options] 
 -f,--force              Force delete destination directory.
 -o,--output        The name of folder that gets written. Default is apk.out
 -p,--frame-path    Uses framework files located in .
 -r,--no-res             Do not decode resources.
 -s,--no-src             Do not decode sources.
 -t,--frame-tag     Uses framework files tagged by .
usage: apktool b[uild] [options] 
 -f,--force-all          Skip changes detection and build all files.
 -o,--output        The name of apk that gets written. Default is dist/name.apk
 -p,--frame-path    Uses framework files located in .

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

这样就能看到源代码了。
等等,事情可能没你想的那么简单,到了第二步,你可能会遇到这个问题:

image.png

app做了防止反编译,这时候就需要apktool了。
apktool 的命令 apktool.jar d app.apk -o out ,反编译后的资源文件及布局,还有smali 会输出到 out 目录。
但是,很多app做了防止反编译的措施,比如:
image.png

这个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。

你可能感兴趣的:(apktool与dex2jar)