android 动态加载 防止逆向编译,Android 防止逆向

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

ProGuard简介

是一个压缩、优化和混淆java字节码的免费工具,它可以删除无用的类、字段、方法和属性,可以删除没用的注释,最大限度的优化字节码文件,它还可以使得简短的无意义的名称来重命名已经存在的类、字段、方法和属性:

①删除不可见的字符、注释等无用代码,创建紧凑的代码文档,为了更快的网络传输,快速装载和更小的内存占用。

②重命名,使得创建的程序和程序库很难使得反向工程

③能删除来自原文件的没有调用的代码

④充分利用java6的快速加载的优点来提前检测和返回java6中存在的类文件

参数

-include{filename} 从给定的文件中读取配置参数

-basedirectory{basedirectory} 指定基础目录为以后相对应的档案名称

-injars{class_path} 指定要处理的应用程序jar、war、ear和目录

-outjars{class_path} 指定处理完要输出的jar、war、ear和目录名称

-libraryjars{class_path} 指定要处理的应用程序jar、war、ear和目录所需要的程序库文件

-dontskipnibpubliclibraryclasses 指定不去忽略非公共的类库

保留选项

-keep {Modifier} {类成员} 保护指定的类文件和类成员

-keepclassmembers {类文件}{类成员} 保护指定类的成员,如果此类收到保护,它们会保护的更好

-keepclasswithmembers{} 保护指定的类和类成员,但条件是所有指定的类和类成员要存在

-keepnames {类名称} 保护指定的类和类成员的名称

-keepclassmembername{类名称} 保护指定的类的成员名称

-keepclasswithmembernames{类名称} 保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)

-printseeds{文件名称} 列出类和类的成员-keep选项的清单,标准输出给定的文件

压缩

-dontshrink 不压缩输入的类文件

优化

-dontoptimize 不优化输入的类文件

-assumenosideeffects{类文件} 优化时假设指定的方法,没有任何副作用

-allowaccessmodification 优化时允许访问并修改有修饰符的类和类的成员

混淆

-dontobfuscate 不混淆输入的类文件

-printmapping{文件名}

-applymapping{文件名} 重用映射增加混淆

-obfuscationdictionary{文件名} 使用给定文件的关键字作为要混淆方法的名称

-overloadaggressively 混淆时应用侵入式重载

-useuniqueclassmembernames 确定统一的混淆类的成员名称来增加混淆

-flattenpackagehierarchy{文件名} 重新包装所有重命名的包并放在给定的单一包中

-dontusemixedcaseclassnames 混淆时不会产生形形色色的类名

-renamesourcefileattribute{string} 设置原文件中给定的字符串常量

混淆带来的问题

虽然混淆对我们的代码反逆向起到比较良好的作用,但是过度的混淆也会带来很多调试的困难,如

①混淆错误,用到第三方jar的时候,必须告诉ProGuard不要检查,否则ProGuard会报错

②运行错误,当code不能混淆的时候,我们必须要正确配置,否则程序会运行出错,这种问题很多

③调试定位比较痛苦,打印的错误信息中错误堆栈是混淆后的代码,开发者自己也看不懂,这个时候需要自己存一份map,来记录对应的混淆映射关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值