【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译
反编译工具 : 总结了一下 linux, windows, mac 上的版本, 一起放到 CSDN 上下载;
-- CSDN 下载地址 : http://download.csdn.net/detail/han1202012/8221787
octopus@octopus:~/decompiler$ tree -L 2 . ├── linux │ ├── apktool │ ├── dex2jar-0.0.9.15 │ └── jd-gui ├── mac │ ├── apktool │ ├── dex2jar-0.0.9.15 │ └── jd-gui-0.3.5.osx.i686.dmg ├── windows │ ├── apkTool │ ├── dex2jar-0.0.9.15 │ └── jd-gui.exe └── 源码 └── apktool-source.zip 10 directories, 4 files
一. 反编译 至 Java 源码
1. 工具介绍
dex2jar 简介 : 将 .dex 或者 .class 后缀文件转换成 .jar 文件;
-- 最新版本 : 目前最新版本 0.0.9.15;
-- 官方地址 (需要FQ) : http://code.google.com/p/dex2jar/ ;
-- 下载地址 (需要FQ) : 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 命令;
-- 执行结果 :
octopus@octopus:~/decompiler/linux/dex2jar-0.0.9.15$ ./d2j-dex2jar.sh classes.dex dex2jar classes.dex -> classes-dex2jar.jar
c. jd-gui 中查看源码 : 将 classes-dex2jar.jar 文件拖入 jd-gui 中, 查看源码;
3. 混淆代码
注意 : 如果不使用签名文件进行打包的话, 直接从 eclipse 中拷贝的文件是无法混淆的;
(1) 配置混淆文件
编辑 progard.cfg :
-- 文件内容 :
-optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* #组件相关的类不进行混淆, 保留 -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider -keep public class * extends android.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class com.android.vending.licensing.ILicensingService # 所有类中的 native 方法不混淆 -keepclasseswithmembernames class * { native <methods>; } # 对全部类的指定方法的方法名不进行混淆 -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); } #对全部类的指定方法的方法名不进行混淆 -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int); } # 保留 Activity 子类 -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } # 对枚举类型enum的全部类的下面指定方法的方法名不进行混淆 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } # 实现了 Parcelable 序列化接口的类不混淆 -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; }
-- project.properties 配置混淆文件 :
target=android-19 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 命令;
octopus@octopus:~/decompiler/linux/dex2jar-0.0.9.15$ ./d2j-dex2jar.sh classes.dex dex2jar classes.dex -> classes-dex2jar.jar
在 jd-gui 中查看 Java 代码 :
二. Apktools 反编译
1. Apktools 介绍
Apktools 简介 :
-- 最新版本 : 2.0.0 ;
-- 官方网站 (需要FQ) : https://code.google.com/p/android-apktool/ ;
-- 新版本下载地址 : https://bitbucket.org/iBotPeaches/apktool/downloads ;
-- 老版本下载地址 (需要FQ) : 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 ;
-- 反编译过程 :
octopus@octopus:~/decompiler/linux/apktool$ ./apktool d WheelView.apk I: Baksmaling... I: Loading resource table... I: Loaded. I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: /home/octopus/apktool/framework/1.apk I: Loaded. I: Regular manifest package... I: Decoding file-resources... I: Decoding values */* XMLs... I: Done. I: Copying assets and libs... octopus@octopus:~/decompiler/linux/apktool$ ls aapt apktool apktool.jar WheelView WheelView.apk
-- 反编译结果 : 反编译结果都在 WheelView 目录中, res 中是相关资源文件, smali 中是 smali 汇编文件;
3. 重新编译
重新编译命令格式 : ./apktool b apk源目录 apk文件名称;
-- 执行命令 : ./apktool b WheelView WheelView1.apk , 可以生成 WheelView1.apk 文件;
octopus@octopus:~/decompiler/linux/apktool$ ls aapt apktool apktool.jar WheelView WheelView.apk octopus@octopus:~/decompiler/linux/apktool$ ./apktool b WheelView WheelView1.apk I: Checking whether sources has changed... I: Smaling... I: Checking whether resources has changed... I: Building resources... I: Building apk file... octopus@octopus:~/decompiler/linux/apktool$ ls aapt apktool apktool.jar WheelView WheelView1.apk WheelView.apk
【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译的更多相关文章
- 关于T-SQL重编译那点事,WITH RECOMPILE和OPTION(RECOMPILE)区别仅仅是存储过程级重编译和SQL语句级重编译吗
本文出处:http://www.cnblogs.com/wy123/p/6262800.html 在考虑重编译T-SQL(或者存储过程)的时候,有两种方式可以实现强制重编译(前提是忽略导致重编译的 ...
- WITH RECOMPILE和OPTION(RECOMPILE)区别仅仅是存储过程级重编译和SQL语句级重编译吗
在考虑重编译T-SQL(或者存储过程)的时候,有两种方式可以实现强制重编译(前提是忽略导致重编译的其他因素的情况下,比如重建索引,更新统计信息等等), 一是基于WITH RECOMPILE的存储过程级 ...
- android studio 开发android app 真机调试
大家都知道开发android app 的时候可以有2种调试方式, 一种是Android Virtual Device(虚拟模拟器) ,另一种就是真机调试. 这里要说的是真机调试的一些安装步骤: 1. ...
- 码农人生——从未学过Android如何开发Android App 案例讲解-第002期案例
标题有点晃眼,本次分享是002期博文的实践故事,不会有任何代码.也不会教别人android 如何开发,类似博文已经有大批大批,而且还会有陆陆续续的人写,我写的文章,主要是经验之谈,希望总结出的一些方法 ...
- Android Studio开发Android应用如何签名
1.使用jdk自带的工具生成keystore 使用cmd命令行进入到jdk的bin目录(比如:C:\Program Files\Java\jdk1.7.0_01\bin) 运行如下命令: C:\Pro ...
- 用Android Studio 开发Android应用
目前AndroidStudio已经到了1.2版本了,我用了下,觉得还蛮好的,有些自动生成的资源,它会自动帮你管理.下面开始列一下,我的开发环境搭配.在开始前,你得有个VPN,可者代理.嗯.不然你下不了 ...
- [Hybrid App]--Android混合开发,Android、Js的交互
AndroidJs通信 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !imp ...
- Android BLE开发——Android手机与BLE终端通信初识
蓝牙BLE官方Demo下载地址: http://download.csdn.net/detail/lqw770737185/8116019参考博客地址: http://www.eoeandr ...
- Android多媒体开发-- android中OpenMax的实现整体框架
1.android中用openmax来干啥? android中的AwesomePlayer就 是用openmax来做(code)编解码,其实在openmax接口设计中,他不光能用来当编解码.通过他的组 ...
随机推荐
- Python IDLE背景主题
相信刚进入python学习之路的朋友们,都还是挺喜欢python自带的IDLE,但是白的代码背景色以及其它的代码色确实让人看着有点不舒服,所以当时也琢磨着能不能自己给它换换颜色,这个当然可以,废话不多 ...
- C++标准库之stack
C++库以提供"模板"为主.所谓模板,是指不必预先制定类型的函数或类.我们可以借助STL(标准模板库 Standard Template Library, STL)提供的高效算法来 ...
- Maven之自定义archetype生成项目骨架
Maven之自定义archetype生成项目骨架(一) http://blog.csdn.net/sxdtzhaoxinguo/article/details/46895013
- jquery 元素控制(追加元素/追加内容)介绍及应用
http://blog.csdn.net/gisredevelopment/article/details/41126533 一.在元素内部/外部追加元素 append,prepend:添加到子元素 ...
- [Java] 设计模式:代码形状 - lambda表达式的一个应用
[Java] 设计模式:代码形状 - lambda表达式的一个应用 Code Shape 模式 这里介绍一个模式:Code Shape.没听过,不要紧,我刚刚才起的名字. 作用 在应用程序的开发中,我 ...
- css文本超出省略号
终于完成了项目了,今天我就分享自己在项目中比较实用的一些功能的实现,第一个就是纯css文本超出省略号 /* 文本单行超出省略号 */ .textels { overflow: hidden; text ...
- ubuntu14.04拼音输入法问题的解决方法
14.04的自带的拼音输入法,打字的时候你会发现有很大的问题,打不出来一个完整的字. 解决方法: ibus-daemon -drx //重启ibus进程 在终端里输一次这个命令就ok了. 或者装个 ...
- 如何去掉修改Joomla、joomlart及其模版版权、标志、图标的方法
Joomla是遵循GNU通用公共授权(GPL)的自由软件,我们虽然不推荐将Joomla的所有版权删除,但有些必要的信息还是需要修改的,下面以JoomlArt.com 的JA_teline_iii_v2 ...
- 迭代器&生成器
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...
- delphi 线程教学第七节:在多个线程时空中,把各自的代码塞到一个指定的线程时空运行
第七节:在多个线程时空中,把各自的代码塞到一个指定的线程时空运行 以 Ado 为例,常见的方法是拖一个 AdoConnection 在窗口上(或 DataModule 中), 再配合 AdoQ ...