我一直在尝试使用Windbg
. 为了回顾我采取的步骤,我为 shellcode 分配了一个缓冲区,.foreach /pS 5 ( register { .dvalloc 400 } ) { r @$t0 = register }
并将地址保存在伪寄存器中$t0
。后来我用eb @$t0 FC 48 83 E4...[REDACTED]
. 然后rip
通过执行将值更改为指向 shellcode 缓冲区的起始地址,r @$ip=@$t0
然后简单地使用g
.
问题是 shellcodewininet!HttpSendRequestA
每次都挂在API 调用上。
手动中断执行后的堆栈跟踪:
00 000000e0f0efea28 00007ffc24811e93 ntdll!NtWaitForSingleObject+0x14
01 000000e0f0efea30 00007ffc11ba4f64 KERNELBASE!WaitForSingleObjectEx+0x93
02 000000e0f0efead0 00007ffc11b9fba7 wininet!CPendingSyncCall::HandlePendingSync_AppHangIsAppBugForCallingWinInetSyncOnUIThread+0xe0
03 000000e0f0efeb00 00007ffc11b47af6 wininet!INTERNET_HANDLE_OBJECT::HandlePendingSync+0x33
04 000000e0f0efeb30 00007ffc11b023a5 wininet!HttpWrapSendRequest+0x9a256
05 000000e0f0efecd0 00007ffc11b02318 wininet!InternalHttpSendRequestA+0x5d
06 000000e0f0efed40 000002a7d873018c wininet!HttpSendRequestA+0x58
07 000000e0f0efede0 000002a7d87301f9 0x000002a7d873018c
08 000000e0f0efede8 000002a7d873000a 0x000002a7d87301f9
09 000000e0f0efedf0 0000000000cc000c 0x000002a7d873000a
注意:奇怪的部分是,每当我在 windbg 插件中调试 shellcode 时,它实际上都能正常工作IDA PRO 7.5
(我在插件控制台中所做的一切都与在 windbg 二进制控制台中所做的完全相同)。
至于shellcode,它是一个简单的现成的cobaltstrike http信标(任何类型的reverse shell
shellcode都会发生同样的错误)。
它InMemoryOrderModuleList
从遍历结构PEB
,从散列解析 api 名称并简单地按顺序执行它们。
我以前从未在windbg 中直接调试过cobaltstrike 信标。
注意:当我尝试以相同的方式调试一个简单的 x64 计算器 shellcode 时,我没有遇到任何挂起或错误