Java中混淆技术有几种

技术Java中混淆技术有几种这篇文章给大家分享的是有关Java中混淆技术有几种的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。到目前为止,对于Java程序的保护,混淆技术还是最基本的保护方法。J

本文分享了几个关于Java中混淆技术的内容。我觉得边肖很实用,就和大家分享一下作为参考。让我们跟着边肖看一看。

到目前为止,混淆技术是Java程序最基本的保护方法。有许多Java混淆工具,包括商业的、免费的和开源的。孙公司也提供了自己的迷惑工具。大部分都是处理Class文件的混乱,少数工具先处理源代码,再处理Class,增加了混乱。目前商业上比较成功的混淆工具有JProof公司的1stBarrier系列、Eastridge公司的JShrink、4thpass.com的SourceGuard等。

根据混淆的目的,主要的混淆技术可以分为以下几类:符号混淆、数据混淆、控制混淆、控制流重组和预防混淆。

一、符号混淆

Class中有很多与程序执行本身无关的信息,比如方法名和变量名。这些符号的名字往往有一定的含义。例如,如果一个方法被命名为getKeyLength(),那么这个方法可能被用来返回密钥的长度。符号混淆是将信息混淆,变成无意义的表示,例如,从vairant_001开始对所有变量进行编号;所有方法都从method_001开始编号。这会给反编译带来一些困难。对于私有函数和局部变量,您通常可以在不影响程序运行的情况下更改它们的符号。但是对于一些接口名称、公共函数、成员变量,如果其他外部模块需要引用这些符号,我们往往需要保留这些名称,否则外部模块找不到这些名称的方法和变量。因此,大多数混淆工具为符号混淆提供了丰富的选项,允许用户选择是否以及如何混淆符号。

二、数据混淆

数据混淆是混淆程序使用的数据。混淆的方式有很多,主要分为更改数据存储和编码转换以及更改数据访问转换。

改变数据存储和编码会破坏程序使用的数据存储方法。例如,将一个有10个成员的数组拆分成10个变量,并打乱这些变量的名称;将二维数组转换为一维数组等。对于一些复杂的数据结构,我们会打乱它们的数据结构,比如用多个类替换一个复杂的类。

另一种方法是更改数据访问。例如,当访问数组的下标时,我们可以做一些计算,图5就是一个例子。在混淆处理的实践中,这两种方法通常被综合使用,不仅打乱了数据存储,也打乱了数据访问的方式。混淆数据后,程序的语义变得复杂,增加了反编译的难度。

三、控制混淆

控制混淆是对程序的控制流进行混淆,使得反编译程序的控制流更加困难。通常,控制流的改变需要增加一些额外的计算和控制流,因此会对程序的性能带来一些负面影响。有时,在程序的性能和混乱程度之间有一个权衡。控制混乱的技术最复杂,技巧最多。这些技术可分为以下几类:

添加混淆控件可以通过添加额外的复杂控制流来隐藏程序的原始语义。比如对于顺序执行的两个语句A和B,我们可以增加一个控制条件来决定B的执行,这样的话,反汇编就比较困难了。但是所有的干扰控制都不应该影响b的执行。

四、控制流重组

控制流重组也是一种重要的混淆方法。例如,一个程序调用一个方法,混淆后,方法代码可以嵌入到调用程序中。相反,程序中的一段代码也可以转换成函数调用。另外,对于一个循环的控制流来说,它是一个可以拆分多个循环的控制流,或者把循环变成一个递归过程。这种方法是最复杂的,研究人员也很多。

五、预防性混淆

这种混淆通常是为一些特殊的反编译程序设计的。一般来说,这些技术利用反编译程序的弱点或缺陷来设计混淆方案。例如,一些反编译程序不会在Return之后反编译指令,而一些混淆方案只是将代码放在Return语句之后。对于不同的反编译程序,这种混淆的效果是不同的。一个好的混淆工具通常结合这些混淆技术。

感谢阅读!这篇关于“Java中有几种混淆技术”的文章将在这里分享。希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/137936.html

(0)

相关推荐

  • 20有效的括号

    技术20有效的括号 20有效的括号20有效的括号
    题目
    给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
    有效字符串需满足:左括号必须用相同类型的右括

    礼包 2021年10月28日
  • 内衣品牌大全,有哪些内衣品牌深受消费者喜爱

    技术内衣品牌大全,有哪些内衣品牌深受消费者喜爱内衣是生活中离不开的东西内衣品牌大全,无论是男人还是女人,无论是大人还是孩子,都需要内衣。
    这里说的内衣不仅仅是女士内衣,还有男士的背心、保暖内衣、孩子的保暖内衣。
    国内做保

    生活 2021年10月24日
  • mysql怎么看哪个是字段类型(mysql一个类型分成几个字段)

    技术MySQL字段类型分为哪几类这篇文章主要介绍“MySQL字段类型分为哪几类”,在日常操作中,相信很多人在MySQL字段类型分为哪几类问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MyS

    攻略 2021年12月25日
  • 后来的英语,英语英语英语……要怎么学

    技术后来的英语,英语英语英语……要怎么学坚持读英文原著,慢慢啃,时间长一定有效果后来的英语。我们看英文原声电影太过于依赖中文字幕,建议直接读原文原著,这样日积月累养成习惯,慢慢就会有效果。比如这个英文原著在线阅读网站,读

    生活 2021年10月25日
  • mybatis日常语法有哪些

    技术mybatis日常语法有哪些mybatis日常语法有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。mybatis中的#和$的区别? #方式能够很大程

    攻略 2021年10月20日
  • go module是如何使用本地包的

    技术go module是如何使用本地包的小编给大家分享一下go module是如何使用本地包的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!g

    攻略 2021年11月27日