反编译 Android APK

来源:互联网 发布:数据保护线缠绕视频 编辑:程序博客网 时间:2024/05/17 18:26

    Android 应用发布的格式为Apk 格式,有时候拿到apk 文件后想看看里面的代码逻辑和资源文件,这时就需要反编译。Apk 包里有两类文件,一类是class文件,另一类是资源文件,需要两类不同的反编译工具进行反编译。

1.class 文件的反编译。

    一个.apk 文件实际文件格式是什么呢? 可以用file 命令来看一下:


    $ file Alerter.apk

    Alerter.apk: Zip archive data, at least v2.0 to extract


    所以实际上是一个zip包,所以把它改成*.zip 便可以解压,解压之后会得到一个classes.dex 的文件,这个文件便是Dalvik VM 运行时执行的文件,包含了所有的classes。反编译这个文件便可以看到class的source code. 需要两个工具。


  dex2jar 和 JD-GUI   


    将得到的 dex2jar-0.0.7-SNAPSHOT.zip 解压,将classes.dex 拷贝到解压目录(dex2jar.bat 所在目录),进到dex2jar.bat所在目录,运行 :


   dex2jar classes.dex ( for windows) 


    便可以得到  classes.dex.dex2jar.jar ,运行 JD-GUI 便可以 打开此 jar 包 看到 反编译出来的 source code. 


 2.反编译资源文件。


    反编译资源文件的时候需要 aapt 和apktool  


     从这里 http://code.google.com/p/android-apktool/downloads/list  


    下载 apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2  (for windows) 


     然后将两个包解压到同一个文件夹下,可以看到 aapt.exe apktool.bat 和apktool.jar 三个文件 ,进到解压目录,运行: 


    apktool d *.apk   [ dir]  / /dir 参数可以不写(apktool 会自己创建一个),使用这个参数的话写一个不存在的目录(此命令会创建)


   或者   apktool  d  -f *.apk  dir     


    就可以得到所有的资源文件 : AndroidManifest.xml   res  asserts  smali  


3. 利用aapt 和apktool 工具可以完成对资源文件修改后重新打包成apk 

 

    apktool b resource_dir  


    打包完会生成两个新目录 build 和 dist,新的apk 在 dist 目录。

    

    

    

原创粉丝点击