*********************************************************
00401131 . 50 push eax ; /<%1X>
00401132 . 68 3E304000 push 0040303E ; |%1x
00401137 . 68 5C304000 push 0040305C ; |s = 例子.0040305C
0040113C . E8 7B000000 call <jmp.&USER32.wsprintfA> ; \wsprintfA
00401141 . 83C4 0C add esp, 0C
00401144 . 68 6C304000 push 0040306C ; /String2 = ""(假码)
00401149 . 68 5C304000 push 0040305C ; |String1 = ""(真码)
0040114E . E8 B7000000 call <jmp.&KERNEL32.lstrcmpA> ; 请看这里的 ESP 指针
00401153 . 85C0 test eax, eax
00401155 . 75 1D jnz short 00401174
00401157 . 6A 10 push 10 ; /BeepType = MB_ICONHAND
00401159 . E8 7C000000 call <jmp.&USER32.MessageBeep> ; \MessageBeep
0040115E . 6A 00 push 0 ; /Style = MB_OK|MB_APPLMODAL
00401160 . 68 00304000 push 00403000 ; |注册成功
00401165 . 68 09304000 push 00403009 ; |谢谢你的注册!
0040116A . FF75 08 push dword ptr [ebp+8] ; |hOwner
0040116D . E8 6E000000 call <jmp.&USER32.MessageBoxA> ; \MessageBoxA
00401172 . EB 0F jmp short 00401183
00401174 > 68 18304000 push 00403018 ; /输入的序列号不正确!
00401179 . 6A 68 push 68 ; |ControlID = 68 (104.)
0040117B . FF75 08 push dword ptr [ebp+8] ; |hWnd
0040117E . E8 69000000 call <jmp.&USER32.SetDlgItemTextA> ; \SetDlgItemTextA
00401183 > B8 00000000 mov eax, 0
00401188 . 5E pop esi
*************************************************************
很明显,00401149 地址出现真码,那我们就可以在它的下一个地址 0040114E 处做内存注册机,请注意,这个地址的 ESP 指针指向的地址内容就是 真码!
按我图所示“添加”中断地址,“注册码方式”是 内存方式 ESP 指针所指的内容!