Java反编译的一种很重要的方法是代码混淆,本文集中对其进行了介绍,可分为五个方面:符号混淆、数据混淆、控制混淆、控制流重组和预防性混淆。

到现在为止,关于Java程序的维护,混杂技能仍是最基本的维护办法。Java混杂东西也十分多,包含商业的、免费的、开放源代码的。Sun公司也供给了自己的混杂东西。它们大多都是对Class文件进行混杂处理,也有少数东西首要对源代码进行处理,然后再对Class进行处理,这样加大了混杂处理的力度。现在,商业上比较成功的混杂东西包含JProof公司的1stBarrier系列、Eastridge公司的JShrink和4thpass.com的SourceGuard等。

Java反编译之代码混杂(java代码混淆,防止反编译)  代码混淆 Java反编译 第1张

首要的混杂技能依照混杂方针能够进行如下分类,它们分别为符号混杂(Lexical Obfuscation)、数据混杂(Data Obfuscation)、操控混杂(Control Obfuscation)、操控流重组(Control-flow restructuring)、预防性混杂(Prevent Transformation)。

一、符号混杂

在Class中存在许多与程序履行自身无关的信息,例如办法称号、变量称号,这些符号的称号往往带有必定的含义。例如某个办法名为getKeyLength(),那么这个办法很可能便是用来回来Key的长度。符号混杂便是将这些信息打乱,把这些信息变成无任何含义的表明,例如将一切的变量从vairant_001开端编号;关于一切的办法从method_001开端编号。这将对反编译带来必定的困难。关于私有函数、局部变量,一般能够改动它们的符号,而不影响程序的运转。可是关于一些接口称号、公有函数、成员变量,如果有其它外部模块需求引证这些符号,咱们往往需求保存这些称号,不然外部模块找不到这些称号的办法和变量。因而,大都的混杂东西关于符号混杂,都供给了丰厚的选项,让用户挑选是否、怎么进行符号混杂。

二、数据混杂

数据混杂是对程序运用的数据进行混杂。混杂的办法也有多种,首要能够分为改动数据存储及编码(Store and Encode Transform)、改动数据拜访(Access Transform)。

改动数据存储和编码能够打乱程序运用的数据存储办法。例如将一个有10个成员的数组,拆开为10个变量,而且打乱这些变量的姓名;将一个两维数组转化为一个一维数组等。关于一些杂乱的数据结构,咱们将打乱它的数据结构,例如用多个类替代一个杂乱的类等。

别的一种办法是改动数据拜访。例如拜访数组的下标时,咱们能够进行必定的核算,图5便是一个比如。 在实践混杂处理中,这两种办法一般是归纳运用的,在打乱数据存储的一起,也打乱数据拜访的办法。经过对数据混杂,程序的语义变得杂乱了,这样增大了反编译的难度。

三、操控混杂

操控混杂便是对程序的操控流进行混杂,使得程序的操控流愈加难以反编译,一般操控流的改动需求添加一些额定的核算和操控流,因而在功用上会给程序带来必定的负面影响。有时,需求在程序的功用和混杂程度之间进行权衡。操控混杂的技能最为杂乱,技巧也最多。这些技能能够分为如下几类:

添加混杂操控 经过添加额定的、杂乱的操控流,能够将程序本来的语义躲藏起来。例如,关于按次第履行的两个句子A、B,咱们能够添加一个操控条件,以决议B的履行。经过这种办法加大反汇编的难度。可是一切的搅扰操控都不应该影响B的履行。

四、操控流重组

重组操控流也是重要的混杂办法。例如,程序调用一个办法,在混杂后,能够将该办法代码嵌入到调用程序傍边。反过来,程序中的一段代码也能够转变为一个函数调用。别的,关于一个循环的操控流,为能够拆分多个循环的操控流,或许将循环转化成一个递归进程。这种办法最为杂乱,研讨的人员也十分多。

五、预防性混杂

这种混杂一般是针对一些专用的反编译器而规划的,一般来说,这些技能运用反编译器的缺点或许Bug来规划混杂计划。例如,有些反编译器关于Return后边的指令不进行反编译,而有些混杂计划恰恰将代码放在Return句子后边。这种混杂的有效性关于不同反编译器的效果也不太相同的。一个好的混杂东西,一般会归纳运用这些混杂技能。

【修改引荐】

  1. 20个开发人员十分有用的Java功用代码
  2. 走进Java 7中的模块体系
  3. JavaFX 1.2 现已发布 首要新功用一览
  4. 2009年十大Java技能解决计划
  5. 2008最值得学习的五种JAVA技能


转载请说明出处
知优网 » Java反编译之代码混杂(java代码混淆,防止反编译)

发表评论

您需要后才能发表评论