关键词不能为空

当前您在: 主页 > 英语 >

多种混淆器的比较

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-28 00:17
tags:

-

2021年2月28日发(作者:零误差)


1



混淆器


retro Guard


的介绍:



本节介绍如何使 用


retroGuard


来进行字节混淆来防止反编译和反向工 程。



1.1


关于


RetroGuard


Retr oGuard


是一个字节级的混淆器,


一个替换可以识别的变量 和属性为无意义的字


符串的工具,这使得反向工程和反编译无法正常工作。编译后的代码 容量会减小。




RetroGuar d


是一个免费的软件,使用


GNU Lesser General Public License.



特性包括:



1




降低< /p>


java


代码的


容量,

< br>(最大


可以节省将



50%


,一般情况下


可以节省


20%-30%



,这样对于你的


applets


程序,可以大大加速了下载时间。



2




设计合 理,可以与


java


工程的自动化编译过程无缝兼容。



3




允许全部用户定义的混淆过程。



4




支持多 种对


java


代码的切入点——可以访问应用程序,

< p>
applets,javaBeans


和类


库接口 。



5




使用


jar


这个标准的


java


打包方案。



6




混淆过程可以被灵活的脚本语言来控制。



7




提供了一个图形化的向导程序来管理脚本文件。



8




通过对方法和文件名的大量过载来取得高安全性



9




生成的 代码有效,符合


java


虚拟机规范。



10




自动 更新清单文件,使用混淆后的类名,并且自动生成


MD5



SHA-1


的消息摘要




automatically generated MD5 and SHA-1 message digests




1.2


关于混淆


(obfuscation)


java


字节代码



class


文件)


包含了所有的信息,


部分源文件中注 释。


使用


decompiler


工具可 以很轻易的取得源码。


为了对抗这种行为,


我们需要再部署软件 时混淆你的类文


件。



混淆过程剔除了 所有不需要的信息,包括行号表,本地变量名和源文件名。同时,


类,接口,字段和方法 标示被重新命名。运行这些代码的


Java


虚拟机,并不在意这 些


变化。然而,这种版本的


classes

文件反编译之后,难以理解的。



决定哪个类需要被混淆,


大多数混淆器提供一个单一的切入点


(通常是一个应用程


序的


main


方法,或则是

< br>applet



,


并且从这个切 入点引出一个类树出来。不幸的是,该


方法是非常有限的仅仅适用于小的


cases


当中的,


如果


ja va


代码包含了多个切入点,



个方法 就不是很灵活的。



相反的,


Retr oGuard


混淆类和接口是在


jar


文件内进行的。所有的切入点可以通过


描述文件类定义的。




Corruption of class


技术



< br>不太理解,


主要的意思是这样处理过的代码会挑虚拟


机的 ,只在部分机器上可以运行的)



使用多种技术方案来混淆字节 代码,他完全可以使市场上一些简易的编译器失效。




由于以上原因,


RetroGuard


混淆器只产生通过验证的字节代码,完全兼容


Java



拟机规范。与


Corrupting the bytecode< /p>


不同,


RetroGuard


使用标示符 得过载技术。



1.3


安装使用



RetroGuard


的安装很简单,只需要将



包放到

< p>
CLASSPA


TH


路径下就

可以了。




命令行格式为


:


java RetroGuard [INPUT-JAR [OUTPUT-JAR [SCRIPT [LOGFILE]]]]








例如:



java RetroGuard









1.4


混淆过程的控制


< p>
脚本文件可以控制


RetroGuard


的混淆过 程


,


脚本文件可以定义那种标示符不被改


变。



脚本文件可以通过手写的方式,也可以使用图形化工具 来生成的:





java RGgui







如果一个应用程序的入口程序是



,


那么在脚本文件中可以这样写:






.class



MyApp



public method


如果 需要访问到一个


applet


程序


,


那么在脚本文件中可以这样写:




.class



MyApp


,这样将保留类的文件名不被混淆



如 果需要访问一个


JavaBean


类,


,


那么在脚本文件中可以这样写:



.class



MyBean



protected,


这样将保留类 名,


pulic


方法,保护方法和可以访问的

< br>方法和字段。





脚本文件的例子:



# All text in a line following '#' is treated as a comment, and


is ignored.




# Preserve the class name 'MyClass' in package 'co'



# (note that the package identifiers 'COM' and 'widgetco' are



# automatically preserved also, so that 'MyClass' remains fully



# accessible):



.class COM/widgetco/MyClass




# Preserve the class name 'MyClass' and all public methods and



# fields declared in it:



.class COM/widgetco/MyClass public




# Preserve the class name 'MyClass' and all public, protected or



# default- access (package) methods and fields declared in it:



.class COM/widgetco/MyClass protected




# Preserve the class name 'MyClass' and all public, protected or



# default-access (package) methods (but not fields) declared in it:



.class COM/widgetco/MyClass protected method




# Preserve the class name 'MyClass' and all public and protected



# (but not default-access, package) methods and fields declared in


it:



.class COM/widgetco/MyClass pub_prot_only




# Preserve all classes and their public fields in the package



# 'co':



# (Reference to all classes in a package is the only situation



# where wildcards are allowed)



.class COM/widgetco/* public field




# Preserve the 'SourceFile' debugging attribute of all classes:



.attribute SourceFile




#


Preserve


the


method


'double


getValue(Object


obj)'


in


class


'MyClass':



.method COM/widgetco/MyClass/getValue (Ljava/lang/Object;)D




# Preserve the field 'char aCharacter' in class 'MyClass':



.field COM/widgetco/MyClass/aCharacter C




1.5


对非


class


类文件的处理



这些资源 文件包括了图形,音频文件,本地化代码,


jar


包文件包含了 一个清单文


件和一些数字签名的文件。


RetroGuard< /p>


可以处理上面所有文件(打在


jar


中的 )



一般来说,我们访问资源文件的方法是:



1




使用相 对路径和


java


的类方法



InputStream getResourceAsStream(String relativePath)



URL getResource(String relativePath)


2




使用绝 对路径和


ClassLoader


的方法



InputStream getResourceAsStream(String absolutePath)





URL getResource(String absolutePath)


我们提倡大家采用相对路径的方式来访问资源。




签名:首先用


RetroGuard


将源包混淆后,在进行签名的。




1.6


创建补丁文件



RetroGuard(1.1


版本以后


)


支持增量混淆,这样可以大大降低了程序的下载量。





使用方法




java RGpatch WHOLE-JAR PATCH-JAR LOGFILE LISTFILE





举例:




初始版本:



java RetroGuard


(


其中,



内容为


.class JTool public method)








< br>









户< /p>










包含了混淆映射关系,


这个


log

< br>文件对于软件和补丁是非常重要


的。




几周后,客户发现了新的问题,修复这个问题需要类和资源的 改变。我们就


可以创建一个小的补丁包来完成程序的更新。




第一次编译和打包的


jar


包是


.






java


RetroGuard







注意到 :


这次使用的是



文件,


而不是


.


这样生


< p>
1.1


版本包是与


1.0


版本包完全兼容的。




剩下的工作就 是将变化的类和资源从



包中提取出来。



首先需要建立一个



文本表示变化类的名 字




COM/widgetco/



COM/widgetco/





Java


Rgpatch






jre -cp JTool



they


could


now


take


advantage


of


the


bug-fix


by


using


the


patch file:


jre -cp jtool-patch-1.0-1.1; JTool









2



混淆器


j doc


的介绍:



jdoc


混淆编译器是在


Sun


JDK


中提供的


Java

< br>编译器


(javac)


的基础上完成的,修改了代


码生成过程,对编译器生成的中间代码进行混淆,最后再生成


clas s


文件,这样编译和混淆


只需要一个步骤就可以完成。


另外可以在源程序中插入符号保留指令来控制哪些符号需要保


留,不需要 单独的配置。



2.1 Xobfuscate


命令参数说明



运行


java -jar


就可以启动


Java


混淆编译器,


joc


的命令行参数和


javac


完全相同,


但增加了一个新的参数


-Xobfuscate


,它的用法如下:



-Xobfuscate:


其中指定混淆级别,可以是以下几种级别:



-Xobfuscate:none


不进行混淆



-Xobfuscate:private


对所有

< p>
private


访问级别的元素进行混淆



-Xobfuscate:package


对所有

< p>
private



package private


元素进行混淆



-Xobfuscate:protected


对所有


private, package private, protected


元素进行混淆



-Xobfuscate:public


对所有的元素都进行混淆



-Xobfuscate:all


相当于

-Xobfuscate:public



如果使用


-Xobfuscate


不带级别参数,则相当于

-Xobfuscate:package




2.2


符号保留指令



A:


除了在命令行用


-Xobfus cate


参数控制符号混淆级别外,还可以在源代码中使用符号


保留指令来控制那些符号需要保留,符号保留指令是一个


Java


文档注释指令,可以插


入在类和类成员的文档注释中,例如:



/**


* This class should preserve.


* @preserve


*/


public class Foo {


/**


* Y


ou can specify which field should be preserved.


* @preserve


*/


private int x;




/**


* This field is not preserved.


*/


private int y;




/**


* Y


ou can also preserve methods.


* @preserve


*/


public void hello() {}




/**


* This method is not preserved.


*/


private void collect() {}


}


如果没有


@preserve


指令,则 根据混淆级别及成员的访问级别来确定符号是否保留。





对于类的符号保留指令可以附带一个保留级别参数,来控制类 成员的符号保留,包括:



@preserve


仅对类名进行保留,类成员的保留根据


-Xobfuscate


命令行参数决定



@preserve public


保留所有


public


成员



@preserve protected

< p>
保留所有


public



protected


成员



@preserve package


保留所有


public, protected, package private


成员



@preserve private


保留所有成员



@preserve all


相当于


@preserve private




3



混淆器


JODE


的介绍:

< br>


3.1


安装使用:





类包放入


clas spath


路径下,立即可以使用了。




命令行格式:






java ator


.Main



中代表的是一个配置文件。



3.2


混淆过程的控制


< p>
上面参数中的



可以完成对混淆过程的控制。



下面主要分析


jos


文件的内容




1,


首先需要设置类路径



# The class path should include everything that is needed to run the


#


project. Don't


forget


the


java


base


classes


(


or


).


classpath =



2,


生成的文件名称



# The jar, zip file or directory in which the obfuscated class files


# should be written.


dest =



3,


定义一个翻译表单



#


Write


the


reverse


translation


table


to


. With


the help


of


# this table you can later undo the renaming.


revtable =



4


,定义需要除掉的内容




Unreach


不能进入的方法和类




Source java


文件名



(异常信息会不可读)




Lnt


行号表



(异常信息会不可读)




Lvt


本地变量表



(调试不能正常工作)




Inner


内部类信息



(映射不能正常工作)




strip =


-


-


-


-


-


-


-


-



本文更新与2021-02-28 00:17,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/677058.html

多种混淆器的比较的相关文章

  • 余华爱情经典语录,余华爱情句子

    余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,

    语文
  • 心情低落的图片压抑,心情低落的图片发朋友圈

    心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得

    语文
  • 经典古训100句图片大全,古训名言警句

    古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事

    语文
  • 关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅

    鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而

    语文
  • 三国群英单机版手游礼包码,三国群英手机单机版攻略

    三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,

    语文
  • 不收费的情感挽回专家电话,情感挽回免费咨询

    免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。

    语文