转载请注明出处:https://juejin.im/post/5ab8ab8e6fb9a028ce7b9741
写在开头
三月份的事情比较多,导致都没有写出自认为还算优质的博文。
其实Amigo学习第三篇都列好大纲了,但希望能分享得更详细一些,学得也更深入一些,加上公司的任务重了...
幸得今天有点时间,接的活也快收尾了。分享一下在项目中遇到的反编译工具的使用。
反编译大家应该都不陌生,刚好最近对一个安卓包进行了反编译-改应用名-再打包-再签名-发布,这样一系列的操作。于是决定记录下来,(技术含量不大)主要作学习、总结及备忘之用。
反编译资源文件
- apktool 获得程序的源代码、图片、XML配置、语言资源等文件。
- dex2jar 将 classes.dex 转为 jar文件。
- jd-gui 查看 jar 文件。
以上工具都是可以搜索并下载得到的。
下载后,解压到本地磁盘中,
在 Windows 系统中,按下 “Windows + R” 组合键,
输入 “cmd” 确定,
打开命令行程序默认路径应该是在 C 盘,如果你的反编译工具,解压后的路径在其他盘符,如 D 盘,可输入 “D:回车”,可以跳转到 D 盘 的根目录下。
再输入 "cd D:\download\apktool" 定位到 apktool 文件夹下,
将需要反编译的 apk 文件拷贝到 apktool 文件夹路径下。
输入指令:apktool d -f [带反编译的 apk 文件] -o [反编译后存放的文件夹]
如:apktool d -f abc.apk -o abc
如果你只需要改应用名或其他资源文件,那么你可以去查看 [反编译后存放的文件夹]。
如果你想看到应用的源代码,继续...
反编译源代码
下载后,解压到本地磁盘中,
再输入 "cd D:\download\dex2jar" 定位到 dex2jar 文件夹下,
和上一步的操作类似。
解压 abc.apk ,将 classes.dex 拷贝到 dex2jar 文件夹下。
CMD 中输入 dex2jar.bat classes.dex
一顿输出后...在 dex2jar 文件夹下会看到 classes_dex2jar.jar 文件
用 jd-gui 工具可以打开查看,放在 Android Studio 中也可查看。
这样就可以看到安卓应用的源代码了,但大部分应用都会混淆代码,所看到的变量名、类名等都是用 a-z 的字母表示。不过到了这一步,你就可以做很多事情了。比如可以结合 Fiddler 做一些事情;可以看到大致的工程结构;可以看到核心代码的大致实现思路等...
再打包
修改了应用名之后,重新打包,如下操作。
定位到 apktool
输入 apktool b abc
abc 是反编译后的存放文件夹
重新打包后生成的 apk 文件在 abc\dist 中。
再签名
反编译 - 修改应用名 - 再打包,然后是签名
这里就不是 apktool 工具了,而是用的 jdk\bin 下的工具 jarsinger.exe
cd 到 你的 jdk\bin 下,输入:
jarsigner -verbose -keystore [签名文件地址] -signedjar [签名后 apk文件地址] [待签名 apk文件地址] [keystore 的 Alias]
如:jarsigner -verbose -keystore D:\abc.keystore -signedjar D:\abc_signed.apk D:\abc.apk abcAlias
一顿疯狂输出后...
这里没有写明有效期限,所以是默认时间。
写在后头
想了解 apktool 更多其他内容
定位到 apktool 文件夹,在 cmd 中输入 apktool
以获取帮助
最后附上 apktool.jar 的下载地址 点击打开
这是国外的网站,打开很慢。
如果不能下载,试试用梯子。
如果梯子还不能下载,文章尾部有群号,可以 直接找我要~
推荐阅读:Android 热修复 - 各框架原理学习及对比
Android 热修复 - Tinker 实现及踩过的坑
记录在此,仅为学习!
感谢您的阅读!欢迎指正!
欢迎加入 Android 技术交流群,群号:155495090