针对Java易遭受逆向工程攻击的原因

针对Java易遭受逆向工程攻击的原因

针对Java易遭受逆向工程攻击的原因,将向大家介绍目前市场上关于防止Java免受逆向工程攻击的集中措施,同时指出这几种措施在防范逆向工程攻击的时候存在的不足之处。

首先是板载措施,它并不足以防止逆向工程。大多数虚拟机都包含一些使逆向工程复杂化的功能。Java允许用户在JAR存档中提供的每个类上设置一个数字证书,以确保原始文件没有被更改。虽然这样做并无害处,但该功能相当容易清除,并且仅针对静态补丁方法提供保护,而静态补丁只是攻击场景中的一小部分。而且,这种方法并不能针对运行时应用于内存的补丁提供保护。

Java还通过虚拟机执行字节码验证器,该验证器在执行通过的字节码之前对其进行自动分析。这可以防止执行“奇怪”的代码,也使字节码注入变得更加困难。

然而,尽管这些措施给攻击者造成了困难,但对于充分保护知识产权还远远不够。

其次是Java封装技术。开发人员通常用以防止.class文件静态分析和字节码反汇编的一种方法是封装,这种方法通过应用加密/解密完整文件来防止对类文件的分析。通过封装,开发人员将受保护文件的原始加载器更换为处理加密/解密的自定义加载器。加密使用将.class文件从标准Java .class格式更改为仅“密钥”所有者可读格式的算法来防止对这些文件的分析。然而,.class文件的字节码在一个内存位置中仍保持可读,在系统加载器尝试加载该类之前的时刻,通常可从该位置访问字节码。如果黑客能够找到那个内存位置,HASP,就可以访问原始状态的该类,Safenet。

最后,防止黑客攻击该内存位置需要第二种技术,称为混淆。混淆可产生一个更加复杂、难于理解并且与原始代码具有相同行为方式的代码版本。有几种不同类型的混淆方法可用于指令集:程序员可以通过替换二进制代码中的所有字符串来混淆代码,这样就更加难以找到一个好的切入点来开始逆向工程攻击。他们可以通过插入指向垃圾代码的跳转并返回来迷惑攻击者,或混淆源代码或字节码。

开发人员也可以选择使用名为Const2Code转换的技术来混淆常量。例如,密钥有时在应用程序中存储为一组字节。如果黑客确定了这些字节的位置,他们就可以访问这些字节。为混淆一个常量(如密钥),Const2Code算法将常量转换为可产生同一常量的多个不同的命令。

例如,为了在源代码段中隐藏常量cst=0x12345678,可以将该常量简单地分为几个算术运算,如加、减等等。A = 0x9ABCDF00;B=0x2;C=0x135799E00。现在让我们使用这三个变量重新计算出常量0x12345678。我们的原始常量为:cst = C / B + A – 0x88888888 – A + 1000= 0x12345678。如果应用程序仅使用该例程来计算常量,攻击者就必须理解其中的含义,IKEY 1032,而不是简单地获取该常量。

java加密

.net加密

转载于:https://my.oschina.net/u/915813/blog/143034

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/110083.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • C++中sstream类

    C++中sstream类C++中的sstream类用来操作string,可以向string中写入数据,也可以从string中读取数据。该类在sstream头文件中定义。该类可以分为istringstream和ostringstream,其中istreamstream用来从string中读取数据;而ostringstream用来向string中写入数据。1istringstream1.1定义istringstream类的对象可以使用两种方法定义istringstream类的对象istringstreamiss.

  • datagrip2020激活码【中文破解版】

    (datagrip2020激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • Spring中bean的scope

    Spring中bean的scope

  • 单片机控制步进电机-AVR详细程序

    单片机控制步进电机-AVR详细程序单片机控制步进电机-单片机程序(avr)硬件线路连接图见上一篇文章软件:ICCV7FORAVR-写程序Progisp-烧程序速度S曲线生成器(后续后单独讲解)-生成S曲线数组代码硬件:Atmega16ASP下载线杜邦线控制原理:利用单片机定时器控制IO口高低电平产生脉冲,通过定时器控制每个脉冲的时间,以及脉冲的个数,从而控制步进电机速度以及转动角度,实现步进电机开环控制能…

  • 对LARS(Least Angle Regression)的简单理解

    对LARS(Least Angle Regression)的简单理解前言我在本科的时候接触过用LASSO筛选变量的方法,但了解不多。这几天在公司实习,学习到特征选择,发现还有个LARS是经常和LASSO一起被提起的,于是我临时抱佛脚,大概了解了一下LARS的原理。在看文章的时候发现很多人提到SolutionPath这样一个概念,感觉很费解,后来参阅了Efron等人的"LeastAngleRegression"论文,总算是明白了一些。不过本人由于懒,后面数学…

  • C 语言中负数移位运算讲解

    C 语言中负数移位运算讲解C语言中负数移位运算讲解“<<”、“>>”为移位运算符。“<<”为左移位运算符,即数据字节中的每个二进制位同时向左移位。如“x<<n”表示x中的每个二进制位同时向左移动n位。“>>”为右移位运算符,即数据字节中的每个二进制位同时向右移位。如“x>>n”表示x中的每个二进制位同时向右移动n位。下图…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号