思路一、apktool

1.通过apktool反编译出资源和smali

apktool d MobileManager.apk

F:\Android\decompile\apktool>apktool d MobileManager.apkI: Baksmaling...I: Loading resource table...I: Loaded.I: Loading resource table from file: C:\Users\liupingan\apktool\framework\1.apkI: 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.dexdex2jar version: translator-0.0.9.8dex2jar managerclasses.dex -> managerclasses_dex2jar.jarDone.

下载地址: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. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. 2011.09.07(4)——— android 跨进程通信之content provider
  4. Android(安卓)Log Analysis转
  5. ubuntu 平台 FFmpeg Android(安卓).so文件编译
  6. 布局技巧:使用ViewStub
  7. 在mac上快速搭建Android、iOS自动打包环境(三)
  8. 一文帮你搞懂 Android(安卓)文件描述符
  9. Android零基础入门第8节:HelloWorld,我的第一趟旅程出发点

随机推荐

  1. android 2048游戏、kotlin应用、跑马灯、
  2. Android中layout_gravity和gravity的区别
  3. 七款android地图 [Map] 开源项目框架分类
  4. Android OpenGL教程-第一课
  5. android 创建AVD时 无系统镜像 No target
  6. Android(安卓)模仿360二维码扫描功能
  7. Android-安全退出
  8. android中shape的属性
  9. android兼容oppo手机刘海屏解决方案
  10. 详解Android AM命令