OllyDBG 入门系列(四)-内存断点
2010-09-30 16:54:11 来源:WEB开发网现在我们来按一下 ALT+F9 组合键,我们来到下面的代码:
00401431 |. 8D35 9C334000 LEA ESI,DWORD PTR DS:[40339C] ; ALT+F9返回后来到的位置
00401437 |. 0FB60D EC334000 MOVZX ECX,BYTE PTR DS:[4033EC]
0040143E |. 33FF XOR EDI,EDI
我们把反汇编窗口往上翻翻,呵,原来就在我们上一篇分析的代码下面啊?
现在我们在 0040140C 地址处那条指令上按 F2 设置一个断点,现在我们按 CTR+F2 组合键重新载入程序,载入后按 F9 键运行,我们将会中断在我们刚才在 0040140C 地址下的那个断点处:
0040140C /{$selection}nbsp;60 PUSHAD
0040140D |. 6A 00 PUSH 0 ; /RootPathName = NULL
0040140F |. E8 B4000000 CALL <JMP.&KERNEL32.GetDriveTypeA> ; \GetDriveTypeA
00401414 |. A2 EC334000 MOV BYTE PTR DS:[4033EC],AL ; 磁盘类型参数送内存地址4033EC
00401419 |. 6A 00 PUSH 0 ; /pFileSystemNameSize = NULL
0040141B |. 6A 00 PUSH 0 ; |pFileSystemNameBuffer = NULL
0040141D |. 6A 00 PUSH 0 ; |pFileSystemFlags = NULL
0040141F |. 6A 00 PUSH 0 ; |pMaxFilenameLength = NULL
00401421 |. 6A 00 PUSH 0 ; |pVolumeSerialNumber = NULL
00401423 |. 6A 0B PUSH 0B ; |MaxVolumeNameSize = B (11.)
00401425 |. 68 9C334000 PUSH CrackHea.0040339C ; |VolumeNameBuffer = CrackHea.0040339C
0040142A |. 6A 00 PUSH 0 ; |RootPathName = NULL
0040142C |. E8 A3000000 CALL <JMP.&KERNEL32.GetVolumeInformationA> ; \GetVolumeInformationA
00401431 |. 8D35 9C334000 LEA ESI,DWORD PTR DS:[40339C] ; 把crackme程序所在分区的卷标名称送到ESI
00401437 |. 0FB60D EC334000 MOVZX ECX,BYTE PTR DS:[4033EC] ; 磁盘类型参数送ECX
0040143E |. 33FF XOR EDI,EDI ; 把EDI清零
00401440 |> 8BC1 MOV EAX,ECX ; 磁盘类型参数送EAX
00401442 |. 8B1E MOV EBX,DWORD PTR DS:[ESI] ; 把卷标名作为数值送到 EBX
00401444 |. F7E3 MUL EBX ; 循环递减取磁盘类型参数值与卷标名值相乘
00401446 |. 03F8 ADD EDI,EAX ; 每次计算结果再加上上次计算结果保存在EDI中
00401448 |. 49 DEC ECX ; 把磁盘类型参数作为循环次数,依次递减
00401449 |. 83F9 00 CMP ECX,0 ; 判断是否计算完
0040144C |.^ 75 F2 JNZ SHORT CrackHea.00401440 ; 没完继续
0040144E |. 893D 9C334000 MOV DWORD PTR DS:[40339C],EDI ; 把计算后值送到内存地址40339C,这就是我们后来在ESI中看到的值
00401454 |. 61 POPAD
00401455 \. C3 RETN
编缉推荐阅读以下文章
- OllyDBG 入门系列(五)-消息断点及 RUN 跟踪
- OllyDBG 入门系列(三)-函数参考
- OllyDBG 入门系列(二)-字串参考
- OllyDBG 入门系列(一)-认识OllyDBG
更多精彩
赞助商链接