我有一个应用程序,被 FSG 保护程序混淆。当我尝试解压缩它时,我遇到的第一个问题是,当我使用调试器/或稍后附加调试器启动进程时,我立即收到 ACCESS VIOLATION 异常,因为 Tls 回调被执行,具有以下内容:
.text:0063EE70 public TlsCallback_0
.text:0063EE70 TlsCallback_0: ; DATA XREF: .CRT:TlsCallbacks_0
.text:0063EE70 mov [esi-6Dh], ebx
.text:0063EE73 xlat byte ptr gs:[ebx]
.text:0063EE75 retf 155h
这怎么可能呢??tlscallback 中的寄存器是否默认指向某些部分/段?这里使用了 esi,但它有一些默认值,来自ntdll:ntdll_LdrShutdownThread+386
我附上了完整的堆栈跟踪,这是调用此回调的堆栈跟踪,当我在 ida pro+windbg 下运行应用程序时,tls 回调在入口点之前被命中。
esi 指向DATA应用程序内的某个段,这是默认的操作系统行为吗?此外,这里的 TLS 目录定义如下:
如您所见, TLS_end 和 TLS_start 指向镜像库。
所以我的问题是,这个回调如何在没有调试器的情况下不使程序崩溃?为什么当我附加调试器时会出现这种情况?这是某种我无法理解的反调试技术


