
时间:2014-09-10 00:28:39 阅读:413 评论:0 收藏:0 [点我收藏+]
标签:ollydbg 调试 扫雷
闲着没事,使用OD调试下扫雷程序,看了郁金香大牛的视频,OD载入扫雷程序,F9运行,查看——窗口(刷新),就可以看到主窗口地址,不知道什么原因,本机OD显示的地址是FFXXXXXXX地址,很明显不对,换了好几个系统也不正常。无奈,只好自己跟下。
一、OD打开扫雷程序,程序停在模块入口点出
bubuko.com,布布扣
二、ctrl + g 在 RegisterClassW函数出下断点
bubuko.com,布布扣
然后 F9运行,停在此处,然后 ctrl + F9 跳出此函数
bubuko.com,布布扣
在pWndClass出下断点(此处是窗口注册类,下上断点看窗口注册类的地址),然后取消RegisterClassW的断点,重新运行,程序停在,pWndClass处
bubuko.com,布布扣
可知窗口注册类的地址为 7FED0 ,内存中查看窗口注册类内容。
由窗口注册类结构
typedef struct tagWNDCLASSW {
UINTstyle
WNDPROC lpfnWndProc
int cbClsExtra
int cbWndExtra
HINSTANCE hInstance
HICON hIcon
HCURSOR hCursor
HBRUSH hbrBackground
LPCWSTR lpszMenuName
LPCWSTR lpszClassName
} WNDCLASSW, *PWNDCLASSW, NEAR *NPWNDCLASSW, FAR *LPWNDCLASSW
可知,结构第二项,为回调函数的地址,从内存中可知,回调函数地址为01001bc9
0100367A /$ A1 AC560001 MOV EAX,DWORD PTR DS:[10056AC]0100367F |. 8B0D A8560001 MOV ECX,DWORD PTR DS:[10056A8]
01003685 |. 53PUSH EBX
01003686 |. 56PUSH ESI
01003687 |. 57PUSH EDI
01003688 |. 33FF XOR EDI,EDI
0100368A |. 3B05 34530001 CMP EAX,DWORD PTR DS:[1005334]
01003690 |. 893D 64510001 MOV DWORD PTR DS:[1005164],EDI
01003696 |. 75 0C JNZ SHORT winmine.010036A4
01003698 |. 3B0D 38530001 CMP ECX,DWORD PTR DS:[1005338]
0100369E |. 75 04 JNZ SHORT winmine.010036A4
010036A0 |. 6A 04 PUSH 4
010036A2 |. EB 02 JMP SHORT winmine.010036A6
010036A4 |> 6A 06 PUSH 6
010036A6 |> 5BPOP EBX
010036A7 |. A3 34530001 MOV DWORD PTR DS:[1005334],EAX
010036AC |. 890D 38530001 MOV DWORD PTR DS:[1005338],ECX
010036B2 |. E8 1EF8FFFF CALL winmine.01002ED5
010036B7 |. A1 A4560001 MOV EAX,DWORD PTR DS:[10056A4]
010036BC |. 893D 60510001 MOV DWORD PTR DS:[1005160],EDI
010036C2 |. A3 30530001 MOV DWORD PTR DS:[1005330],EAX
010036C7 |> FF35 34530001 PUSH DWORD PTR DS:[1005334]
010036CD |. E8 6E020000 CALL winmine.01003940; callwinmine!Rnd (01003940)随机产生x
010036D2 |. FF35 38530001 PUSH DWORD PTR DS:[1005338]
010036D8 |. 8BF0 MOV ESI,EAX
010036DA |. 46INC ESI
010036DB |. E8 60020000 CALL winmine.01003940;callwinmine!Rnd (01003940)随机产生y
010036E0 |. 40INC EAX
010036E1 |. 8BC8 MOV ECX,EAX
010036E3 |. C1E1 05 SHL ECX,5
010036E6 |. F68431 405300>TEST BYTE PTR DS:[ECX+ESI+1005340],80 测试是否布上雷(是否被设置)
010036EE |.^ 75 D7 JNZ SHORT winmine.010036C7
010036F0 |. C1E0 05 SHL EAX,5
010036F3 |. 8D8430 405300>LEA EAX,DWORD PTR DS:[EAX+ESI+1005340]
010036FA |. 8008 80 OR BYTE PTR DS:[EAX],80 设置地雷
010036FD |. FF0D 30530001 DEC DWORD PTR DS:[1005330]
01003703 |.^ 75 C2 JNZ SHORT winmine.010036C7
01003705 |. 8B0D 38530001 MOV ECX,DWORD PTR DS:[1005338]
0100370B |. 0FAF0D 345300>IMUL ECX,DWORD PTR DS:[1005334]
01003712 |. A1 A4560001 MOV EAX,DWORD PTR DS:[10056A4]
01003717 |. 2BC8 SUB ECX,EAX
01003719 |. 57PUSH EDI
0100371A |. 893D 9C570001 MOV DWORD PTR DS:[100579C],EDI
01003720 |. A3 30530001 MOV DWORD PTR DS:[1005330],EAX
01003725 |. A3 94510001 MOV DWORD PTR DS:[1005194],EAX
0100372A |. 893D A4570001 MOV DWORD PTR DS:[10057A4],EDI
01003730 |. 890D A0570001 MOV DWORD PTR DS:[10057A0],ECX
01003736 |. C705 00500001>MOV DWORD PTR DS:[1005000],1
01003740 |. E8 25FDFFFF CALL winmine.0100346A
01003745 |. 53PUSH EBX/Arg1
01003746 |. E8 05E2FFFF CALL winmine.01001950 \winmine.01001950
0100374B |. 5FPOP EDI
0100374C |. 5EPOP ESI
0100374D |. 5BPOP EBX
0100374E \. C3RETN
希望对你有帮助
VC6.0默认使用Multi-Byte Character Set,新的visual studio创建的工程默认使用unicode character set,所以所有的函数会使用unicode版本。你可以手动做成使用ansi版本,比如
GetEnvironmentVariable,函数就直接写成GetEnvironmentVariableA,
或者就把工程的设置改成使用MBCS
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)