教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 高等教育 >

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

来源:网络收集 时间:2026-07-27
导读: VC+高级技术文章 32位汇编学习的一点心得 以前一直用C/C++写程序;最近突然抽起了一条筋,祭出Win32ASM,想试试在汇编代码级别写32位程序的滋味,也因此明白了不少以前一直没彻底弄懂的东西。 先说说堆栈的使用。以前一直以为堆栈就是push、pop两个很基本的

VC+高级技术文章

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出栈

VC+高级技术文章

ret

很好,看到这里,相信你已经明白了堆栈的使用方法。我忽然又想起了平时用SoftICE来crack一些软件的时候经常看到的东西:

push 00001111

push 00002222

call lstrcmp

test eax, eax

jne 00003333

......

以前我一直弄不明白前面那两个push是用来干吗的,于是只好跳过不看;现在我知道了它们是作为lstrcmp函数的两个参数后,直接打入d 00001111,哈哈,注册码就出来了!

掌握知识的感觉真棒,尤其是底层的知识!谁说电脑是冷冰冰的?

“知其然,亦须知其所以然。”

嗯,古人果然诚不我欺也。

“打字高手”5.31版的破解

最近脑袋突然抽筋,想学五笔打字(注:其实我的拼音也打得不错啊,用紫光拼音双拼输入法能达到100字/分钟呢)。于是从网上down了一个叫做“打字高 手——文录鉴定考核系统”5.31版的软件下来,用起来还不错,就是窗口标题栏上老是出现“文录鉴定考核系统 【未注册版本】”的字样,虽说不影响使用,但是看起来就是非常的不爽!

遇到这种情况,我等穷人首先想到的不是给作者寄钱(乖乖,要20大洋呢!!!),而是“自力更生,丰衣足食”,将它“变”成注册版本。(读者:这、这不是犯罪吗?)

好了,废话少说,开始工作!让我们祭出传说中的Cracker的先锋精锐武器——W32DASM黄金版(这个版本可以显示出中文字符串)!当当当当~~~反汇编中,我等啊等 脖子都长了,还没行???先去喝杯茶 呼~~~终于

VC+高级技术文章

OK了,好,让我们看看有什么好东西。

首先运行“打字高手”,在“帮助->软件注册”中输入:

输入个人或单位名称:laoluo

软件序列号:729051221(这个是软件自动生成的,不是我输入的)

输入注册码:123456789(为什么是9个数字?呵呵,等一会你就知道了)

按下“注册”按钮,立即弹出“注册码输入错误!请重新输入!”,很好,尾巴被我抓住了。

回到W32DASM,按下“string reference”按钮,找到“注册码输入错误!请重新输入!”的字样,双击它,来到这里:

* Referenced by a (U)nconditional or (C)onditional Jump at Address: |:006F2B3F(C)

|

:006F2B6F 64FF30 push dword ptr fs:[eax]

:006F2B72 648920 mov dword ptr fs:[eax], esp :006F2B75 8D55F0 lea edx, dword ptr [ebp-10]

:006F2B78 8B83E4020000 mov eax, dword ptr [ebx+000002E4] :006F2B7E E8593CF4FF call 006367DC

:006F2B83 8B45F0 mov eax, dword ptr [ebp-10] :006F2B86 E8DD15F1FF call 00604168

:006F2B8B 83F809 cmp eax, 00000009 <-对比输入的注册码,不等于9位数的话就game over了,所以前面要输入9位数的注册码。 :006F2B8E 741D je 006F2BAD

* Possible StringData Ref from Code Obj ->"注册码输入错误!请重新输入!"

|

:006F2B90 B8742E6F00 mov eax, 006F2E74

:006F2B95 E87EA1F6FF call 0065CD18

:006F2B9A 8B83E4020000 mov eax, dword ptr [ebx+000002E4] :006F2BA0 8B10 mov edx, dword ptr [eax]

:006F2BA2 FF92B0000000 call dword ptr [edx+000000B0] :006F2BA8 E96B020000 jmp 006F2E18

再次双击“注册码输入错误!请重新输入!”的字样,来到另外一个地方:

* Referenced by a (U)nconditional or (C)onditional Jump at Address: |:006F2D48(C)

|

VC+高级技术文章

* Possible StringData Ref from Code Obj ->"注册码输入错误!请重新输入!"

|

:006F2E00 B8742E6F00 mov eax, 006F2E74

:006F2E05 E80E9FF6FF call 0065CD18

:006F2E0A 8B83E4020000 mov eax, dword ptr [ebx+000002E4] :006F2E10 8B10 mov edx, dword ptr [eax]

:006F2E12 FF92B0000000 call dword ptr [edx+000000B0]

这里就是真正的对比注册码的地方了,看看上面入口处有个地址006F2D48,说明这里是由这个地址调用的,于是按下Shift+F12(location to),输入006F2D48,来到这里:

:006F2D43 E83015F1FF call 00604278

:006F2D48 0F85B2000000 jne 006F2E00 <-找到了,就是它!

看到这个jne 006F2E00了吗?就是它跳到了“注册码输入错误!请重新输入!”的地方,再看看上面有什么代码吧!

结果发现,一大堆call和jne、je、jmp 好恐怖!头都晕了,算了,懒得算出真正的注册码,直接用hiew暴力破解吧!

在 hiew里把jne 006F2E00改为je 006F2E00,存盘、退出,再次运行“打字高手”,随便输入一个什么注册码,哈哈,OK,显示“注册操作完成,重新启动本系统,如果个人或单位 …… 此处隐藏:15725字,全部文档内容请下载后查看。喜欢就下载吧 ……

VC+高级技术文章+2012-08-26.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1705592.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)