MASM的反反汇编技术

由于汇编语言是与机器语言机器码一一对应的,所以程序的代码非常简洁,编译、链接程序不会在其中加入任何其它代码,所以,用Win32DASM等把汇编工具反汇编汇编语言写的程序,其列出的汇编代码几乎与编写的顺序、过程、代码一模一样,这也是汇编语言简洁的证据。
  但是这种过于简洁的代码却给了破解者提供了方便,破解者只需要有一定的Windows SDK编程与汇编的经验,破解就非常简单,根本不需要用SoftICE这些动态工具就可以破解。于是,相应的防止跟踪的技术就出来了,比如花指令、不按规则调用API等等,今天就花指令和大家研究研究。
  花指令,其实就是在程序中加入一些字节来干扰静态工具反汇编,毕竟汇编工具没有人的思维,所以这招非常好骗。
  打开EditPlus,新建一个ASM - Sample文件,输入以下代码:
.386
.Model Flat, StdCall
  Option Casemap :None

  Include windows.inc
  Include user32.inc
  Include kernel32.inc

  IncludeLib user32.lib
  IncludeLib kernel32.lib
.data
  Welcome db "欢迎来到汇编的世界",0
.CODE
  START:
  invoke MessageBox,0,offset Welcome,0,0
  invoke ExitProcess,0
  END START
  保存,Ctrl + 1编译。
  用Win32DASM打开编译后的文件,可以在其菜单命令[函数]->[输入]中看到我们使用了的MessageBox与ExitProcess名字,在菜单命令[参考]->[字符串]中看到我们定义的字符串Welcome的值,假如您的程序这段代码要做的是在用户输入错误的注册码后报错,那么,破解者只需要找到对话框显示的字符串使用的地址,然后向上查找跳到此地址的跳转指令,更改指令就能轻易破解,我们要做的,就是把字符串隐藏起来,不让破解者轻易找到它的地址,如下:
  ;先关闭Win32DASM(以下同).
  ... ...
  lea eax,Welcome
  invoke MessageBox,0,eax,0,0
  ... ...
  也就是说,我们并没有使用花指令,而是在使用字符串时先把字符串的地址传给eax,然后再把eax做为参数传给MessageBox,这样做,Win23DASM这些反汇编工具就无法识别了,好,用Win32DASM重新打开编译的文件,在[参考]菜单中,[字符串]这一项灰色显示,提示这个程序没有字符串,骗过它了!^_^
  还有就是使用花指令,花指令不但可以使反汇编工具无法识别出字符串,更会让它们把汇编出错误的代码,花指令一般都是使用一些无用的字节来进行干扰,但是干扰反汇编的字节仍是可以使用的,像这样子:
  ... ...
  jz @F
  jnz @F
   www db "欢迎来到汇编世界",0
  @@:
  lea eax,www
  lea ebx,Welcome
  invoke MessageBox,0,eax,ebx,0
  invoke ExitProcess,0
  ... ...
  编译后再用Win32DASM打开EXE,发现不但[字符串]这一项灰色显示,反汇编出来的代码变得面目全非,现在的程序只有很少的代码,如果代码一多,破解者不晕才怪,不过这样只会把一些初级破解者难倒,有经验的破解者根据jz与jnz的跳转是否指向不存在的地址而知道使用了花指令,还可以根据MessageBox的使用地址来进行分析,我们现在要做的就是使用手工调用API加花指令来骗反汇编工具,如下:
  ... ...
  lea eax,Welcome
  push 0
  push 0
  push eax
  push 0
  jz @F
  jnz @F
   www db "欢迎来到汇编世界",0
  @@:
  call [MessageBox]
  invoke ExitProcess,0
  ... ...
  (上述代码WinDASM32黄金版能正确识别)
  也就是说,在压入参数后,不要马上使用call来调用API,而是在调用前使用花指令,结果会怎样?编译后进行反汇编,看看吧,不但[字符串]这一项灰色显示,[函数]->[输入]一项也是灰色,哈,骗过了!再看看把汇编出来的代码,天啦,乱七八糟的,如果这些代码是在一个几百K的程序中,我看那个破解者如何应付,哈,他不晕才怪!
  再来点狠的:
;=================
;完整API花指令示例:
;=================
.386
.Model Flat, StdCall
Option Casemap :None   ; 不区分大小写(对API与API常数无效)
;_____________________________________________________________
Include windows.inc
Include user32.inc
Include kernel32.inc

IncludeLib user32.lib
IncludeLib kernel32.lib
.CODE
START:
  push 0
  push 0
  push offset Welcome
  push 0
  jz @F
  jnz @F
  Welcome db "Welcome",0   
@@:
  mov eax,[MessageBox+4]
  sub eax,4
  jnz @F
    Welcome1 db "Welcome",0   
@@:
  call eax
  invoke ExitProcess,0
  END START
  再看看反汇编的代码,更加!@$$%#!@#$。
  顺便说一句,上面的"完整API花指令示例"对付SoftICE一样有效,虽然SoftICE能用MessageBoxA中断上面的程序,但是,它反汇编出来的代码一样是惨不忍睹,

  不过,程序中也不要过份使用花指令啦,一般只有在关键的代码才使用这些,如果您整个程序都使用花指令,不但会让破解者恼火,也会让你自己恼火的--这么多$%@$!@##@#的代码,您怎么维护啊。哈...

时间: 2024-10-02 15:58:16

MASM的反反汇编技术的相关文章

《编译与反编译技术实战》——导读

前 言 "编译技术"是从事软件开发和信息安全相关工作的技术人员必须掌握的基础性技术,也是高等院校计算机科学与技术和软件专业的一门必修专业课,这是理论与实践结合非常强的领域,对提升开发人员的技术水平和大学生科学思维的养成.解决实际问题能力具有重要作用."反编译技术"则是近几年发展起来的新兴技术,许多计算机软件或信息安全从业者非常关心该技术的发展,但目前这方面的书籍较少,与"编译技术"结合起来讲解的书也很少,从实践角度来剖析的更是少见.本书就是在这种

《编译与反编译技术》——第一章 引论 1.1节编译器与解释器

人类之间的交流是通过语言进行的,但语言不是唯一的,不同的语言之间需要翻译,这就导致了翻译行业的建立.人与计算机之间也是通过语言进行交流的,但人类能理解的语言与机器能理解的语言是不同的,也需要翻译,这就导致了系列编译器的诞生.编译技术所讨论的问题,就是如何把符合人类思维方式的意愿(源程序)翻译成计算机能够理解和执行的形式(目标程序).实现从源程序到目标程序转换的程序,称为编译程序或编译器.反编译技术所讨论的问题,就是如何把计算机能够理解和执行的形式(目标程序)翻译成便于人类理解的形式(高级语言源程

《编译与反编译技术实战 》一 第2章 编译器实践概述

第2章 编译器实践概述 人与计算机之间的交流也是通过语言进行的,但人类能理解的语言与机器可以理解的语言是不同的,中间需要翻译,因此,相应的编译器诞生了.编译技术所讨论的问题就是如何把符合人类思维方式的意愿(即源程序)翻译成计算机能够理解和执行的形式(即目标程序),而实现从源程序到目标程序转换的程序被称为编译程序或编译器.最早的编译器是20世纪50年代后期的Fortran编译器,该编译器也为后续高级语言和编译器的涌现奠定了基础.与编译技术相反,反编译技术所讨论的问题就是如何把计算机能够理解和执行的

《编译与反编译技术实战》——第2章 编译器实践概述 2.1 编译器、解释器及其工作方式

第2章 编译器实践概述 人与计算机之间的交流也是通过语言进行的,但人类能理解的语言与机器可以理解的语言是不同的,中间需要翻译,因此,相应的编译器诞生了.编译技术所讨论的问题就是如何把符合人类思维方式的意愿(即源程序)翻译成计算机能够理解和执行的形式(即目标程序),而实现从源程序到目标程序转换的程序被称为编译程序或编译器.最早的编译器是20世纪50年代后期的Fortran编译器,该编译器也为后续高级语言和编译器的涌现奠定了基础.与编译技术相反,反编译技术所讨论的问题就是如何把计算机能够理解和执行的

《编译与反编译技术实战 》一导读

前 言 "编译技术"是从事软件开发和信息安全相关工作的技术人员必须掌握的基础性技术,也是高等院校计算机科学与技术和软件专业的一门必修专业课,这是理论与实践结合非常强的领域,对提升开发人员的技术水平和大学生科学思维的养成.解决实际问题能力具有重要作用."反编译技术"则是近几年发展起来的新兴技术,许多计算机软件或信息安全从业者非常关心该技术的发展,但目前这方面的书籍较少,与"编译技术"结合起来讲解的书也很少,从实践角度来剖析的更是少见.本书就是在这种

[收藏]数据库设计中的反规范技术探讨

规范|设计|数据|数据库|数据库设计   数据库设计中的反规范技术探讨   注:这是很久以前在一个论坛看到的文章,觉得写的不错:本着与众多业内人士交流.传播思想的目的展示在此,原论坛的名称已经不记得了,当时亦是转载.你可以任意转载此文,但由此引起的任何道德.法律纠纷与http:blog.csdn.net/aceplus无关,且http:blog.csdn.net/aceplus保证没有将此文用作任何商业和非法用途:如果您是本文的原作者,认为http:blog.csdn.net/aceplus转载

《编译与反编译技术》—第2章2.1节词法分析器的需求分析

本节书摘来自华章出版社<编译与反编译技术>一书中的第2章,第2.1节词法分析器的需求分析,作者庞建民,陶红伟,刘晓楠,岳峰,更多章节内容可以访问"华章计算机"公众号查看. 第2章 词法分析的理论与实践 词法分析是编译过程的第一步,也是编译过程必不可少的步骤.编译过程中执行词法分析的程序称为词法分析器.本章主要介绍词法分析器的手动构造和自动构造的原理. 2.1 词法分析器的需求分析 本节首先介绍词法分析器的功能及其输出的单词符号的表示方式,然后研究将词法分析独立出来的原因.

实例讲解如何绕过 Office 文档的反分析技术

本文讲的是实例讲解如何绕过 Office 文档的反分析技术,今天我们来试着分析一个使用Word文档的恶意VBA项目.该文档的作者对文件中的VBA项目进行了密码保护,以防止对恶意代码的检查,同时也使用了一些防止密码删除的技术.因此自动分析工具就基本不起作用了,但我们还是展示了如何跨越所有这些反分析障碍的技术,下面我们开始. 我们首先打开文档,然后就会接到一个钓鱼消息,声称该文档是使用早期版本的Microsoft Office创建的,想要查看内容的话我们必须启用宏.  当我们启用宏时,文档开始指向c

Windows8或强化反盗版技术微软正招募人才

4月1日消息,据国外媒体报道,微软正在招募反盗版技术方面的人才,旨在强化Windows 8和其他产品的反盗版能力. 近日,微软Windows部门开始招聘一名有经验的软件开发人员,其职责是:开发新的反入侵机制和黑客检测技术,以防止微软产品被黑客入侵和破解. 对于当前的Windows 7系统,如果用户使用的是盗版,桌面背景就会变成黑色,并定期提醒用户.此外,桌面上还有水印提醒. 2月份,微软还推出一款可选的补丁更新,用于修复Windows 7内置的激活技术,该补丁可将70多种破解方法打回原形. 作者