反编译 Android apk
2012-03-02 21:30
183 查看
如果 java 程序编译的时候没有混淆代码的话,就可以比较容易的反编译。但是反编译不一定就能 100% 的得到原始的代码,不过已经可以拿来做参考了。
从 google code (apktool下载)
下载 apktool 工具,按照 google code 上的说明:
Download apktool-install-linux-* file
Download apktool-* file
Unpack both to /usr/local/bin directory (you must have root permissions)
设置好 PATH 路径,让系统能找到 apktool。然后 apktool d -f xx.apk /home/mingming/tmp/apk 解压出 apk 完成的 xml 和 资源文件。
从 google code (dex2jar
下载) 下载 dex2jar 工具。然后把 apk 文件改后缀为 .zip ,然后解压出 zip。在里面找到 class.dex ,然后把 class.dex 复制到 dex2jar 目录下。然后执行 dex2jar.sh class.dex (可能之前需要把 dex2jar.sh
增加可执行属性)。成功的话会在本目录下生成 classes.dex.dex2jar.jar 。
从 这里 (jd-gui
下载) 下载 jd-gui 工具。然后运行 jd-gui 打开上一步生成的 jar 包,然后就可以在 jd-gui 里看到 jar 里的源代码里。可以使用 jd-gui 的 file 菜单里的 save all source 命令,把源代码导出成一个 zip 包里。
结合第一步得到的 xml 文件 和 res 文件,以及第三步得到的 java 源代码,就差不多可以还原 apk 程序了。
参考: http://nitinzzz.blogspot.com/ (注:这个被墙了
!!=_=!!)
首先,准备工具
apktool apk_manager , 点这里下载
zip 的 管理工具 ,这个 ubuntu 底下默认有了。
jdk 的 jarsigner , 我这里路径为 /home/nxliao/tool/android/jvm/java/jdk1.6.0_25/bin/jarsigner
android sdk 的 debug.keystore ,在ubuntu下为 ~/.android/debug.keystore
准备实验对象
Fishing Joy , 点这里下载
改装
用 zip 管理工具打开这个 apk,删除里面的 META-INF 目录
用 apktool 解压处理过的 apk
用 vi 打开目标代码
转到第 330行(在 .method private init()V 内),将
保存退出
用 apktool 重新打包 apk
这时候新的apk还不能直接安装,需要打上签名。用jdk的 jarsigner 打上签名
odex文件无法直接使用dex2jar进行直接反编译成jar,必须先转为dex,才能继续反编译。用到的工具 baksmali smali
步骤:
这是由于缺少core.odex, ext.odex, framework.odex, android.policy.odex, services.odex, bouncycastle.odex, core-junit.odex, 这7个文件的问题,将framework下的这5个odex文件一并考到同级目录下,在运行命令即可。
java -Xmx512M -jar smali-1.2.4.jar out -o classes.dex
apk --> xml
从 google code (apktool下载)下载 apktool 工具,按照 google code 上的说明:
Download apktool-install-linux-* file
Download apktool-* file
Unpack both to /usr/local/bin directory (you must have root permissions)
设置好 PATH 路径,让系统能找到 apktool。然后 apktool d -f xx.apk /home/mingming/tmp/apk 解压出 apk 完成的 xml 和 资源文件。
class --> jar
从 google code (dex2jar下载) 下载 dex2jar 工具。然后把 apk 文件改后缀为 .zip ,然后解压出 zip。在里面找到 class.dex ,然后把 class.dex 复制到 dex2jar 目录下。然后执行 dex2jar.sh class.dex (可能之前需要把 dex2jar.sh
增加可执行属性)。成功的话会在本目录下生成 classes.dex.dex2jar.jar 。
jar --> java
从 这里 (jd-gui下载) 下载 jd-gui 工具。然后运行 jd-gui 打开上一步生成的 jar 包,然后就可以在 jd-gui 里看到 jar 里的源代码里。可以使用 jd-gui 的 file 菜单里的 save all source 命令,把源代码导出成一个 zip 包里。
总结
结合第一步得到的 xml 文件 和 res 文件,以及第三步得到的 java 源代码,就差不多可以还原 apk 程序了。
重新打包
参考: http://nitinzzz.blogspot.com/ (注:这个被墙了!!=_=!!)
首先,准备工具
apktool apk_manager , 点这里下载
zip 的 管理工具 ,这个 ubuntu 底下默认有了。
jdk 的 jarsigner , 我这里路径为 /home/nxliao/tool/android/jvm/java/jdk1.6.0_25/bin/jarsigner
android sdk 的 debug.keystore ,在ubuntu下为 ~/.android/debug.keystore
准备实验对象
Fishing Joy , 点这里下载
改装
用 zip 管理工具打开这个 apk,删除里面的 META-INF 目录
用 apktool 解压处理过的 apk
$ ./apktool d ~/tmp/jianjiuhongchenfengha_V1.0_mumayi_85342.apk ~/tmp/jianjiuhongchenfengha
用 vi 打开目标代码
$ vi ~/tmp/jianjiuhongchenfengha/smali/com/sg/android/fish/FishActivity.smali
转到第 330行(在 .method private init()V 内),将
const/16 v6, 0xc8修改成
const/16 v6, 0x647d(也可以设置成其它数值),即可将初始金钱改成 0x647d =25752
保存退出
用 apktool 重新打包 apk
$ ./apktool b ~/tmp/jianjiuhongchenfengha ~/tmp/jian.apk
这时候新的apk还不能直接安装,需要打上签名。用jdk的 jarsigner 打上签名
$ jarsigner -verbose -storepass android -keystore ~/.android/debug.keystore ~/tmp/jian.apk androiddebugkey
odex 转 dex
odex文件无法直接使用dex2jar进行直接反编译成jar,必须先转为dex,才能继续反编译。用到的工具 baksmali smali下载地址:http://code.google.com/p/smali/downloads/list
步骤:
1,分解odex文件 java -jar baksmali-1.2.4.jar -x ../TEST.odex 这时候出现问题:
Error occured while loading boot class path files. Aborting. org.jf.dexlib.Util.ExceptionWithContext: Cannot locate boot class path file core.odex at org.jf.dexlib.Code.Analysis.ClassPath.loadBootClassPath(ClassPath.java:237) at org.jf.dexlib.Code.Analysis.ClassPath.initClassPath(ClassPath.java:145) at org.jf.dexlib.Code.Analysis.ClassPath.InitializeClassPathFromOdex(ClassPath.java:110) at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:96) at org.jf.baksmali.main.main(main.java:278)
这是由于缺少core.odex, ext.odex, framework.odex, android.policy.odex, services.odex, bouncycastle.odex, core-junit.odex, 这7个文件的问题,将framework下的这5个odex文件一并考到同级目录下,在运行命令即可。
2,生成classes.dex
java -Xmx512M -jar smali-1.2.4.jar out -o classes.dex
相关文章推荐
- Android APK反编译
- android apk如何反编译和如何防止反编译
- Android APK反编译就这么简单 详解(附图)
- Android apk反编译及重新打包流程
- Android反编译查看APK的源代码、资源文件、XML文件
- Android APK反编译得到Java源代码和资源文件
- Android APK反编译详解(附图)
- 【转】Android APK反编译就这么简单 详解(附图)
- Android apk反编译及重新打包流程
- Android Apk反编译得到Java源代码
- Android APK反编译详解
- Android APK反编译详解(附图)
- 【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译
- Android APK反编译图文教程
- Android - 反编译android apk文件
- Android 反编译apk 到java源码的方法
- Android APK反编译得到Java源代码和资源文件
- Android APK反编译具体解释(附图)
- 【Android】Android开发学习总结—— APK反编译
- Android APK反编译详解(附图)