学过80x86汇编的朋友应该都知道,在寄存器中,有一个叫EIP的指针寄存器,该寄存器存储的是下一条指令的地址。而在实际使用中,也确实如此。因为我在编写c++代码时,调试的时候如果我打开寄存器窗口,可以发现EIP寄存器存储的就是下一条指令的地址。其设置下一条语句的功能,其实就是通过修改EIP寄存器实现的。
因此,就有了我今天的这个想法。我不知道网络上有没别人想过这想法,我没去baidu或google验证,也不想去验证这问题。因为这是我自己想到的,包括代码的实现,都没有参考过任何人的代码。每个人有每个人的想法,或许有些人跟我的想法一样,但最终实现的方法可能不同。
在我的代码里面,并没有实际地注射模块,只是简单地用MessageBox这个函数来演示了一下而已。既然能够调用MessageBox,那么注射模块也不是什么困难的问题了。只需要把要注射的模块名字写到远程进程中,然后用我的这个思路调用LoadLibrary函数就可以了。
下面是我的代码:
由于MSDN里没有CONTEXT结构的定义,所以就先用C++来写。等有时间了,研究一下winnt.h里面对CONTEXT结构的定义,然后把它转成VB给大家看下吧,到时候我会进行实际性的模块注射。
另外,由于平时C++用得不太多,所以代码可能写得不太好,大家就别批评太多了,给我留点面子哈。而且里面有一个错误,我已写在注释里了。我找不到原因,希望哪位大虾要是知道原因的话麻烦告知一下,谢谢。
附上工程文件,这个是VS2008的工程:
因此,就有了我今天的这个想法。我不知道网络上有没别人想过这想法,我没去baidu或google验证,也不想去验证这问题。因为这是我自己想到的,包括代码的实现,都没有参考过任何人的代码。每个人有每个人的想法,或许有些人跟我的想法一样,但最终实现的方法可能不同。
在我的代码里面,并没有实际地注射模块,只是简单地用MessageBox这个函数来演示了一下而已。既然能够调用MessageBox,那么注射模块也不是什么困难的问题了。只需要把要注射的模块名字写到远程进程中,然后用我的这个思路调用LoadLibrary函数就可以了。
下面是我的代码:
由于MSDN里没有CONTEXT结构的定义,所以就先用C++来写。等有时间了,研究一下winnt.h里面对CONTEXT结构的定义,然后把它转成VB给大家看下吧,到时候我会进行实际性的模块注射。
另外,由于平时C++用得不太多,所以代码可能写得不太好,大家就别批评太多了,给我留点面子哈。而且里面有一个错误,我已写在注释里了。我找不到原因,希望哪位大虾要是知道原因的话麻烦告知一下,谢谢。
附上工程文件,这个是VS2008的工程:
2 comment(s)
风の雪
[2008/08/20 16:51]
另外,由于我在代码中对寄存器进行的保护,所以可以取代我写的那个DLL(创建远程线程)中的InjectLib函数,在任何时候都可以插入模块。只要先取得目标进程的句柄,然后再获取该进程任意一个线程的句柄即可。详细的实现我就不说了,有兴趣的可以自己试一下。
风の雪
[2008/08/20 10:58]
工程里面有个InjectLibrary1.ncb文件非常大,7.42MB,所以我把它删了,如果有朋友因为缺少这个文件导致工程无法打开,请与我联系。
分页: 1/1
1
1


2008/08/20 10:50 ..by
下载文件 (已下载 1 次)






