混淆的目的很明显,是为了混淆语義
我们能轻车熟路的找到混淆的源头:
我们来看一下就行混淆器给我们设置了怎样的访问者:
我们直接跟到最终的访问者,也就是MethodLinker
既然它的目嘚很明显是为了处理方法,我们直接跟到相关的调用:
我们看到刚开始它会先取得方法的名称和签名,对于cinit 和init不做处理,注释便是最好的源码解析:
如果没有这个方法,便加入到享元池中,但是之前调用了lastMember
也就是说如果它的visitor信息里面如果存在,则直接返回上一个的方法,这种写法很类似于职責链模式但我只是猜测,只是有职责链的感觉,我们继续往下看,如果方法已经存在了呢?~
好的我们继续混淆的过程:
说明它对属性并没有任何嘚访问操作:
接着由于库文件没有必要混淆,所以要将库文件保持签名
这是对class的属性做标记,接着我们省略掉无关紧要的代码我们直接看混淆的主要访问者
我们可以跟到对于混淆的名是通过:
实际上是放回访问者的访问标志,而这个标记值是通过ClassObfuscator的
来设置的而对于采用keep标记的那些值,茬调用 newClassName(programClass);会放回keep访问者标记的值就不走if中的语句块,这样就达到了只针对非keep中的参数混淆的效果。我们来看一下它是如何给定名字的吧:
可见,是通过调用工厂来生成下一个匹配的名字,而且每一个包对应一个工厂,Proguard中有很多的命名工厂类的实现,我们直接用默认的命名工厂类:SimpleNameFactory
很容易看出,实际上它是将常量池对应的索引数据替换成它的新数据,
我们看下它對member的操作吧:
还是一样的道理,先对member定义个一个新的名字,然后替换掉常量中的数据
澳洲幸运5后三组六平刷精准计划七码二星技巧012路分析技巧012路分析方法是一种归类分析方法即将分析对象用除3余数的方法,按余0、余1、余2分为三大类便于分析判断,将選号空间再度缩水“澳洲幸运5后三组六平刷”是数字型彩票,每个位置的数字都是从0~9十个数中产生把0~9十个数字分别除以3后,按余数分為余0(0、3、6、9)、余1(1、4、7)、余2(2、5、8)三类用这种方法来分析“澳洲幸...
澳洲幸运5后三组六平刷精准计划七码二星技巧012路分析技巧012路分析方法是一種归类分析方法。即将分析对象用除3余数的方法按余0、余1、余2分为三大类,便于分析判断将选号空间再度缩水。“澳洲幸运5后三组六岼刷”是数字型彩票每个位置的数字都是从0~9十个数中产生。把0~9十个数字分别除以3后按余数分为余0(0、3、6、9)、余1(1、4、7)、余2(2、5、8)三类。用这種方法来分析“澳洲幸运5后三组六平刷”二星组合方式就是看二星十位和个位上的数字分别是由哪一路数字组成。可分为00、01、02、10、11、12、20、21、22等九种
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。