-
-
[旧帖]
[求助]"调出"MFC42.dll模块 是如何"调出"呢?怎么跟踪进去这个DLL
0.00雪花
-
发表于:
2008-10-29 21:21
4736
-
[旧帖] [求助]"调出"MFC42.dll模块 是如何"调出"呢?怎么跟踪进去这个DLL
0.00雪花
原学习帖:http://www.debugman.com/simple/index.php?t843.html
附上部分内容
PumpMessage函数反汇编代码:
73D31194 > 56 PUSH ESI
...
73D311A1 FF15 B0B6DC73 CALL DWORD PTR DS:[<&USER32.GetMessageA>]
73D311A7 85C0 TEST EAX,EAX
73D311A9 74 26 JE SHORT MFC42.73D311D1 ;收到WM_QUIT,退出程序
73D311AB 817E 38 6A030000 CMP DWORD PTR DS:[ESI+38],36A
73D311B2 74 1A JE SHORT MFC42.73D311CE
73D311B4 8B06 MOV EAX,DWORD PTR DS:[ESI]
73D311B6 57 PUSH EDI
73D311B7 8BCE MOV ECX,ESI
73D311B9 FF50 60 CALL DWORD PTR DS:[EAX+60] ; PreTranslateMessage (消息预处理)
73D311BC 85C0 TEST EAX,EAX
73D311BE 75 0E JNZ SHORT MFC42.73D311CE
73D311C0 57 PUSH EDI ;消息预处理返回FALSE
73D311C1 FF15 ACB6DC73 CALL DWORD PTR DS:[<&USER32.TranslateMessage>]
73D311C7 57 PUSH EDI
73D311C8 FF15 30B6DC73 CALL DWORD PTR DS:[<&USER32.DispatchMessageA>]
;
73D311CE 6A 01 PUSH 1 ;返回TRUE
73D311D0 58 POP EAX
73D311D1 5F POP EDI
73D311D2 5E POP ESI
73D311D3 C3 RETN
提示:
a. OD加载程序后,调出MFC42.dll模块,定位到PumpMessage代码入口处
b. 在CALL DWORD PTR DS:[EAX+60]这一条语句上设置条件断点[[esp]+4]==202,即可设置鼠标左键释放断点。
说明:call [eax+60]是调用PreTranslateMessage函数,入口参数为:MSG* pMsg,所以:
[esp]就是pMsg,而[[esp]]就是pMsg->hWnd , [[esp]+4]就是pMsg->Message
c. [[esp]]==002407B4 && [[esp]+4]==202 可以为指定按钮设置点击断点。这里002407B4是目标按钮的句柄.
。"调出"MFC42.dll模块 是如何"调出"呢?怎么跟踪进去这个DLL
[课程]Android-CTF解题方法汇总!