如何反编译apk,查看源码

最近尝试着反编译自己的apk,照着百度上的一些方法,文章都比较老了,总是报各种错,现在我总结一下如何反编译apk

一、首先确保电脑配置了java运行环境,如何配置java环境,我不在述说,可自行百度,为了反编译apk,我们需要下载3个工具

(1)apktool

    作用:利用apktool查看apk的xml文件、AndroidManifest.xml和图片等。

    进入官网https://ibotpeaches.github.io/Apktool/install/,不同的操作系统按不同的步骤来就可以了,我是window操作系统。

如何反编译apk,查看源码_第1张图片

(2)dex2jar

    作用:将apk反编译成java源码(classes.dex转化成jar文件)

   下载地址:http://sourceforge.net/projects/dex2jar/files/

(3)jd-gui

   作用:查看APK中classes.dex转化成出的jar文件,即源码文件

   下载地址:http://jd.benow.ca/

将dex2jar、jd-gui解压,最好是将这三个工具放在同一个文件夹下,方便自己使用。

二、运行编译

将需要反编译的apk移动到这三个文件夹下,win+R,输入cmd调出命令行窗口,切换到apktool文件夹目录下: 

(1)运行:apktool d test.apk,反编译时,出现了如下错误:

WARNING: Could not write to (/Users/xxx/Library/apktool/framework), using /var/folders/wr/svbl4qg12kq75hghq7nr4lch0000gn/T/ instead...
S: Please be aware this is a volatile directory and frameworks could go missing, please utilize --frame-path if the default storage directory is unavailable

 

看提示是无法写入到这个目录/Users/xxx/Library/apktool/framework(xxx为电脑用户名),那就在/Users/xxx/Library下新建apktool文件夹,并在apktool文件夹下再新建个framework文件夹,然后为了保险起见设置新建文件夹到权限,在终端输入:chmod -R 777 /Users/xxx/Library/apktool
接着再重新执行反编译命令就可以成功了

 在test.apk相同目录下会出现反编译后的文件夹。

 (2) 把apk后缀名改为zip,然后解压后,就会发现有个classes.dex,这里面就是java源码了。

 (3) 把dex文件拷贝到dex2jar-2.0解压后的目录下,cmd窗口进入到dex2jar-2.0下,运行:d2j-dex2jar.bat classes.dex回车 

完成后我们在F:\Android\apktools\dex2jar-2.0目录下就会多了个classes-dex2jar.jar文件,这个就是我们需要的jar文件。

如何反编译apk,查看源码_第2张图片

(4) 如何查看java代码了,用工具jd-gui打开classes-dex2jar.jar就可以了,如果你的apk经过混淆,那么看到的都是a、b之类的。 

如何反编译apk,查看源码_第3张图片

三、重新打包

在终端输入编译命令: apktool b xxx (xxx为刚才反编译的文件夹),成功后会在xxx文件夹下的dist文件夹下生成打包好后的apk文件。现在打包好后的apk是没有签名的,所以无法安装,现在给apk签名

(1) 在终端输入:

keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore /Users/xxx/Desktop/android.keystore

20000为时间,这个设置长点就好了,-keystore后面是签名文件保存路径。输入命令按回车键会让输入密码等信息,按提示输入,不要忘了密码,签名时要用。

(2)接着输入:

jarsigner -verbose -keystore /Users/xxx/Desktop/android.keystore -signedjar /Users/guyuechao/Desktop/signed.apk /Users/xxx/Desktop/unsigned.apk android.keystore

-keystore后面的为签名文件的路径,-signedjar后面为签名好后apk的存放路径,在这个后面的一个为需要签名的pak的路径,最后的android.keystore为证书的别名,如果不知道别名,可以在终端输入:keytool -list -v -keystore /Users/xxx/Desktop/android.keystore查看具体信息,里面有别名。
这一步还要注意,签名文件和需要签名的apk要在同一目录下。

 

你可能感兴趣的:(测试工具)