900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译

【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译

时间:2020-06-12 22:45:47

相关推荐

【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译

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

--CSDN 下载地址:/detail/han120/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.zip10 directories, 4 files

一. 反编译 至 Java 源码

1. 工具介绍

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

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

--官方地址 (需要翻墙):/p/dex2jar/;

--下载地址 (需要翻墙):/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-19proguard.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 ;

--官方网站 (需要翻墙):/p/android-apktool/;

--新版本下载地址:/iBotPeaches/apktool/downloads;

--老版本下载地址 (需要翻墙):/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.apkI: 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$ lsaapt 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$ lsaapt apktool apktool.jar WheelView WheelView.apkoctopus@octopus:~/decompiler/linux/apktool$ ./apktool b WheelView WheelView1.apkI: 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$ lsaapt apktool apktool.jar WheelView WheelView1.apk WheelView.apk

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。