一、apk编译/反编译工具baksmali和smali用法
smali:An assembler/disassembler for Android's dex format
smali 下载地址:http://code.google.com/p/smali/downloads/list(下载链接:https://smali.googlecode.com/files/smali-2.0.3.jar
、https://smali.googlecode.com/files/baksmali-2.0.3.jar。利用迅雷新建下载链接可以将其下载下来)
用法如下:首先把baksmali-2.0.3.jar和smali-2.0.3.jar文件放到android sdk安装路径下的tools里面,把apk用WinRAR解压并提取classes.dex文件,也放入tools里面,然后用命令行,cd tools目录下,输入java命令:
java -jarbaksmali-2.0.3.jar
前提是你的path路径中有你的Java安装目录下的bin文件夹路径,这样才可以在任意路径下使用java 命令,还有classout/后要加个空格。
执行成功后你会发现tools目录下多了一个classout文件夹,里面就是smali类型的文件,里面是反编译出的代码,但是不是java代码,还是能看出变量和方法的。
我们可以用apktool+dex2jar+jd_gui反编译apk文件,来学习人家的架构及界面等。
apktool: 可以解析资源文件,比如布局文件xml等,方便查看。
dex2jar:可以将dex文件转换成jar文件
用法:
1.将apk文件后缀改成rar,然后解压,取出其中的classes.dex,放到任意位置;
2.进入cmd,cd到dex2jar所在文件夹,输入命令dex2jar.bat %classes.dex所在目录%\class.dex
3. 命令完成后在%class.dex所在目录%就会生成jar文件
jd_gui:能够将jar文件反编译成java代码
用法:
打开jd_gui,然后将jar包拖放到主界面,就可以看到源代码了。
用jd_gui来看反编译出的Java代码,这样便于寻找自己想要改的东西,找到后可以到baksmali classout下去修改相应的地方。然后是利用smali编译回去:
命令如下:
java -jar smali-1.4.1.jar classout/ -o classes.dex
把classout下编译成classes.dex然后把classes.dex放回apk下覆盖原来的classes.dex文件。
二、反编译Apk得到Java源代码
首先要下载两个工具:dex2jar和JD-GUI
前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址:
dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip
JD-GUI:http://laichao.googlecode.com/files/jdgui.zip
具体步骤:
首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;
解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录
运行
dex2jar.bat classes.dex
生成
classes.dex.dex2jar.jar
生成jar文件的截图如下:
运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了
三、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件
如果是只是汉化软件,这将特别有用。
首先还是下载工具,这次用到的是apktool
下载地址:http://code.google.com/p/android-apktool/downloads/list(https://android-apktool.googlecode.com/files/apktool1.5.2.tar.bz2、https://android-apktool.googlecode.com/files/apktool-install-windows-r05-ibot.tar.bz2。利用迅雷可以快速下载)
下载:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(两个包都下载)
具体步骤:
将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar
在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:\*.apk C:\*文件夹,如下图:
命令行解释:apktool d [apk文件 ] [输出文件夹]
反编译的文件如下(AndroidManifest.xml为例):
特别注意:你要反编译的文件一定要放在C盘的根目录里
将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可,命令如下:
打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹:
build
dist
其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok