[原创]逆向让生活更美好之调用 MessageBox引发的异常
发表于:
2014-2-13 21:31
5295
[原创]逆向让生活更美好之调用 MessageBox引发的异常
问题简述:
在调试一个小程序,在测试时发现,点“帮助”信息的“关于”,程序异常退出,由于物理机为WIN8 X64环境,没有看到任何异常信息。
把文件复制到虚拟机XP系统下,再次编译运行,点“关于”时,轰然一声弹出如下熟悉的面孔(
上图难,请见谅)
0x77d28944指令引用“0x0000006d”地址内存,该内存为能为“read”
还是那句话,上调试器,等下,先IDA看看,这段代码偏奇怪
cmp eax, 271Dh
.text:0040135F jnz short loc_401394
.text:00401361 push 0
.text:00401363 push 0
.text:00401365 mov al, byte ptr Caption ; "myedit"
.text:0040136A movzx ax, al
.text:0040136E push ax ; lpCaption
.text:00401370 push offset aRN ; "我的文本编辑?
.text:00401375 push [ebp+hWnd] ; hWnd
.text:00401378 call MessageBoxA
.text:0040137D jmp short loc_401394
MessageBox可不是这么玩的,反汇编处理的MessageBox需要4个push,1个call
push xx
push xx
push xx
push xx
call MessageBox
这下真上调试器,在MessageBox上下断点,栈区看见如下字样:
hOwner = 04000000
Text = "我的文本编辑器"
Title = "0000006d"
style = MB_OK|MB_APPLMODAL
LANGUAGE ID = 0 (LANG_NEUTRAL)
Title处竟然是地址,这下大概明白问题所在了,应该是在调用MessageBox时,参数的问题。
用win32asm写一段代码来测试下
.386
.model flat,stdcall
option casemap:none
;include
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
;数据段
.data
szcaption db "demo",0
szText db "HelloWorld",0
.data?
.const
;代码段
.code
start:
invoke MessageBox,NULL,offset szText,
offset szcaption,MB_OK
invoke ExitProcess,NULL
end start
问题出在
offset 上 ,把offset去掉再进行编译,链接,在radasm开发工具里并不会报错,反汇编出来的代码就是上面那段,纠正后用IDA查看正确的是下面的模样:
.text:00401356 push 0
.text:00401358 push offset Caption
.text:0040135D push offset aRN
.text:00401362 push [ebp+hWnd]
.text:00401365 call MessageBoxA
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!