Android:apk反编译步骤,打包、签名和逆向工程经验总结
2012-09-07 14:07
573 查看
思路一、apktool
1.通过apktool反编译出资源和smali
apktool d MobileManager.apk
apk打包:
apktool b MobileManager
将重新打包apk.
注意:需要重新签名才能安装。可以参考这篇文章进行签名发布:Android:APK签名
工具下载地址:
http://code.google.com/p/android-apktool/
2.通过dex2jar将其中的dex文件反编译出jar文件
首先将apk包重命名为rar文件,解压缩出来classes.dex
dex2jar managerclasses.dex
可以得到jar文件
下载地址:http://code.google.com/p/dex2jar/
3.将jar文件解压缩出来(可以改后缀名为.rar),生成 .class文件目录
4.通过jad命令将对应的.class文件反编译出.java
jad -o -r -sjava -dsrc Manager_dex2jar/**/*.class
其中Manager_dex2jar为.class目录
将反编译Manager_dex2jar目录及其子目录下的所有.class文件为.java
结果保存在src目录下
工具下载:
http://sdrv.ms/OeMK7X
或者搜索 jad158g
思路二、baksmali/smali:
1. 反编译:将classes.dex反编译出.smali源码
java -jar baksmali-1.3.3.jar -o classout/ classes.dex
2. 打包:将.smali源代码重新打包成classes.dex
java -jar smali-1.3.3.jar classout/ -o classes.dex
3. baksmali/smali工具下载:
http://code.google.com/p/smali/
4. 同样,需要重新签名才能安装使用。
可以参考这篇文章进行签名发布:Android:APK签名
个人经验:
0.一般来说,只有.smali源代码才能重新还原打包apk,通过jad反编译出.java源代码由于无法彻底完全反编译出原始代码,无法基于java源代码重新打包成apk。
1. 在阅读反编译出来的java源码时,如果出现反编译效果不理想的部分代码,可以对照相应的.smali文件分析,这个是最准确的,就是dex op code。
2. 利用Eclipse变量重命名功能,可以将反编译的java源码中无含义的变量重命名为有意义的变量名。
3. 反编译出来java文件以后,对于一些资源类的索引,由于采用了硬编码的形式,可以采用下面的工具解析出原始的资源引用代码:
Android逆向分析源码之资源代码还原小工具
4. 一般一个完整的软件,基本会用到一些第三方的类库,这个需要事先甄别出来,然后删除这部分源代码,直接去google对应的类库放进来,避免浪费大量的时间在分析第三方类库上面。很多是都是开源的类库,很容易就找到。
1.通过apktool反编译出资源和smali
apktool d MobileManager.apk
F:\Android\decompile\apktool>apktool d MobileManager.apk I: Baksmaling... I: Loading resource table... I: Loaded. I: Loading resource table from file: C:\Users\liupingan\apktool\framework\1.apk I: Loaded. I: Decoding file-resources... I: Decoding values*/* XMLs... I: Done. I: Copying assets and libs...smali是可阅读的字节码,通过阅读smali代码可以真实的反编译出来源代码,但是这个没有自动化的工具,需要人工分析。
apk打包:
apktool b MobileManager
将重新打包apk.
注意:需要重新签名才能安装。可以参考这篇文章进行签名发布:Android:APK签名
工具下载地址:
http://code.google.com/p/android-apktool/
2.通过dex2jar将其中的dex文件反编译出jar文件
首先将apk包重命名为rar文件,解压缩出来classes.dex
dex2jar managerclasses.dex
可以得到jar文件
F:\Android\decompile\dex2jar-0.0.9.8\dex2jar-0.0.9.8>dex2jar managerclasses.dex dex2jar version: translator-0.0.9.8 dex2jar managerclasses.dex -> managerclasses_dex2jar.jar Done.
下载地址:http://code.google.com/p/dex2jar/
3.将jar文件解压缩出来(可以改后缀名为.rar),生成 .class文件目录
4.通过jad命令将对应的.class文件反编译出.java
jad -o -r -sjava -dsrc Manager_dex2jar/**/*.class
其中Manager_dex2jar为.class目录
将反编译Manager_dex2jar目录及其子目录下的所有.class文件为.java
结果保存在src目录下
工具下载:
http://sdrv.ms/OeMK7X
或者搜索 jad158g
思路二、baksmali/smali:
1. 反编译:将classes.dex反编译出.smali源码
java -jar baksmali-1.3.3.jar -o classout/ classes.dex
2. 打包:将.smali源代码重新打包成classes.dex
java -jar smali-1.3.3.jar classout/ -o classes.dex
3. baksmali/smali工具下载:
http://code.google.com/p/smali/
4. 同样,需要重新签名才能安装使用。
可以参考这篇文章进行签名发布:Android:APK签名
个人经验:
0.一般来说,只有.smali源代码才能重新还原打包apk,通过jad反编译出.java源代码由于无法彻底完全反编译出原始代码,无法基于java源代码重新打包成apk。
1. 在阅读反编译出来的java源码时,如果出现反编译效果不理想的部分代码,可以对照相应的.smali文件分析,这个是最准确的,就是dex op code。
2. 利用Eclipse变量重命名功能,可以将反编译的java源码中无含义的变量重命名为有意义的变量名。
3. 反编译出来java文件以后,对于一些资源类的索引,由于采用了硬编码的形式,可以采用下面的工具解析出原始的资源引用代码:
Android逆向分析源码之资源代码还原小工具
4. 一般一个完整的软件,基本会用到一些第三方的类库,这个需要事先甄别出来,然后删除这部分源代码,直接去google对应的类库放进来,避免浪费大量的时间在分析第三方类库上面。很多是都是开源的类库,很容易就找到。
相关文章推荐
- Android:apk反编译步骤,打包、签名和逆向工程经验总结
- Android程序apk编译、打包、签名
- 在eclipse中将android工程打包成apk 获取正式版本 Android 打包签名 从生成keystore到完成签名
- android技巧:apk文件反编译以及签名打包(dex2jar&jd,apktool,apk-sign)
- android逆向基础:apk 反编译 重打包 重签名
- android技巧:apk文件反编译以及签名打包
- Android程序apk编译、打包、签名
- 【Android】打包过程:生成自动代码->编译->(混淆)->dex文件->生成资源文件->打apk包->(签名)->对齐
- mac os上android申请签名和使用ant自动编译打包签名apk
- Android应用防止反编译apk打包签名步骤
- [Android] mac上申请签名及使用ant自动编译打包签名APK
- Android apk包反编译与重打包签名
- android技巧:apk文件反编译以及签名打包
- Android应用防止反编译apk打包签名步骤
- android技巧:apk文件反编译以及签名打包
- cocos2dx3.0进行android编译apk安装包的一些经验总结
- Android apk包反编译与重打包签名
- Android反编译解包、重新打包、重新签名基础步骤自理文档
- Mac下android工程编译,批量打包的一些总结
- Android工程结构的介绍&程序编译、打包、签名、发布