VC+高级技术文章+2012-08-26.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC+高级技术文章+2012-08-26.doc

32位汇编学习的一点心得 以前一直用C/C++写程序;最近突然抽起了一条筋,祭出Win32ASM,想试试在汇编代码级别写32位程序的滋味,也因此明白了不少以前一直没彻底弄懂的东西。 先说说堆栈的使用。以前一直以为堆栈就是push、pop两个很基本的操作,只是用来暂时储存数据用的,现在发现这种观念已经过时了,因为到了32位编程的时代,堆栈的主要用途已经变为API函数调用时的参数放置处,例如: push MB_OK push offset Caption push offset Text push NULL call MessageBoxA 有经验的C/C++程序员一眼就能看出,这是API函数MessageBox的调用方式,前面的那几个push就是用来把MessageBox的参数压入堆栈内,然后一个call就调用了MessageBox,上面的语句相当于C语言写的调用: MessageBox(NULL, Text, Caption, MB_OK); 这是符合win32标准standard调用约定的,即函数入口参数按从右到左的顺序入栈,并由被调用者清理栈中参数,返回值放在eax寄存器中。 win32的一千多个API函数都是符合这种standard调用约定的,但只有一个函数例外,那就是wsprintf,这个函数是C约定的,因此在win32汇编中,你得这样写: push????ebp???????????? ;ebp入栈 mov???? ebp, esp????????;因为esp是堆栈指针,无法暂借使用,所以得用ebp来存取堆栈 sub???? esp, 4*5????????;下面的wsprintf一共使用了5个参数,每个参数占用4个字节,所以要入栈4*5个字节 push????1111 push????2222 push????3333 push????offset szFormat push????offset szOut call????wsprintf????????;调用wsprintf add???? esp, 4*5????????;堆栈使用完毕,“还”回4*5个字节给系统 ... mov???? esp, ebp????????;恢复esp的值 pop???? ebp???????????? ;ebp出栈 ret 很好,看到这里,相信你已经明白了堆栈的使用方法。我忽然又想起了平时用SoftICE来crack一些软件的时候经常看到的东西: push???push???call????lstrcmp test????eax, eax jne???? 以前我一直弄不明白前面那两个push是用来干吗的,于是只好跳过不看;现在我知道了它们是作为lstrcmp函数的两个参数后,直接打入d哈哈,注册码就出来了! 掌握知识的感觉真棒,尤其是底层的知识!谁说电脑是冷冰冰的? “知其然,亦须知其所以然。” 嗯,古人果然诚不我欺也。 “打字高手”5.31版的破解 最近脑袋突然抽筋,想学五笔打字(注:其实我的拼音也打得不错啊,用紫光拼音双拼输入法能达到100字/分钟呢)。于是从网上down了一个叫做“打字高 手——文录鉴定考核系统”5.31版的软件下来,用起来还不错,就是窗口标题栏上老是出现“文录鉴定考核系统 【未注册版本】”的字样,虽说不影响使用,但是看起来就是非常的不爽! 遇到这种情况,我等穷人首先想到的不是给作者寄钱(乖乖,要20大洋呢!!!),而是“自力更生,丰衣足食”,将它“变”成注册版本。(读者:这、这不是犯罪吗?) 好了,废话少说,开始工作!让我们祭出传说中的Cracker的先锋精锐武器——W32DASM黄金版(这个版本可以显示出中文字符串)!当当当当~~~反汇编中,我等啊等……脖子都长了,还没行???先去喝杯茶……呼~~~终于OK了,好,让我们看看有什么好东西。 首先运行“打字高手”,在“帮助-软件注册”中输入: 输入个人或单位名称:laoluo 软件序列号:729051221(这个是软件自动生成的,不是我输入的) 输入注册码:123456789(为什么是9个数字?呵呵,等一会你就知道了) 按下“注册”按钮,立即弹出“注册码输入错误!请重新输入!”,很好,尾巴被我抓住了。 回到W32DASM,按下“string reference”按钮,找到“注册码输入错误!请重新输入!”的字样,双击它,来到这里: * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:006F2B3F(C) | :006F2B6F 64FF30?????

文档评论(0)

dreamzhangning + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档