安卓反编译初体验
在一个iOS群里看到有人在学安卓,讨论怎么下IDE。Android Studio,刚出来的时候我就想下来玩玩,无奈那时候穿墙姿势不优雅,IDE是下回来了,磕磕碰碰到最后SDK还是没下回来。那现在就下回来跑跑以前刚学Java时写的安卓小程序。
这次下载安装AS、下SDK、下模拟器ROM包用了半个钟头左右,随便跑个helloworld是可以的,但是之前写的那个查区号的源代码不见了,当时都不知道github是什么,电脑都换了一次,也不是什么重要的东西,看来是删了。这个程序我打包过的,发到以前在顺丰做兼职时的群里,于是我下来装在了那台mt15i上,突然想到,听说安卓反编译很简单啊,我这个菜鸟写的源码,搞出源码应该不难吧,说干就干,上Google爬教程。
反编译前配置
配置apktool
主要是用来反编译出AndroidMainfest和一些资源文件的
- 右键保存为apktool
- 下载最新版的apktool.jar并改名为apktool.jar.
- 将上面的两个文件拷贝到/usr/local/bin并给执行权限,chmod +x,这样就可以直接在终端执行了
dex2jar下载配置
这个用来获取class,一个jar包
- 下载解压dex2jar
- cd到解压目录下修改shell文件的权限
1 | chmod a+x *.sh |
下载jd-gui
jd-gui下载地址
解压打开就能用。
开始反编译
获取AndroidManifest和资源文件
把需要反编译的apk拷贝到一个新建文件夹,接着到终端执行
1 | apktool d testapp.apk |
执行完后,该目录下会多一个名字和app一样的文件夹,里面有AndroidManifest、res文件夹和一些其它资源。
获取Jar包
把dex2jar解压后的文件夹拖到与apk文件同一个目录下,执行
1 | sh dex2jar-2.0/d2j-dex2jar.sh testapp.apk |
执行完后,会有生成一个jar包
获取Java源码
用jd-gui打开上面那个jar,这时就能开到源码了,再保存源码。
导入工程
在获得资源文件夹里新建一个src文件夹,把源码拖到这个文件夹里,删除BuildConfig.java和R.java再用AS导入工程即可。
按照第一篇看的文章来说,这时工程项目应该能跑起来,事实上源码里有关资源文件的调用,反编译出全是int,由于资源文件重新绑定,所以这些资源id都是不对的,如果是小程序还好说,大不了按照原来R.java一个个来改,但是如果界面稍微多点控件,几十上百次的的资源文件调用,改起来就废力了,而且这个源码的也不全对啊,一些业务逻辑看着就坑爹。解决方法如下
使用jadx反编译
jd-gui用来看看jar还行,反编译还是得靠jad,而jadx更是为反编译安卓Java源码而写的。
到github下最新的,有图形界面,打开apk,保存所有文件即可。
这时获得的源码可以说和原来的没什么差别了,除了中文直接以编码格式出来,不改也没关系,反正设备显示出来是中文,要改的话,可以输出一次这个编码,复制输出替换原来的编码就行,更简单的可以复制到百度搜索框就变换了……总觉得做得好傻,不过也不纠结了,解决了问题就好。除此之外,还免了第二步获取class,也就是jar包。
更简单的安卓反编译
只要没什么加密,其实有更简单的办法
一键反编译
github地址
这个其实是apktool、dex2jar、jad的工具集合,只不过它帮你一键处理了,需要在windows下执行bat
jad官网在线反编译
apk反编译
jad官网可以提交apk,然后在线反编译,我看了下,跟自己用jadx反编译出来的是一样的。
另外,这个网站http://www.androiddevtools.cn 关于安卓开发的应有尽有,包括反编译
结语
时隔四年,安卓开发各方面都有很大变化,要什么资源都有,还不用翻墙,一些技术博客文章看着就高大上,不像以前,有问题百度出来的文章没几篇靠谱的,而且Android系统本身也完善了很多,遥想当年还是拟物化风格iOS 5跟Android 2.3对比起来简直不是同一个时代的东西,