您的位置:逆风者 汇编技术 正文
原作者:www.upwinder.com 添加时间:2007-09-01 原文发表:2007-08-31 人气:50 来源:未知

本文章共1835字,分2页,当前第1页,快速翻页:
 

由于汇编语言是与机器语言机器码一一对应的,所以程序的代码非常简洁,编译、链接程序不会在其中加入任何其它代码,所以,用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
 

本文章更多内容1 - 2 - 下一页>>
相关文章

进一步学习对话框
驻留exe文件
如何建立汇编工作环境
汇编与C语言配合
动态链接库
masm中宏指令的bug
虚拟机管理器
DOS下的EXE格式文件
API参数说明符前缀详解
给程序加个图标
学习更多关于“绘制”文本串的知识
程式语言效率分析(1)
任务状态段和控制门
只能在保护模式下执行的指令
系统托盘中的快捷图标
DEBUG命令详解
仿FDISK及PQMAGIC列出分区逻辑盘符的prw.as
保护方式简介
实模式和任何特权级下可执行的指令

相关评论


本文章所属分类:首页 汇编技术

  热门关键字:
进制数据输出的通用程序 2007-09-12
汇编源码--showmem 2007-08-31
汇编源码--CLEAN 2007-08-31
汇编源码--hdr 2007-08-31
汇编源码--basload 2007-08-31
汇编源码--CHAR 2007-08-31
汇编源码--fxn 2007-08-31
汇编源码--alarm 2007-08-31
汇编源码--getsect 2007-08-31
汇编源码--DEV 2007-08-31
汇编源码--getspace 2007-08-31
汇编源码--frespace 2007-08-31
CIH文件型病毒检测消除程序 2007-08-31
Mixer Volume Ctrler V1.0 2007-08-31
汇编源码--COMINT 2007-08-31
自己用汇编语言写的一个病毒(源码... 2007-08-31
汇编源码--col 2007-08-31
汇编源码--BURNOUT 2007-08-31