Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 355|回复: 0

[Java基础知识]浅析Java程序易遭受逆向工程攻击的原因

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-9-30 17:47:21 | 显示全部楼层 |阅读模式
    java应用程序虽然能够“编写一次,随处运行”(Write Once, Run Anywhere)是一个巨大的优势,但这种环境的架构方式使其远比本机应用程序更容易被黑客进行逆向工程。这意味着开发人员面临着失去知识产权的非常真实的危险。基于应用程序的虚拟机比本机应用程序更容易逆向工程的原因有很多:

    JVM是开源的
       Sun已经免费提供JVM的源代码。这使得黑客只需查看代码即可弄清虚拟机的工作方式。

    Java .class文件格式是可公开获取的
       如前所述,Java源代码被编译成字节码,而字节码存储在Java .class文件中。Java .class文件格式的规范是可公开获取的,因此有技术背景的任何人都能容易地编写可以处理、修改或转换.class文件的工具。

    JVM是软件,而不是硬件
        与需要理解特定处理器的专家使用的标准编程语言不同,JVM是一个应用程序,它如同微处理器一样运作,并使用操作系统和计算机硬件提供的内置功能。由于黑客不必深入到硬件级别,因此更容易取得对JVM的完全控制。  
      
       
       
         
       

         
       
      
        因此,例如在使用标准本机系统开发语言进行调试时,暂停处理器极为困难,需要具备处理器、调试功能及可用环调试器的专家知识。但是,由于JVM 运行环境的源代码是可公开获取的,因此开发人员可以轻松地建立自己的虚拟机来完全控制虚拟处理器的各个方面。这样可以容易地分析运行环境中运行的每个应用程序。

    Java的指令比本机代码少
        然而,JVM代码易于进行反向工程的另一个原因是它具有比本地应用程序更少的指令。这是出于性能考虑。JVM的使用在应用程序和本机处理器之间增加了一个软件层,这会对性能产生负面影响。虽然现代处理器不断提高的执行速度最终将缓解这一问题,但这一问题仍然很明显。虚拟机开发人员提高执行速度的一种方法是使用比本机处理器汇编程序更小的字节码指令集。本机应用程序可能包含多达400条指令,而Java应用程序通常使用不超过200条的指令。更少的指令意味着黑客可以更快地分析代码以进行逆向工程。
    这些特性使得虚拟机远比其它类型的应用程序更容易遭受逆向工程攻击。

    第三方反汇编程序增加了漏洞
       不仅是JVM本身容易遭受逆向工程攻击,商业和免费的Java字节码反汇编程序也越来越多,从而进一步简化了代码逆向工程的过程。

        IDA和Eclipse字节码插件是众多Java字节码反汇编程序中的两种。作为商业产品,IDA是一种普遍的反汇编程序,可用于许多不同的处理器,包括80x86和MIPS。Eclipse字节码插件是免费软件。它能够反编译Java .class文件的字节码并以适当的顺序显示所有操作码指令。

         尽管这些产品不大可能从字节码完美地恢复原始代码,但它们恢复的源代码将等同于原始代码,并且比字节码更具可读性。一旦恢复了源代码,攻击者可以容易地删除部分代码并将其非法地用于竞争对手的应用程序中,或在.class文件中定位打补丁。

    图1提供了黑客可能如何在.class文件中打补丁的一个示例。屏幕的上半部分显示了一小段Java源代码。屏幕的下半部分显示了字节码反汇编的输出,也就是一个字节码指令列表。标记为红色的区域是源代码中IF结构的对应指令。字节码指令“LCMP”的十六进制表示为0x94。该工具还指出了操作码在.class文件中的位置。有了这些信息,黑客可以使用简单的十六进制编辑器来改变该IF分支,而这只需不到一分钟的时间。假设该IF条件用于许可证检查,黑客可倒置该条件,指示即使在许可证被验证为无效(如已过期)的情况下仍返回“True”,从而突破许可证检查。在这种情况下,黑客使用一个字节的补丁即可完成所有工作。虽然大多数应用程序都比这个示例更加复杂,但即使在复杂的应用程序中,字节码也非常简单并且容易理解。   图1 - 用于字节码反汇编的Eclipse字节码插件



      
      
       
       

         
       

         
       
      
    复制代码
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-9 14:16 , Processed in 0.399413 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表