Android代码混淆规范总结

本文深入探讨了ProGuard工具在代码压缩、优化和混淆中的应用,解析其如何通过移除无用代码、重命名类和方法来保护源代码,防止反向工程。同时,文章也讨论了代码混淆可能带来的问题及其实现机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码混淆

概念

proguard工具用于压缩,优化,混淆代码。主要作用是移除代码中的无用类,字段,方法和属性,同时可以进行代码混淆

原因

保护源代码,阻止反向工程。

反向工程会带来许多问题,诸如知识产权泄露,程序弱点暴露易受攻击等。使用即时编译技术的语言,如Java、C#所编写的程序更容易受到反向工程的威胁。

方法

将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字

打乱代码的格式。如删除空格,将多行代码挤到一行中,或者将一行代码断成多行等

问题

被混淆的代码难于理解,调试困难

对于支持反射的语言,代码混淆有可能与反射发生冲突

代码混淆并不能真正阻止反向工程,只能增大其难度

技术功能

压缩(Shrink)
检测并移除代码中无用的类、字段、方法和特性(Attribute)
优化(Optimize)
对字节码进行优化,移除无用的指令
混淆(Obfuscate)
使用a,b,c,d这样简短而无意义的名称,对类、字段和方法进行重命名
预检测(Preveirfy)
在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的

工作原理

混淆规则

https://juejin.im/entry/58f6d2a10ce463006bc9e6af

问题

怎么判断代码是否被使用

Entry Point(入口点):在ProGuard过程中不会被处理的类或方法,在ProGuard.properties文件中配置
压缩时,ProGuard会从上述的Entry Point开始递归遍历,对未使用的类和类变量进行压缩或丢弃
非Entry Point的类、方法都会被设置为private、static或final,不使用的参数会被移除
有些方法会被标记为内联的,在混淆的步骤中,ProGuard会对非Entry Point的类和方法进行重命名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值