Android笔记 apk的反编译 | 更新于2017/7/25

反编译工具下载

http://download.csdn.net/detail/u011109881/8068441


以上图片来自传智播客张泽华视频 我传的资源解压即可 无需安装

1.反编译图片

非常简单 仅需修改apk文件为zip文件 然后解压 就可以得到各种图片了 但会发现其他资源都是乱码

2apktool的使用     反编译布局文件(使用apktool获取 资源文件 xml文件等)

将apk文件移动到apktool工具所在目录,打开cmd命令行,cd到当前目录 执行命令 apktool d 你要反编译的apk文件名


会发现当前目录多了一个文件夹 现在的布局文件不再是乱码

找界面技巧 将刚才生成的的文件夹以Existing Android Code Into Workspace的方式导入 就可在res下layout图形化工具预览界面(有的没有界面)

3.dex2jar的使用:把dex文件转成jar文件

将apk改名为zip文件 取得其中的dex文件 复制到dex2jar工具所在目录 cmd来到dex2jar工具所在目录

执行如下命令


(dex2jar-0.0.9.9版可用 另外一个版本报错)

会发现多了classes_dex2jar.jar,即class所在压缩包 ,若改名为zip 即可查看包结构


4jd-gui.exe的使用 把class文件转化成Java文件 

将上一步编译的jar文件放到jd-gui.exe所在目录 拖到jd-gui.exe上打开就可查看代码


Androidfby反编译工具更简单 一步到位 大家看readme.txt中的链接吧 此处不再赘述


--------------------------------------------------------------------------

20170713更新

使用原来的工具反编译时遇到2个问题

 

问题一

apkTool版本过低

 

I: Baksmaling...

I: Loading resource table...
Exception in thread "main" brut.androlib.AndrolibException: Could not decode ars
c file
at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.Java:56)
at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibRes
ources.java:491)
at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.jav
a:74)
at brut.androlib.res.AndrolibResources.getResTable(AndrolibResources.jav
a:66)
at brut.androlib.Androlib.getResTable(Androlib.java:50)
at brut.androlib.ApkDecoder.getResTable(ApkDecoder.java:189)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:114)
at brut.apktool.Main.cmdDecode(Main.java:146)
at brut.apktool.Main.main(Main.java:77)
Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000
at brut.util.ExtDataInput.skipCheckInt(ExtDataInput.java:48)
at brut.androlib.res.decoder.StringBlock.read(StringBlock.java:44)
at brut.androlib.res.decoder.ARSCDecoder.readPackage(ARSCDecoder.java:10
2)
at brut.androlib.res.decoder.ARSCDecoder.readTable(ARSCDecoder.java:83)
at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:49)
... 8 more

 

原因 apktool.jar的版本太低,如果使用高版本不会出现异常

 

解决方案:

1.登陆http://ibotpeaches.github.io/Apktool/ 下载最新版本的apktool.jar

2.找到apk2java\apktool1.4.1下的apktool.jar,移除它,替换为刚下载的apktool.jar

 

参考资料:http://blog.csdn.net/chengkaizone/article/details/47255493

 

问题二

java.lang.UnsupportedClassVersionError 版本不一致出错

 

java.lang.UnsupportedClassVersionError: org/apache/lucene/store/Directory : Unsupported major.minor version 51.0

 at java.lang.ClassLoader.defineClass1(Native Method)

 at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)

 at java.lang.ClassLoader.defineClass(ClassLoader.java:615)

 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)

 at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)

 at java.net.URLClassLoader.access$000(URLClassLoader.java:58)

 at java.net.URLClassLoader$1.run(URLClassLoader.java:197)

 at java.security.AccessController.doPrivileged(Native Method)

 at java.net.URLClassLoader.findClass(URLClassLoader.java:190)

 at java.lang.ClassLoader.loadClass(ClassLoader.java:306)

 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

 at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

 Exception in thread "main"

 

看报错信息,是因为使用的jar包版本不对。这个51.0是什么呢?

JDK不同的版本,编译出的class文件是不同的。通过查看分析class文件前几个字节,可以找到对应的关系,详细的参考官方,细微的版本之间可能有差异

JDK 1.7 = 51 (0x33 hex),
JDK 1.6 = 50 (0x32 hex),
JDK 1.5 = 49 (0x31 hex),
JDK 1.4 = 48 (0x30 hex),
JDK 1.3 = 47 (0x2F hex),
JDK 1.2 = 46 (0x2E hex),
JDK 1.1 = 45 (0x2D hex).

解决方案:

缺啥下啥:下载对应的JDK(注意32位和64位),装完JDK,这个错误就没有了,也不需要配置环境变量


参考资料

http://www.cnblogs.com/xing901022/p/4172410.html

20170713更新完

--------------------------------------------------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值