代码混淆器到底是不是病毒,安卓代码混淆


代码混淆器到底是不是病毒,安卓代码混淆

文章插图
代码混淆的介绍:
代码混淆器到底是不是病毒,安卓代码混淆

文章插图
代码混淆(Obfuscated code)亦称花指令 , 是将计算机程序的代码 , 转换成一种功能上等价 , 但是难于阅读和理解的形式的行为 。代码混淆可以用于程序源代码 , 也可以用于程序编译而成的中间代码 。执行代码混淆的程序被称作代码混淆器 。目前已经存在许多种功能各异的代码混淆器 。将代码中的各种元素 , 如变量 , 函数 , 类的名字改写成无意义的名字 。比如改写成单个字母 , 或是简短的无意义字母组合 , 甚至改写成“__”这样的符号 , 使得阅读的人无法根据名字猜测其用途 。重写代码中的部分逻辑 , 将其变成功能上等价 , 但是更难理解的形式 。比如将for循环改写成while循环 , 将循环改写成递归 , 精简中间变量 , 等等 。打乱代码的格式 。比如删除空格 , 将多行代码挤到一行中 , 或者将一行代码断成多行等等 。代码混淆器也会带来一些问题 。主要的问题包括:被混淆的代码难于理解 , 因此调试除错也变得困难起来 。开发人员通常需要保留原始的未混淆的代码用于调试 。对于支持反射的语言 , 代码混淆有可能与反射发生冲突 。代码混淆并不能真正阻止反向工程 , 只能增大其难度 。因此 , 对于对安全性要求很高的场合 , 仅仅使用代码混淆并不能保证源代码的安全 。
android中哪些东西不能做代码混淆:
代码混淆器到底是不是病毒,安卓代码混淆

文章插图
常见的不能混淆的AndroidCodeAndroid 程序  , 下面这样代码混淆的时候要注意保留 。
Android系统组件 , 系统组件有固定的方法被系统调用 。
被Android Resource 文件引用到的 。名字已经固定 , 也不能混淆 , 比如自定义的View。
Android Parcelable  , 需要使用android 序列化的 。
其他Anroid 官方建议 不混淆的 , 如
android.app.backup.BackupAgentHelper
android.preference.Preference
com.android.vending.licensing.ILicensingService
Java序列化方法 , 系统序列化需要固定的方法 。
枚举  , 系统需要处理枚举的固定方法 。
本地方法 , 不能修改本地方法名
annotations 注释
数据库驱动
有些resource 文件
用到反射的地方本被提问者和网友采纳
如何混淆代码和相关配置:
代码混淆器到底是不是病毒,安卓代码混淆

文章插图
项目发布之前混淆是必不可少的工作 , 混淆可以增加别人反编译阅读代码的难度 , 还可以缩小APK包 。
使用步骤:
1、修改project.properties文件:
Java代码 收藏代码
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
# proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
去掉proguard.config一行前面的#注释;
2、配置proguard-project.txt文件:
这个是主配置文件 , 里面配置哪些需要混淆 , 哪些不需要混淆的选项;
提供给外部的类、方法、变量等名字不能混淆;
在AndroidManifest中配置的类(Activity、Service等的子类及Framework类默认不会进行混淆)
不混淆Parcelable的子类 , 防止android.os.BadParcelableException
Jni中调用的类
反射用到的类
项目中的实体类
3、导出项目:
export签名项目 。
4、查看是否混淆成功:
用反编译工具反编译并对比未混淆的代码;
5、运行ProGuard及其生成的文件介绍
在以release模式下打包apk时会自动运行ProGuard , 这里的release模式指的是通过ant release命令或eclipse project->android tools->export signed(unsigned) application package生成apk 。在debug模式下为了更快调试并不会调用proguard 。
如果是ant命令打包apk , proguard信息文件会保存于<project_root>/bin/proguard文件夹内;如果用eclipse export命令打包 , 会在<project_root>/proguard文件夹内 。其中包含以下文件:
mapping.txt表示混淆前后代码的对照表 , 这个文件非常重要 。如果你的代码混淆后会产生bug的话 , log提示中是混淆后的代码 , 希望定位到源代码的话就可以根据mapping.txt反推 。

推荐阅读