OllyDBG 中带有条件断点的误报

逆向工程 ollydbg 断点
2021-07-03 17:44:07

我正在尝试删除一个唠叨的屏幕。其窗口样式为 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,以及我没有指定的许多其他样式。我想要的是找出我做错了什么,以便我可以找到那个该死的唠叨的电话:)
截屏

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