我正在尝试删除一个唠叨的屏幕。其窗口样式为 16C80000,应转换为WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_CAPTION | WS_SYSMENU. 因此,在对 CreateWindowExW() 的调用中,我在 处设置了一个条件断点PUSH EAX,它决定了样式。
我尝试的条件是[EAX] == 16C80000和[EAX] == WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_CAPTION | WS_SYSMENU。两者都给出相同的结果。
发生的情况是条件断点几乎就像我认为的正常断点一样。我在 处获得断点Style = WS_POPUP,以及我没有指定的许多其他样式。我想要的是找出我做错了什么,以便我可以找到那个该死的唠叨的电话:)

OllyDBG 中带有条件断点的误报
逆向工程
ollydbg
断点
2021-07-03 17:44:07
1个回答
如果您在特定地址 0x412d18 上设置断点,则必须确保将命中特定地址(在特定地址上设置断点并期望它在 CreateWindowCalls 上中断是行不通的)
要设置一个公共断点来捕获所有 CreateWindow 调用,您应该在系统 dll (user32.dll) 上设置一个断点
你应该对条件中断使用堆栈表达式 [esp+XXX] == 0x16xxxxxx
这是关于 winxpsp3 mspaint.exe 的示例
Breakpoints
Address Module Active Disassembly Comment
7E42D0A3 USER32 Log when [esp+10] == 44008200 MOV EDI, EDI
bp 设置为
7E42D0A3 USER32.CreateWindowExW [esp+10] == 44008200 /$ 8BFF MOV EDI, EDI
从不暂停
中断条件
日志总是
条件 [esp+10] = xxxxxxxx
表达式 [esp+10]

结果如下
Log data
Message
COND: style = = 88000000
COND: style = = 02CFC000
COND: style = = 52000000
COND: style = = 54000000
COND: style = = 5400014E
COND: style = = 56002800
COND: style = = 56008200
COND: style = = 56001400
COND: style = = 56004100
COND: style = = 44001430
COND: style = = 44008200 <------- broken and function args logged for my specific condition
CALL to CreateWindowExW from MFC42u.5F811CB2
ExtStyle = 0
Class = "AfxWnd42u"
WindowName = "Colors"
Style = WS_CHILD|WS_CLIPSIBLINGS|8200 <------------
X = FFFFFEFD (-259.)
Y = FFFFFFCD (-51.)
Width = 103 (259.)
Height = 33 (51.)
hParent = 00080226 ('Paint',class='MSPaintApp')
hMenu = 0000E818
hInst = 01000000
lParam = NULL