3种常用的方法 :修改程序的资源,静态分析以及动态分析、使用资源修改工具去除警告窗口。
显示窗口的常用函数有MessageBoxA(W)、MessageBoxExA(W)、DialogBoxParamA(W)、ShowWindow、CreateWindowExA等等。
可以尝试利用消息设置断点进行拦截。、
看到这个neg窗口是用DialogBox函数来显示的
0040104D /$ 8B4424 04 mov eax,dword ptr ss:[esp+0x4]
00401051 |. 6A 00 push 0x0 ; /lParam = NULL
00401053 |. 68 C4104000 push Nag.004010C4 ; |DlgProc = Nag.004010C4
00401058 |. 6A 00 push 0x0 ; |hOwner = NULL
0040105A |. 6A 79 push 0x79 ; |pTemplate = 0x79
0040105C |. 50 push eax ; |hInst = C3338846
0040105D |. A3 9C114000 mov dword ptr ds:[0x40119C],eax ; |
00401062 |. FF15 10104000 call dword ptr ds:[<&USER32.DialogBoxPar>; \DialogBoxParamA
00401068 |. 33C0 xor eax,eax
0040106A \. C2 1000 retn 0x10
neg窗口的反汇编代码
0x79=121
DialogBoxPraram函数一般和EndDialog函数配对使用,前者用于打开对话框,后者关闭对话框。
参数:
hlnstance:标识一个模块的实例,该模块的可执行文件含有对话框模板。
IpTemplateName:标识对话框模板。此参数可以指向一个以NULL结尾的字符串的指针,该字符串指定对话框模扳名,或是指定对话框模板的资源标识符的一个整型值。如果此参数指定了一个资源标识符,则它的高位字一定为零,且低位字一定含有标识符。一定用MAKEINTRESOURCE宏指令创建此值。
hWndParent:指定拥有对话框的窗口。
IpDialogFunc:指向对话框过程的指针。有关更详细的关于对话框过程的信息,请参见DialogProc。
dwInitParam:指定传递到对话框过程中的 WM_INITDIALOG 消息 IParam 参数的值。
上面代码的DialogProc为40100C4
004010C4 . 8B4424 08 mov eax,dword ptr ss:[esp+0x8] ; kernel32.BaseThreadInitThunk
004010C8 . 2D 10010000 sub eax,0x110 ; Switch (cases 110..111)
004010CD . 74 34 je short Nag.00401103
004010CF . 48 dec eax
004010D0 . 75 2D jnz short Nag.004010FF
004010D2 . 8B4424 0C mov eax,dword ptr ss:[esp+0xC] ; Case 111 of switch 004010C8
004010D6 . 48 dec eax
004010D7 . 75 26 jnz short Nag.004010FF
004010D9 . 6A 00 push 0x0 ; /Result = 0x0
004010DB . FF7424 08 push dword ptr ss:[esp+0x8] ; |hWnd = 74558460
004010DF . FF15 18104000 call dword ptr ds:[<&USER32.EndDialog>] ; \EndDialog
004010E5 . 6A 00 push 0x0 ; /lParam = NULL
004010E7 . 68 09114000 push Nag.00401109 ; |DlgProc = Nag.00401109
004010EC . 6A 00 push 0x0 ; |hOwner = NULL
004010EE . 6A 65 push 0x65 ; |pTemplate = 0x65
004010F0 . 6A 00 push 0x0 ; |/pModule = NULL
004010F2 . FF15 00104000 call dword ptr ds:[<&KERNEL32.GetModuleHandleA>] ; |\GetModuleHandleA
004010F8 . 50 push eax ; |hInst = C3338846
004010F9 . FF15 10104000 call dword ptr ds:[<&USER32.DialogBoxParamA>] ; \DialogBoxParamA
可见4010DF为EndDialog 设法从开头跳转到4010DF可关闭对话框
小总结:DialogBoxPraram函数一般和EndDialog函数配对使用,前者用于打开对话框,后者关闭对话框。