针对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)


相关推荐

  • 离线地图的原理_matplotlib地图

    离线地图的原理_matplotlib地图侵权说明:如文章内容有侵权行为,请联系本人告知,本人会尽快删除修改,避免扩大影响。Bmap说明:Bmap由北京百度网讯科技有限公司提供技术支持为用户提供包括智能路线规划、智能导航(驾车、步行、骑行)、实时路况等出行相关服务的平台。本身并不提供离线功能,因为离线会导致“搜索周边”“搜索路线”“交通状况”等实时性数据要求的功能缺失。Bmap加载原理简图:离线地图…

    2022年10月31日
  • Java并发——线程同步Volatile与Synchronized详解

    Java并发——线程同步Volatile与Synchronized详解Java面试——线程同步volatile与synchronized详解0.前言面试时很可能遇到这样一个问题:使用volatile修饰int型变量i,多个线程同时进行i++操作,这样可以实现线程安全吗?提到线程安全、线程同步,我们经常会想到两个关键字:volatile和synchronized,那么这两者有什么区别呢?1.volatile与synchronized介绍volatile是变量修

  • 推荐10个堪称神器的 Java 学习网站

    Java学习网站,有了这些,成为大牛不在话下

  • C++递归和迭代的区别,并举例说明[通俗易懂]

    C++递归和迭代的区别,并举例说明[通俗易懂]递归:函数自己重复调用自己迭代:利用变量的原值推算出变量的一个新值;A不停的调用B例子一:斐波那契数递归(recursion):#include#includeusingnamespacestd;intfab(intn){if(n==0)return0;if(n==1)return1;if(n>1)returnfab(n-1)+fab(n-2);}intmain(){cout<<fab(4)<

  • element 输入框点击事件_ElementUI的input事件问题

    element 输入框点击事件_ElementUI的input事件问题最近用ElementUI的el-input组件,然后发现一个问题,就是我在输入框后,加一个icon的button,然后我希望这个输入框可以触发两个事件,第一个是,输入完,按键盘回车键的事件,第二个是,输入完,点icon的button的click事件。然后翻阅文档,发现可以给input加@change事件,这样按回车可以搜索,然后可以把icon的button写成slot的方式然后给button加@c…

  • spdlog学习笔记

    spdlog学习笔记说明:所有内容翻译自spdlog的wiki,受英语水平所限,有所错误或失真在所难免,如果您有更好的建议,请在博文下留言。线程安全spdlog::命名空间下的是线程安全的,当loggers在不同的线程同时执行时,下述函数不应该被调用:spdlog::set_error_handler(log_err_handler);//orlogger->set_error_handler(…

发表回复

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

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