工具下载

  • apktool :https://ibotpeaches.github.io/Apktool/install
  • dex2jar:https://github.com/pxb1988/dex2jar
  • jd-gui:http://jd.benow.ca

 




Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_jar


 


根据apktool网站提示的下载方法,右击 wrapper script,链接存储为apktool,不要带拓展名


 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_jar_02


 

然后点击 find newest here下载apktool.jar,选择第一个下载最新版本

 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_jar_03


 

下载完把apktool_2.3.3.jar重命名为apktool.jar,然后把apktool.jar和apktool一起拷贝到/usr/local/bin路径下

 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_反编译_04


 


 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_jar_05


 


这样环境就配好啦,打开终端,输入 apktool命令,看到以下输出说明apktool配置成功

 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_jar_06


 

新建个MyTest目录方便管理,随便放个test.apk进去作为测试包

 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_jar_07


 


反编译

终端输入cd /Users/zachary/zachary/MyTest进入到测试apk所在目录,输入apktool d test.apk开始反编译


 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_资源文件_08


 

编译结束可以看到MyTest目录下多了个test文件夹,里面就是反编译以后的产物,我们想要的AndroidManifest.xml和res/.等资源文件

 



 

此时资源文件反编译就完成了,下面继续反编译java代码,这是就要用到 dex2jarjd-gui

下载完 dex2jarjd-gui解压一下就可以了,复制到MyTest目录方便操作

 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_资源文件_09


 

终端进入MyTest目录,输入命令 sh dex2jar-2.0/d2j-dex2jar.sh test.apk(如果提示Permission Deny权限问题,先输入命令 chmod +x dex2jar-2.0/d2j-dex2jar.sh改一下权限就好了)

 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_资源文件_10


 


运行结束,在MyTest目录会生成文件test-dex2jar.jar,就是我们需要的java代码压缩文件


 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_jar_11


 


右击用 jd-gui打开(或者先打开jd-gui再把test-dex2jar.jar拖到jd-gui自动导入,就可以看到java代码啦


 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_资源文件_12


 


 


回编译

刚才我们执行apktool d test.apk反编译得到了test目录


 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_jar_13


 


 

回编译就是执行命令 apktool b test

 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_反编译_14


 


成功之后,test目录下会生成build和dist目录


 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_资源文件_15


 


build目录下存放的是打包后的dex文件和资源文件(和apk解压后一样一样的)


 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_资源文件_16


image.png

dist目录下存放的是重新打包后的apk文件

 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_资源文件_17


 


重新签名

复制签名文件到dist目录下方便操作


 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_反编译_18


 


 

终端进入dist目录,执行命令 jarsigner -verbose -keystore [your_key_store_path] -signedjar [signed_apk_name] [usigned_apk_name] [your_key_store_alias] -digestalg SHA1 -sigalg MD5withRSA

字段说明:

  • [your_key_store_path]:密钥所在位置的绝对路径
  • [signed_apk_name]:签名后安装包名称
  • [usigned_apk_name]:未签名的安装包名称
  • [your_key_store_alias]:密钥的别名

因为我们把秘钥和test.apk放在同一路径,所以密钥所在位置的绝对路径直接填testkey就好啦,macjenkinskey是我的秘钥别名,别误会(邪恶.jpg)

 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_jar_19


 

输一下密码,看不到输入的,开始签名

 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_jar_20


 


 


签完名后,在dist目录下就可以看到签完名后的apk了



 


后话


反编译的时候,也可以把test.apk的拓展名改成test.zip解压出来


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_反编译_21


 


把classes.dex复制到dex2jar-2.0路径下


 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_资源文件_22


 


 

终端进入dex2jar-2.0路径下,执行命令 ./d2j-dex2jar.sh classes.dex

 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_反编译_23


 


同样可以得到classes-dex2jar.jar


 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_资源文件_24


 


反编译,再回编译,同样可以得到classes.dex,就在这个路径下


 


Android 反编译后 注释可以看到吗 android 反编译后重新生成apk_jar_25