browser icon
You are using an insecure version of your web browser. Please update your browser!
Using an outdated browser makes your computer unsafe. For a safer, faster, more enjoyable user experience, please update your browser today or try a newer browser.

远线程的调试

Posted by on 2009 年 05 月 07 日

你可以任意转载本文,但请在转载后的文章中注明作者和原始链接。
媒体约稿请联系 titilima_AT_163.com(把“_AT_”换成“@”)。

距我发表《DLL 的远程注入技术》已经接近四年了。在这四年里,不断有网友问我如何调试注入后的代码,我也由此意识到:宝剑固然重要,但剑术同样重要。于是,今天我将调试远线程的经验分享出来,如果你读后能有“不过如此”之感,那我的目的就达到了。

调试注入的 DLL

示例程序来自《DLL 的远程注入技术》:http://blog.titilima.com/show-65-1.html

首先,将 DLL 的工程设为启动项目,并在 DllMain 入口中设断点,如下图所示。

然后打开工程设置,将调试选项中的“命令”栏填入目标进程的文件名。

设置完成后,按 F5 开始调试,目标进程便会启动。当 DLL 被注入后,断点便会命中,可以调试了。

调试注入的代码

示例程序来自《用远线程实现文件自删除》:http://blog.titilima.com/show-216-1.html

首先,用 WinDbg 启动目标程序。为了安全起见,这里不使用 explorer.exe,改用 notepad.exe 代替。
然后,在 CreateRemoteThread 处设置断点,如下图。

之所以在这里设置断点,是因为在 WriteProcessMemory 之后线程代码就被写入了,所以我们要抢在线程创建之前在目标进程中检查线程函数并设置断点。
启动 DeleteMe,运行至断点处。在调试窗口中找到被注入的远程地址,如下图。

接下来在 WinDbg 中暂停目标进程的运行,并检查代码是否被正确注入,如下。

1
2
3
4
5
6
7
0:001> uf 00b30000
00b30000 6832000000      push    32h
00b30005 e83c24cd7b      call    kernel32!Sleep (7c802446)
00b3000a 8b442404        mov     eax,dword ptr [esp+4]
00b3000e 50              push    eax
00b3000f e8b11ed07b      call    kernel32!DeleteFileA (7c831ec5)
00b30014 c20400          ret     4

由此可见代码的确已经被写入,那么下一步就可以设置断点并调试了。

订阅本站

2 Comments

  • At 2009.05.25 15:34, 不却 said:

    楼主辛苦了,胸襟开阔的如楼主一样的IT牛人,全中国没有第二个了,感谢楼主了

    • At 2009.05.25 18:27, 苏洋 said:

      故地重游…似乎马哥的发文频率依旧不高哦~
      [姓马的高人真不少..]

      (Required)
      (Required, will not be published)