分享:反汇编工具和模糊处理工具原理及使用

反编译和对安全的威胁      虽然,大部分的代码反编译是完全正大光明的,但事实是一个优秀的反汇编器是软件侵权的必需工具之一。正因如此,尤其对于在商业和不开放源代码领域中的开发人员来说,便宜的(或免费的) Java 代码反汇编工具的存在是一个严重的问题。
      就语言本身而言, 由于其相对简单的 Java 虚拟机(与真实的微处理器相比)和其写得很规范的字节码格式, Java 代码非常容易反汇编。而这随着 Java 语言在 Web 开发平台上的日益普及,已经在商业开发领域引起了很多争议。自从 Mocha 于 1996 年首次发布以来,一些在保护它们的源代码方面有过投资的公司和个人一直在为 Java 反编译器大吵大闹。

      实际上,当 Mocha 第一次发布时,它的作者 Hanpeter van Vliet 曾被一些公司的诉讼威胁过(请参阅 参考资料)。起初,他把反编译器从他的网站上移去,但是他后来以 Crema 的形式提供了一个更好的解决方案。Crema 是一个 Java 模糊处理器,它完全对立于 Mocha。
      自 Crema 发布以来,许多 Java 模糊处理器开始出现,其中一些是商业的,也有一些是开放源代码的。正如您看到的那样,一个好的 Java 模糊处理器可以在很大程度上保护您的 Java 代码。
针锋相对的代码模糊处理
       代码模糊处理字面上的意思就是模糊处理您代码的行为。Java 模糊处理器用不易察觉的方法改变程序,以致于它的 运行对 JVM 来说是一模一样的,但它使得试图理解程序的人更加迷惑了。
      让我们看一下当反汇编器遇到经过模糊处理后的代码会发生什么情况。清单 6 显示了 Mocha 在尝试反汇编被一种名为 jmangle 的工具模糊处理的 Java 代码后的结果。请注意以下的一小段程序和我们在前面清单中使用的是相同的,尽管乍一看,您肯定不会这么认为。
清单 6. 经过 jmangle 模糊处理的代码       public Foo()       {           jm2 = 10;           int i = jm0();           System.out.println("foo constructor");           jm1(i);       }
      象 jmangle 这样的模糊处理器把许多变量名和方法名(有时甚至是类名和包的名称)转换成没有意义的字符串。这样就使得人们难以阅读程序,但对于 JVM 来说,其在本质上和原来的程序是一样的。
变得卑鄙      所有的模糊处理器都要使标记变得没有意义,但他们所做的不仅仅是这些。Crema 之所以臭名昭著是因为它用了许多卑鄙的手段来阻止反汇编,并且有许多在已经出现的模糊处理器中,纷纷仿效它。
      一种常用的模糊处理代码的方法是用一个非法的字符串来替代类文件中的标记,这比使用没有意义的字符串更进了一步。替代的有可能是一个关键字,例如 private ,或者甚至是象 *** 这样没有意义的标记。一些虚拟机 -- 尤其在浏览器中 -- 对这些古怪的用法不会作出合法的反应。从技术上说,一个象 = 这样的变量与 Java 的规范是相反的;一些虚拟机可以忽略它,而另一些不可以这样。
Crema 放置炸弹      按字面意思,Crema 使用的另一个计策就是炸弹。Crema 具有完全关闭 Mocha 的能力。它在编译后的代码中添加一个小“炸弹”,导致 Mocha 在试图反编译代码时崩溃。
       可惜,Crema 已经没有了,但有一种名为 HoseMocha 的工具是专门为关闭 Mocha 而设计的。为了了解 HoseMocha 是如何工作的,我们将使用 javap,这个值得信赖的反汇编器。清单 7 所示的是 HoseMocha 放置炸弹前的代码。
清单 7. 放置炸弹前的代码Method void main(java.lang.String[])      0 new #4       3 invokespecial #10       6 return
以下是 HoseMocha 处理后的代码。
清单 8. 放置炸弹后的代码Method void main(java.lang.String[])      0 new #4       3 invokespecial #10       6 return      7 pop
      您看到那颗炸弹吗?请注意现在这个程序在返回后面有一条 pop 语句。等一下 -- 一个函数在返回之后还能做什么吗?很显然,它不能,而这就是关键所在。在返回语句后放一条指令确保了它不会被执行。您这儿所见的是根本不可能被反汇编的。因为它没有对应任何可能的 Java 源代码,所以也就没有任何意义。
      但为什么这一个小小的障碍就能导致 Mocha 崩溃呢? Mocha 可以只是简单地忽略它,或发一条警告信息并继续下去。尽管 Mocha 对于此类炸弹的脆弱性可以被认为是一个程序错误,但更有可能的是 van Vliet 为了回应对 Mocha 的攻击而故意设置的。
      到此为止,我们已经了解了较老的反汇编工具和模糊处理工具 -- 虽然有点过时,但还是比较出色的。但是,类似工具在这几年已经变得更加成熟,尤其在图形界面方面更是如此。在本文的最后,如果您不想让任何人能反编译您的代码,小编在此友情推荐:爱加密如何防反编译,讲解的还不错:http://www.ijiami.cn/newsInfo?id=289&v=3

时间: 2024-08-28 05:24:38

分享:反汇编工具和模糊处理工具原理及使用的相关文章

【分享】Android Studio专用文件转换工具:把ANSI文件批量另存为无BOM的UTF-8文件

[分享]Android Studio专用文件转换工具:把ANSI文件批量另存为无BOM的UTF-8文件 在Andoird Studio下编译java文件时,经常会出现像下面的错误: Error:(29, 43) 閿欒: 缂栫爜UTF-8鐨勪笉鍙槧灏勫瓧绗? 在这里,分享一个工具:ANSI文件批量另存为无BOM的UTF-8文件: 把下面代码用记事本存为AndroidStudioJava编码.vbs,双击即可使用: on error resume next Set WshShell=WScrip

分享万能java字符串编码转换工具类

代码下载地址:http://www.zuidaima.com/share/1795356301560832.htm 原文:分享万能java字符串编码转换工具类 package com.zuidaima.util; import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public class ChangeCharset { /** 7位ASCII字符,也叫作ISO646-US.Unicode字符集的基本拉丁块 */ publ

ILSpy,DLL反编译工具,学习与了解原理的好帮手

你是否一直苦于找到了好的dll却只知道怎么使用而不知道其原理. 你是否在使用一个dll的时候发现它在一些参数时报错了却没法解决. 你是否想成为一个优秀的.net开发,成为一个优秀的系统制造者. 那你需要这款工具,ILSpy,强大的dll反编译工具,让你了解原理,了解"宇宙"最初的本源. 来吧,下载吧 ILSpy_2.1.0.1603

分享一个web应用程序池管理工具

因为项目在联调阶段由于各种各样的原因需要重启应用程序池,而调试服务器基本都需要远登操作.同样的情况也会发生在线上,如果公司权限控制得比较严格,每次都要多部门的服务器权限申请的话有点麻烦, 所以抽点时间取巧做了个web版的管理工具(根据自己公司的企业文化酌情考虑是否线上应用). 功能:兼容iis6和iis7.提供文件操作,线程池操作以及站点操作.友情提示一下,如果你需要部署在线上环境,但是线上开放的端口都已经被占用的话,你可以将此程序挂靠在某个站点,创建成子应用和虚拟目录同样的层次操作. 图: 如

mysql备份工具innobackupex,xtrabackup-2.1的原理和安装

mysql备份工具innobackupex,xtrabackup-2.1的原理和安装 http://bbs.2cto.com/read.php?tid=310496 一.Xtrabackup介绍 1.1:Xtrabackup是什么Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品. Xtrabackup有两个主要的工具:xtrabackup.innobackupex1.xtraback

2015 GOOGLE I/O大会看点总结:新的开发工具及云端测试工具

http://ask.android-studio.org/?/article/48 尽管凌晨开始的主题演讲略显晦涩并继承了谷歌一贯的东一句西一句想起啥说啥的混乱风格,但期待用技术改变世界的技术男谷歌还是做了不少有意思的好事. 现在我们来盘点下,谷歌这场持续了3小时的发布会都有什么干货. 1.Android M:最新版移动系统 Android M系统 谷歌一直用一种甜品作为自己的系统版本代号,例如Android L,L指代Lollipop(棒棒糖).目前M只是开发者预览版,还没公布M究竟代表什么

数据字典生成工具之旅(2):数据字典生成工具及文档工具作用介绍

上一篇介绍完了整个架构和功能,这一篇将更加详细介绍功能和操作,将会以实际例子帮助理解!(预告:下一篇正式进入实现原理讲解) 阅读目录 开始使用工具 工具全景图 工具源代码下载 学习使用 回到顶部 开始使用工具 日常工作你是通过什么工具来创建表的呢? 1.通过SqlServer自带的新建表的功能实现,或者直接写Create Table(.....)语句.能更加便捷的方式创建吗?这样创建的表便于后续维护和学习吗? 2.通过PowerDesign创建表,很直观,然后导出表的创建语句.模拟一下做学生信息

SQL数据库同步工具(开辟数据同步工具)2.0 中文免费版

SQL数据库同步工具(开辟数据同步工具)本系统分为客户端和服务器两个部分,其中客户端承担了系统绝大数事务,服务器只是简单的执行客户端传送的命令,属于典型的C/S胖客户端瘦服务器模式.这样设计的目的是为了减轻服务器的压力,让系统更加流畅. 本系统分为客户端和服务器两个部分,其中客户端承担了系统绝大数事务,服务器只是简单的执行客户端传送的命令,属于典型的C/S胖客户端瘦服务器模式.这样设计的目的是为了减轻服务器的压力,让系统更加流畅. 客户端负责采集分布数据库中的数据,然后汇总到服务器.客户端需要配

文档生成工具doxygen+图像生成工具GraphViz

文档生成工具doxygen+图像生成工具GraphViz 虽然jdk自带的javadoc也很好用,不过使用doxygen+GraphViz 的组合可以生成许多强大的图(类图.协作图.文件包含/被包含图.函数调用/被调用图.类继承体系图等),另外,doxygen支持直接生成chm文档,支持LaTeX公式,如果你有一个支持php的服务器,生成的html还可以加入一个搜索框. doxygen是开源的C语言软体,可以在它的官方网站上下载到软体和源码:http://www.stack.nl/~dimitr