欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android反编译程序整理详解

程序员文章站 2022-05-15 22:38:32
做android开发的程序员对反编译都比较痛恨,不想让自己的劳动成果成了别人的,反编译主要的目的在于学习。利用反编译进行相关的汉化或修改,都是不道德的。 将apk文件...

做android开发的程序员对反编译都比较痛恨,不想让自己的劳动成果成了别人的,反编译主要的目的在于学习。利用反编译进行相关的汉化或修改,都是不道德的。

将apk文件解压后有两部分文件需要处理,一种是xml文件,另一种一个dex文件(.dex),我们可以从.dex文件中得到.class,利用后者再得到大家垂涎已久的java文件。

下面分别针对这三种格式的文件进行反编译处理;

1.对xml文件进行包的解析,一般有两种方式:apktool(推荐)和axmlprinter2.jar;

2.从dex到class公认dex2jar.bat,实现反编译;公认的强者;

3.而class到java的方式要更多样化一些,因为只是查看反编译后的代码:jd-gui(推荐),jodeclipse(jode的eclipse插件),jadclipse(jad的eclipse插件)。

过程大致如下:

1.首先把apk文件改名为.zip,然后解压缩其中的class.dex文件,它就是java文件编译再通过dx工具打包成的。

2.把class.dex拷贝到dex2jar.bat所在目录。运行dex2jar.bat class.dex,生成classes.dex.dex2jar.jar。

3.运行jd-gui工具(绿色软件,好用的软件!),打开上面的jar文件,即可看到java源代码。

这几个软件,细分开来介绍(用步骤a(分a1,a2), b, c(分c1,c2,c3), abc分别代表三个不同的步骤):

a1. apktool:

通常用于生成程序的源代码和图片、xml配置、语言资源等文件。我们对图片和语言资源等文件修改后,可以再把它们编译打包成apk,签名后就是手机可以安装的本地化/修正版apk了。支持linux 、windows下工作

安装步骤:

1.安装java环境(官方推荐jdk 1.6);

2.apktool.jar:

点击apktool1.3.2.tar.bz2  和apktool-install-windows-2.2_r01-3.tar.bz2 (不一定是这个,但最好选最新版本的吧!)

3.解压apktool1.3.2.tar.bz2得到apktool.jar;

解压apktool-install-windows.zip到任意文件夹,将apktool.jar拷入此文件夹中(也有人说是直接全部拷入c:/windows,一样的);

(目前此文件夹中有三个文件:apktool.jar/apktool.bat/aapt.exe)

4.cmd命令行进入到解压apktool-install-windows-2.2_r01-3.tar.bz2所得的文件夹,输入apktool测试是否安装成功;

安装成功后,下面开始反编译过程:

1.apktool d (要反编译的文件) (输出文件夹)

如:apktool d xxx.apk (目标文件夹)      反编译 geek.apk到文件夹test

2.apktool b (目标文件夹)             

从目标文件夹中重建apk,生成的apk在"目标文件夹"\dist文件夹里,叫out.apk。

这个out.apk是没有签名的,所以不能直接装到手机里。

这里就不说了。签名后得到的apk,就是可以装到手机里的了。

a2. axmlprinter2.jar

将它放到android-sdk-windows-1.5_r3\tools文件夹中

运行cmd,进入tools目录,运行java -jar axmlprinter2.jar main.xml > main.txt;

于是我们就得到了反编译后的xml文件;

经历了这么多,我们得到的只是部分布局文件和资源文件,但java文件还是"犹抱琵琶半遮面"。

下面,让我们掀起她的红盖头来:

b. dex2jar:

方法:

1.首先找到android软件安装包中的classes.dex (解压得到);

它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件

2.把classes.dex拷贝到dex2jar.bat所在目录;

在命令行模式下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex,生成classes.dex.dex2jar.jar,成功了一半!

c1. jd-gui:

方便好用,直接解压得到jd-gui,用它打开上面的jar文件,file-->save jar source,即可看到梦寐以求的java源代码;
我们也可以解压b步骤得到的jar文件得到class文件,到这里,我们就要用到jodeclipse和jadclipse了;

最后,将得到的java文件和得到的xml文件组合可得一个android工程,即可得到相对比较完整的apk源码;但也有些额外加的包没被编译出来。

但做到这一步已经足够用于学习,我们的目的也就达到了!

大家也可关注下这两篇文章,用的不同方法(dexdump, baksmali.jar, smali.jar),效果也还不错:


有人会说程序可以用混淆器扰乱代码,但刚从网上看到的一种关于混淆器的说法:

“用混扰器的代码一般就是去掉所有注释和把变量名、方法名和类名变成一些没意义的名字。反编译后一般都变成a, b , c,...这样的名字,只能一点点的看懂,再利用eclipse的改名方法,一次性的吧相关的名字改成有意义的名称。”

所以,大家的关键代码最好还是打成.so库吧!