反编译工具 : 总结了一下 linux, windows, mac 上的版本, 一起放到 CSDN 上下载;

-- CSDN 下载地址 : 

[plain]  view plain copy
  1. octopus@octopus:~/decompiler$ tree -L 2  
  2. .  
  3. ├── linux  
  4. │   ├── apktool  
  5. │   ├── dex2jar-0.0.9.15  
  6. │   └── jd-gui  
  7. ├── mac  
  8. │   ├── apktool  
  9. │   ├── dex2jar-0.0.9.15  
  10. │   └── jd-gui-0.3.5.osx.i686.dmg  
  11. ├── windows  
  12. │   ├── apkTool  
  13. │   ├── dex2jar-0.0.9.15  
  14. │   └── jd-gui.exe  
  15. └── 源码  
  16.     └── apktool-source.zip  
  17.   
  18. 10 directories, 4 files  





一. 反编译 至 Java 源码 



1. 工具介绍


dex2jar 简介 : 将 .dex 或者 .class 后缀文件转换成 .jar 文件;

-- 最新版本 : 目前最新版本 0.0.9.15;

-- 官方地址 (需要) : http://code.google.com/p/dex2jar/ ;

-- 下载地址 (需要) : http://code.google.com/p/dex2jar/downloads/list;


jd-gui 简介 : 使用该工具可以查看 .jar 中的 java 代码;

-- 官网地址 : http://jd.benow.ca/ ;



2. 反编译过程 



(1) Ubuntu 系统反编译


a. 获取 .dex 后缀文件 : 修改 apk 文件后缀, 获取 class.dex 文件;


b. 执行反编译 : 将 classes.dex 拷贝到 dex2jar 目录下, 执行 ./d2j-dex2jar.sh classes.dex 命令;

-- 执行结果 : 

[plain]  view plain copy
  1. octopus@octopus:~/decompiler/linux/dex2jar-0.0.9.15$ ./d2j-dex2jar.sh classes.dex   
  2. dex2jar classes.dex -> classes-dex2jar.jar  

c. jd-gui 中查看源码  : 将 classes-dex2jar.jar 文件拖入 jd-gui 中, 查看源码;




3. 混淆代码


注意 : 如果不使用签名文件进行打包的话, 直接从 eclipse 中拷贝的文件是无法混淆的;


(1) 配置混淆文件 


编辑 progard.cfg : 

-- 文件内容 : 

[plain]  view plain copy
  1. -optimizationpasses 5  
  2. -dontusemixedcaseclassnames  
  3. -dontskipnonpubliclibraryclasses  
  4. -dontpreverify  
  5. -verbose  
  6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  
  7.   
  8. #组件相关的类不进行混淆, 保留  
  9. -keep public class * extends android.app.Activity  
  10. -keep public class * extends android.app.Application  
  11. -keep public class * extends android.app.Service  
  12. -keep public class * extends android.content.BroadcastReceiver  
  13. -keep public class * extends android.content.ContentProvider  
  14. -keep public class * extends android.app.backup.BackupAgentHelper  
  15. -keep public class * extends android.preference.Preference  
  16. -keep public class com.android.vending.licensing.ILicensingService  
  17.   
  18. # 所有类中的 native 方法不混淆  
  19. -keepclasseswithmembernames class * {  
  20.     native ;  
  21. }  
  22.   
  23. # 对全部类的指定方法的方法名不进行混淆  
  24. -keepclasseswithmembers class * {  
  25.     public (android.content.Context, android.util.AttributeSet);  
  26. }  
  27.   
  28. #对全部类的指定方法的方法名不进行混淆  
  29. -keepclasseswithmembers class * {  
  30.     public (android.content.Context, android.util.AttributeSet, int);  
  31. }  
  32.   
  33. # 保留 Activity 子类  
  34. -keepclassmembers class * extends android.app.Activity {  
  35.    public void *(android.view.View);  
  36. }  
  37.   
  38. # 对枚举类型enum的全部类的下面指定方法的方法名不进行混淆  
  39. -keepclassmembers enum * {  
  40.     public static **[] values();  
  41.     public static ** valueOf(java.lang.String);  
  42. }  
  43.   
  44. # 实现了 Parcelable 序列化接口的类不混淆  
  45. -keep class * implements android.os.Parcelable {  
  46.   public static final android.os.Parcelable$Creator *;  
  47. }  


-- project.properties 配置混淆文件 : 

[plain]  view plain copy
  1. target=android-19  
  2. proguard.config=proguard.cfg  



(2) 打包 apk 文件 (创建新的 keystore)


a. 设置打包项目 : 右键点击工程 选择 Android Tools --> Export Signed Application Package 选项, 弹出以下对话框, 选择要打包的程序, 设置好后点击 Next;



b. 创建 keystore : 选择 Create new keystore, 选择一个文件, 然后设置 keystore 的用户名 和 密码;

-- Location : keystore 文件;

-- Password : 密码;

-- Confirm : 确认密码, 重新输入密码;


c. 输入 keystore 详细信息 

-- Alias : 别名;

-- Password : 别名密码;

-- Confirm : 确认密码;

-- Validity(years) : 有效期限, 推荐 25 年;

-- First and Last Name : 开发者姓名;

下面的参数可以不填写

-- Orgnizational Unit : 组织名称;

-- Orgnization : 组织;

-- City or Location : 城市;

-- State or Provience : 省 或者 州;

-- Country Code : 国家;


d. 选择 apk 文件并打包 : 点击 finish 按钮后打包完毕;



(3) 打包 apk 文件 (使用现有的 keystore 文件)


a. 选择打包的工程 : 右键点击工程, 选择 Android Tools --> Export Signed Application Package 选项;



b. 选择签名文件 : 输入签名文件密码;



c. 输入别名密码 : 



d. 打包 apk : 选择要打包的 apk 文件 : 




(4) 验证混淆效果 


反编译 : 将 apk 文件后缀改为 .zip, 之后取出 classes.dex 文件 到 dex2jar 根目录中, 执行 ./d2j-dex2jar.sh classes.dex 命令;

[plain]  view plain copy
  1. octopus@octopus:~/decompiler/linux/dex2jar-0.0.9.15$ ./d2j-dex2jar.sh classes.dex   
  2. dex2jar classes.dex -> classes-dex2jar.jar  

在 jd-gui 中查看 Java 代码 : 





二. Apktools 反编译 



1. Apktools 介绍


Apktools 简介 : 

-- 最新版本 : 2.0.0 ;

-- 官方网站 (需要) https://code.google.com/p/android-apktool/ ;

-- 新版本下载地址 : https://bitbucket.org/iBotPeaches/apktool/downloads ;

-- 老版本下载地址 (需要) : https://code.google.com/p/android-apktool/downloads/list ;


需要下载的文件 

-- apktool jar 包 : apktool1.5.2.tar.bz2

-- apktool 引导工具 (Linux) : apktool-install-linux-r05-ibot.tar.bz2

-- apktool 引导工具 (mac) : apktool-install-macosx-r05-ibot.tar.bz2

-- apktool 引导工具 (wondows) : apktool-install-windows-r05-ibot.tar.bz2



2. 反编译


将下载的文件放到一个文件中 : 



反编译 : 将 apk 文件放入上面的目录, 执行命令 ./apktool d WheelView.apk ;

-- 反编译过程 : 

[plain]  view plain copy
  1. octopus@octopus:~/decompiler/linux/apktool$ ./apktool d WheelView.apk   
  2. I: Baksmaling...  
  3. I: Loading resource table...  
  4. I: Loaded.  
  5. I: Decoding AndroidManifest.xml with resources...  
  6. I: Loading resource table from file: /home/octopus/apktool/framework/1.apk  
  7. I: Loaded.  
  8. I: Regular manifest package...  
  9. I: Decoding file-resources...  
  10. I: Decoding values */* XMLs...  
  11. I: Done.  
  12. I: Copying assets and libs...  
  13. octopus@octopus:~/decompiler/linux/apktool$ ls  
  14. aapt  apktool  apktool.jar  WheelView  WheelView.apk  

--  反编译结果  : 反编译结果都在 WheelView 目录中, res 中是相关资源文件, smali 中是 smali 汇编文件;




3. 重新编译 


重新编译命令格式 : ./apktool b apk源目录 apk文件名称;

-- 执行命令 : ./apktool b WheelView WheelView1.apk , 可以生成 WheelView1.apk 文件;

[plain]  view plain copy
  1. octopus@octopus:~/decompiler/linux/apktool$ ls  
  2. aapt  apktool  apktool.jar  WheelView  WheelView.apk  
  3. octopus@octopus:~/decompiler/linux/apktool$ ./apktool b WheelView WheelView1.apk  
  4. I: Checking whether sources has changed...  
  5. I: Smaling...  
  6. I: Checking whether resources has changed...  
  7. I: Building resources...  
  8. I: Building apk file...  
  9. octopus@octopus:~/decompiler/linux/apktool$ ls  
  10. aapt  apktool  apktool.jar  WheelView  WheelView1.apk  WheelView.apk  

转自:http://blog.csdn.net/shulianghan/article/details/41697821


更多相关文章

  1. android adb shell 命令大全
  2. Android(安卓)网络多线程断点下载
  3. 在android 中开发java.net.SocketException: socket failed: EAC
  4. android adb shell 命令大全
  5. 改变android程序head样式
  6. android讲义2之在xml中设定imageButtion
  7. Android(安卓)TextView背景色、圆角、内部填充设置
  8. Android(安卓)NDK编译libPng为静态库
  9. android ListView

随机推荐

  1. Android(安卓)用Shell命令设置静态ip
  2. Android(安卓)xxx is not translated in
  3. Android(安卓)相对布局(Relative Layout)
  4. Android中数据存储的5中方法
  5. Android缺少awk:安装busybox
  6. android摄像头调用资料收集
  7. Android深入浅出系列课程---Lesson6 AAF1
  8. Android(安卓)程序获取、设置铃声、音量
  9. Android(安卓)FileObserver 用法
  10. Android(安卓)Studio 使用Lambda表达式