注册

CpuDbg x96

查看: 1292|回复: 0
收起左侧

[OllyDbg] SHIFT+F4条件断点变成内存不可恢复INT3断点

[复制链接]
发表于 2022-4-1 00:52:12 | 显示全部楼层 |阅读模式
SHIFT+F4条件断点变成内存不可恢复INT3断点

发现环境:
win10
od1.x
调试目标:
yzdbg32

复现过程:
od 载入 yzdbg go到 SymFromAddrW 下条件断点. 中断触发 "run" 指令. 如下图:

1.png

下好断点后, 切换到内存窗口, 对 dbghelp 的 .text 段下F2断点.
完事后,运行, 中断, 就能看到如下效果:

2.png

可以看到 02530AF2 IP处 指令已经变成INT3了. od1.x应该"隐形" 操作的INT3断点, 变成肉眼可见的真实INT3了.
大胆猜测一下, 这个INT3断点, 应该没有在od1.x自身维护的断点列表中.
来测试一下.
我们接着按F9运行, 程序就结束了. 因为遇到INT3 无人处理. 说明我们猜对了, INT3 断点是真实的, 并不在od的断点列表中.


作者应该是在处理中断事件中, 内存断点时忘了先恢复INT3断点了.
我在写反汇编窗口数据时,也犯过类似的错.  比如下面代码:
[Asm] 纯文本查看 复制代码
0040113E >  6A 00           PUSH 0x0
00401140    E8 2D000000     CALL <JMP.&KERNEL32.GetModuleHandleA>
00401145    A3 E8314000     MOV DWORD PTR [0x4031E8],EAX
0040114A    E8 47000000     CALL <JMP.&comctl32.InitCommonControls>
0040114F    6A 00           PUSH 0x0
00401151    68 C8104000     PUSH CrackM2.004010C8
00401156    6A 00           PUSH 0x0
00401158    6A 65           PUSH 0x65
0040115A    FF35 E8314000   PUSH DWORD PTR [0x4031E8]
00401160    E8 13000000     CALL <JMP.&user32.DialogBoxParamA>
00401165    6A 00           PUSH 0x0
00401167    E8 00000000     CALL <JMP.&KERNEL32.ExitProcess>
0040116C  - FF25 04204000   JMP DWORD PTR [<&KERNEL32.ExitProcess>]             ; KERNEL32.ExitProcess
00401172  - FF25 00204000   JMP DWORD PTR [<&KERNEL32.GetModuleHandleA>]        ; KERNEL32.GetModuleHandleA
00401178  - FF25 24204000   JMP DWORD PTR [<&user32.DialogBoxParamA>]           ; user32.DialogBoxParamA
0040117E  - FF25 20204000   JMP DWORD PTR [<&user32.EndDialog>]                 ; user32.EndDialog
00401184  - FF25 1C204000   JMP DWORD PTR [<&user32.GetDlgItem>]                ; user32.GetDlgItem
0040118A  - FF25 28204000   JMP DWORD PTR [<&user32.GetWindowTextA>]            ; user32.GetWindowTextA
00401190  - FF25 2C204000   JMP DWORD PTR [<&user32.MessageBoxA>]               ; user32.MessageBoxA
00401196  - FF25 0C204000   JMP DWORD PTR [<&comctl32.InitCommonControls>]      ; comctl32.InitCommonControls
0040119C    0000            ADD BYTE PTR [EAX],AL

如果此时, 在 00401172 地址,双击 下一个INT3断点, 那么按我之前写的,  在地址 00401140 处就不能显示后面的 GetModuleHandleA 函数.
因为判断目标地址是否是函数前, 要先恢复一下INT3断点, 否则肯定读不到INT3断点.就会导致判断是否是函数失败.

回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注册

QQ|Archiver|手机版| CpuDbg x96

GMT, 2024-5-18 13:35 , Processed in 0.078125 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表