无法使用 ollydbg 中断 TLS 回调函数

逆向工程 艾达 ollydbg 反编译 恶意软件
2021-07-01 21:42:51

在尝试调试具有 TLS 回调功能的二进制文件时,我没有得到任何结果。我在 ollydbg 事件选项中设置了“系统入口断点”。达到系统断点时二进制中断。但我正在查看 Ntdll 导入的调用。 dll

我附上一张参考截图,ollydbg 图片 我已经通过 IDA PRO 获得了 TLS 部分,并且获得了 400000 范围内的地址,但是在查看 olly 时,我可以看到从 7 开始的地址。检查图片 IDA pro TLS 回调提示以下是 olly 启动时的示例程序集

77420542    8975 FC         MOV DWORD PTR [EBP-4],ESI
77420545    EB 0E           JMP SHORT ntdll.77420555
77420547    33C0            XOR EAX,EAX
77420549    40              INC EAX
7742054A    C3              RET
7742054B    8B65 E8         MOV ESP,DWORD PTR [EBP-18]
7742054E    C745 FC FEFFFFF>MOV DWORD PTR [EBP-4],-2
77420555    E8 DF22FBFF     CALL ntdll.773D2839
7742055A    C3              RET
7742055B    90              NOP
7742055C    90              NOP
7742055D    90              NOP
7742055E    90              NOP
7742055F    90              NOP
77420560    8BFF            MOV EDI,EDI
77420562    55              PUSH EBP
77420563    8BEC            MOV EBP,ESP
77420565    83EC 10         SUB ESP,10
77420568    803D EC02FE7F 0>CMP BYTE PTR [7FFE02EC],0
7742056F    74 11           JE SHORT ntdll.77420582
77420571    8B45 0C         MOV EAX,DWORD PTR [EBP+C]
77420574    8160 68 FFFEFFF>AND DWORD PTR [EAX+68],FDFFFEFF

如果有人可以提供帮助,那就太好了

2个回答


如果您使用的是 xp-sp3,您需要停止这些功能之一,然后在最新的操作系统中单步执行,您可以切换 peb->NtGlobalFlag 以显示加载程序捕捉
spew 上的 DebugPrint 消息之一是 Tls 回调的入口点

(查看 odbg110 的旧 Ntglobalflag 插件以了解 tls 的工作原理以及插件如何捕获回调

以下调用堆栈来自 win7,在其中一个中断,您应该很高兴

Call stack of main thread
Stack     Data      Procedure
0012FA20  7761D8F1  /ntdll.LdrpCallInitRoutine
0012FA24  00402000  |  Arg1 = mytls.<TLS_Callback_1>
0012FA28  00400000  |  Arg2 = mytls.400000
0012FA2C  00000001  |  Arg3 = 1
0012FA30  00000000  \  Arg4 = 0
0012FA64  775B166B  /ntdll.LdrpCallTlsInitializers
0012FA68  00000001  |  Arg1 = 1
0012FA6C  006020F0  \  Arg2 = 6020F0
0012FB50  77606175  /ntdll.LdrpRunInitializeRoutines
0012FB54  0012FD24  \  Arg1 = 12FD24
0012FCB4  77606077  /ntdll.LdrpInitializeProcess
0012FCB8  0012FD24  |  Arg1 = 12FD24
0012FCBC  775A0000  \  Arg2 = ntdll.<STRUCT IMAGE_DOS_HEADER>
0012FD04  77603663  /ntdll.LdrpInitialize
0012FD08  0012FD24  |  Arg1 = 12FD24
0012FD0C  775A0000  \  Arg2 = ntdll.<STRUCT IMAGE_DOS_HEADER>

我不记得了,但如果有一个,请查看 ollydbg 2.01 日志窗口 tls callback iirc it showed where it was in ollydbg 2.01

看来您在屏幕截图中使用的是 ollydbg 1.01(odbg2.01 可以选择在 tls 回调上设置断点

我花了一些时间通过每次调用得到了答案。我得到了 400000 范围内的 TLS 回调地址的地址。基本上该文件正在使用重定位,这就是为什么它在 0012FA20 显示地址。使用 CFF explorer 删除 Relocatable 选项。我们可以达到 TLS 回调地址。也可以通过命令查看

ollydbg. 中的ALT+M以便我们可以看到 PE 部分映射到的内存地址。谢谢大家