既然别人破过了,那我就要和别人不一样。
OD载入,运行,输入假码。
点击“查看”----“窗口”
找到check按钮,右键,“在classproc上设置消息断点”
选择202
确定,找到程序,点击check按钮。
这时候停在系统领空。点击“查看”-“内存”,在text上F2下断,F9运行。
这时候来到程序的消息处理函数位置,但不一定立刻就处理按钮消息。
我们往下看找到好几个GetDlgItemXXX之类的函数,这就是处理按钮的了。
1 00401218 . /0F87 6F010000 ja 0040138D 2 0040121E . |6A 00 push 0 ; /IsSigned = FALSE 3 00401220 . |6A 00 push 0 ; |pSuccess = NULL 4 00401222 . |68 FA030000 push 3FA ; |ControlID = 3FA (1018.) 5 00401227 . |56 push esi ; |hWnd 6 00401228 . |FFD7 call edi ; \GetDlgItemInt 7 0040122A . |85C0 test eax, eax
直接在test eax,eax上F4。
通过测试我们就可以找到关键跳。
1 00401254 . 8B3D D4604000 mov edi, dword ptr [<&USER32.GetDlgI>; USER32.GetDlgItem 2 0040125A . 83C4 18 add esp, 18 3 0040125D . 85C0 test eax, eax 4 0040125F . 74 6B je short 004012CC ; 关键跳
nop关键跳即可。