聪明出于勤奋,天才在于积累

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

1. 反编译资源文件
apktools 
http://code.google.com/p/android-apktool/downloads/list         
下载后要有3个文件  aapt.exe、apktool.bat、apktool.jar

使用: apktool d  x.apk  目标文件夹
这种方式.xml 的资源文件都可以反编译出来, 但是源代码会变成 .smali 文件

AXMLPrinter2.jar 
//这个不大靠谱,有人试验是apilevel8 以后的就不能反编译


2. 反编译源代码
将编译后的 classes.dex 变成 .jar 文件
dex2jar
http://code.google.com/p/dex2jar/downloads/list
1)解压 apk 文件得到 classes.dex 文件
2)把classes.dex拷贝到dex2jar.bat所在目录
3)运行 dex2jar.bat classes.dex      生成classes.dex.dex2jar.jar
注意下载最新的dex2jar,不然有些可能反编译失败


3. 查看源代码
JD-GUI
http://java.decompiler.free.fr/?q=jdgui
打开上面反编译好的 .jar 文件

XJad

和上面的JD-GUI反编译结果不一样,互有优劣,可以互相参照。

各个手机的系统资源文件在  /system/framework/framework-res.apk  包里,可以反编译拿到。

代码在 /system/framework/framework.jar 中

 

 

----------------------------------------------------------------------------------------------
C2. Jodeclipse---Jode的Eclipse插件
C3. JadClipse---Jad的Eclipse插件
关于这两个Eclipse插件的安装可见下面链接:
http://tgyd2006.javaeye.com/blog/553061
(C4. 还有朋友提到DJ Java Decompiler,没用过,可以一试!)
但也有人提出此问题:
自从eclipse升级到3.3以后jad插件就一直没有成功的安装上去,网上看了好多文章也是以前版本的安装方法,3.3目前通过eclipse的software update的插件安装方式已经不行了。
解决方法如下:
1.从http://www.kpdus.com/jad.html#download地址下载最新的jad,我目前下载的是jadnt158.zip;
2.从http://nchc.dl.sourceforge.net/s ... jadclipse_3.3.0.jar地址下载jadclipse_3.3.0.jar,拷贝到eclipse的plugins目录下;
3.启动或重起eclipse,修改window -> Preferences -> Java -> JadClipse 下的
Path to decompiler 如:D:\eric\jadnt158\jad.exe(jadnt158.zip解压后的目录);
4.Windows -> Perference -> General -> Editors -> File Associations中修改“*.class”默认关联的编辑器为“JadClipse Class File Viewer”
大功告成,之后在java类里按住ctrl点击类就可以看到它jad反编译后的源带码了;
如果发现安装了没有效果,可以删除eclipse主目录下的\configuration\org.eclipse.update后,再执行eclipse -clean试试

最后,将得到的java文件和得到的xml文件组合可得一个android工程,即可得到相对比较完整的apk源码;但也有些额外加的包没被编译出来。
但做到这一步已经足够用于学习,我们的目的也就达到了!
大家也可关注下这两篇文章,用的不同方法(dexdump, baksmali.jar, smali.jar),但效果也还不错:
http://blog.csdn.net/Android_Tutor/archive/2010/07/09/5724435.aspx
http://www.cnblogs.com/huyipeng/archive/2010/07/25/1784679.html
有人会说程序可以用混淆器扰乱代码,但刚从网上看到的一种关于混淆器的说法:
“用混扰器的代码一般就是去掉所有注释和把变量名、方法名和类名变成一些没意义的名字。反编译后一般都变成a, b , c,...这样的名字,只能一点点的看懂,
再利用Eclipse的改名方法,一次性的吧相关的名字改成有意义的名称。”

posted on 2013-03-22 11:15    阅读(184)  评论(0编辑  收藏  举报