使用WinDbg简单调试CreateRemoteThread

今天遇到个坑爹的问题,使用CreateRemoteThread注入dll总是失败也没有错误提示,也不好跟踪,因为是以硬编码的形式创建远程线程的,之后想了下貌似有点印象,前段时间学习使用windbg的时候遇到过类似的问题。

首先使用WinDbg附加到目标进程,然后下断点 bu kernel32!BaseThreadInitThunk:

xp:kernel32!BaseThreadStart
win7:kernel32!BaseThreadInitThunk

然后会断在这里:

kernel32!BaseThreadInitThunk:
75313358 8bff mov edi,edi
7531335a 55 push ebp
7531335b 8bec mov ebp,esp
7531335d 85c9 test ecx,ecx
7531335f 0f85752e0000 jne kernel32!BaseThreadInitThunk+0x15 (753161da)
75313365 ff7508 push dword ptr [ebp+8] //dll路径
75313368 ffd2 call edx //LoadLibraryW
7531336a 50 push eax
7531336b ff1504073175 call dword ptr [kernel32!_imp__RtlExitUserThread (75310704)]

之后执行到7531336a的时候用看了下eax为0,查了下用!gle可以获取到GetLastError错误代码:

0:002> !gle
LastErrorValue: (Win32) 0x7e (126) - <Unable to get error code text>
LastStatusValue: (NTSTATUS) 0xc0000135 - <Unable to get error code text>

126是找不到指定的模块,之后想了下,我注入的是远程进程,Dll是放到注入工具目录下的,坑爹了。

没有评论: