




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、masm的反反汇编技术 由于汇编语言是与机器语言机器码一一对应的,所以程序的代码非常简洁,编译、链接程序不会在其中加入任何其它代码,所以,用win32dasm等把汇编工具反汇编汇编语言写的程序,其列出的汇编代码几乎与编写的顺序、过程、代码一模一样,这也是汇编语言简洁的证据。 但是这种过于简洁的代码却给了破解者提供了方便,破解者只需要有一定的windows sdk编程与汇编的经验,破解就非常简单,根本不需要用softice这些动态工具就可以破解。于是,相应的防止跟踪的技术就出来了,比如花指令、不按规则调用api等等,今天就花指令和大家研究研究。 花指令,其实就是在程序中加入一些字节来干扰静态工具
2、反汇编,毕竟汇编工具没有人的思维,所以这招非常好骗。 打开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 invok
3、e exitprocess,0 end start 保存,ctrl + 1编译。 用win32dasm打开编译后的文件,可以在其菜单命令函数-输入中看到我们使用了的messagebox与exitprocess名字,在菜单命令参考-字符串中看到我们定义的字符串welcome的值,假如您的程序这段代码要做的是在用户输入错误的注册码后报错,那么,破解者只需要找到对话框显示的字符串使用的地址,然后向上查找跳到此地址的跳转指令,更改指令就能轻易破解,我们要做的,就是把字符串隐藏起来,不让破解者轻易找到它的地址,如下: ;先关闭win32dasm(以下同). . . lea eax,welcome inv
4、oke messagebox,0,eax,0,0 . . 也就是说,我们并没有使用花指令,而是在使用字符串时先把字符串的地址传给eax,然后再把eax做为参数传给messagebox,这样做,win23dasm这些反汇编工具就无法识别了,好,用win32dasm重新打开编译的文件,在参考菜单中,字符串这一项灰色显示,提示这个程序没有字符串,骗过它了!_ 还有就是使用花指令,花指令不但可以使反汇编工具无法识别出字符串,更会让它们把汇编出错误的代码,花指令一般都是使用一些无用的字节来进行干扰,但是干扰反汇编的字节仍是可以使用的,像这样子: . . jz f jnz f www db 欢迎来到汇编世
5、界,0 : lea eax,www lea ebx,welcome invoke messagebox,0,eax,ebx,0 invoke exitprocess,0 . . 编译后再用win32dasm打开exe,发现不但字符串这一项灰色显示,反汇编出来的代码变得面目全非,现在的程序只有很少的代码,如果代码一多,破解者不晕才怪,不过这样只会把一些初级破解者难倒,有经验的破解者根据jz与jnz的跳转是否指向不存在的地址而知道使用了花指令,还可以根据messagebox的使用地址来进行分析,我们现在要做的就是使用手工调用api加花指令来骗反汇编工具,如下: . . lea eax,welcom
6、e 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花指令示例:;
7、=.386.model flat, stdcalloption casemap :none ; 不区分大小写(对api与api常数无效);_include windows.incinclude user32.incinclude kernel32.incincludelib user32.libincludelib kernel32.lib.codestart: 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中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论