工作需要 最近这段时间写了一个远程线程注入的小程序来获取密码 由于是第一次写这种程序 , 过程虽说不是特别艰难 也是挺曲折的 而且感觉最麻烦的地方就是远程线程代码的调试.
由于远程线程是注入到别的进程中执行的 因此 无法像普通的调试那样下断点跟踪 调试代码 昨天自己终于摸索出一套调试方案 也将这个经验分享给大家
远程线程要运行 肯定第一步就是要把代码写到远程进程的地址空间(WriteProcessMemory) 在VirtualAllocEx后 返回一个指针,注意这个指针 就是目标进程中的地址 因此我们可以写一个小的Demo程序 然后让我们的程序注入线程代码(或者直接利用WinDbg强制插入(适合于调试没有代码的目标程序)) 然后直接在VS中(或者WinDbg中)强制中断程序 打开内存窗口 输入刚刚分配的那个指针的地址 这样就可以看到copy过来的代码数据了
现在的问题是 如何给这段程序下断点调试呢? 方法如下VS里面使用快捷键Alt + 8 调出反汇编窗口 如图
最上面有一栏地址栏 如图
下断点就容易啦 直接在push ebp那个地方下个断点(测试而已) 这样 远程线程运行到这里的时候就会断下来
看不懂汇编代码没关系 现在来教你怎么看汇编代码
返回我们的主程序 在调试窗口中打开 输入远程线程函数的名称 如图
OK 现在在主程序里面 按Alt + 8 重复上面的方法 把地址打进去 回车 发现什么? 反汇编了我们的远程函数 代码是不是和那边一样? 还带注释呢 如图
OK 就算现在你一点汇编也不懂 你也能牛逼哄哄的调试汇编代码了 谁叫咱用的IDE这么强大呢 ?
OK 基本上要说的都说完了 调试出真知 很多系统方面的知识可以在调试的时候获取 比如 防止栈攻击的cookie RunTimeCheck的栈检测 等等 细节方面的东西就不多说了 只要动手调试一下 你会学会很多很多东西的 Good Luck~