欢迎来到天天文库
浏览记录
ID:34228872
大小:92.50 KB
页数:15页
时间:2019-03-04
《线程插入技术详解》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、线程插入技术详解谷夕前置知识:DLL、远程线程难度:高编译环境:VC6.0+win2000测试环境:win2000+天网防火墙“大家好,今天我们来讨论现在木马或后门比较流行的技术-线程插入技术。”“什么是线程插入技术啊?”一小菜问。“线程插入技术也叫远程线程技术,指的是将自己的代码插入正在运行的进程中的技术。其实,这种技术也不算是很难,只要有基本的进程、线程和动态链接库的知识就可以很轻松地完成线程插入,下面就为大家介绍一下远程线程技术。远程线程技术是通过在另一个进程中创建远程线程的方法进入那个进程的内存地址空间,事先把要执行的代码和有关数
2、据写进目标进程,然后创建一个远程线程来让远端进程执行哪些代码。我们知道,在进程中,可以通过CreateThread函数创建线程,被创建的新线程与主线程(就是进程启动时被同时自动建立的那个线程)共享地址空间以及其他的资源。但是,通过CreateRemoteThread也同样可以在另一个进程内创建新线程,被创建的远程线程同样可以共享远程进程(是远程进程哦)的地址空间,所以,实际上,我们通过一个远程线程,进入了远程进程的内存地址空间,也就拥有了那个远程进程相当的权限。例如在远程进程内部启动一个DLL木马。”“我们为什么要那么麻烦啊?就这样启动一
3、个木马不就行了?”一小菜疑惑问。“呵呵,我们启动远程线程的目的是可以隐藏木马进程啊!我们把木马插入到一个正常的进程中,那么在用户看来不就是没有木马进程了吗?更重要的一点是可以突破防火墙!”“突破防火墙?怎样突破?”小菜又疑惑了。“大家都安装过防火墙吧?”“肯定啦!”“那么,当有程序访问Internet时,防火墙是不是都弹出一个询问的窗口来询问是否允许XXX程序访问网络?”“对啊!”“那就是啦!如果防火墙提示一个你不认识的程序要访问Internet,那你会有什么反应?”“那就很有可能是木马或后门啦!”“对啊。但如果是IE访问Internet
4、呢?你会不会允许IE访问Internet?”“那还用问吗?”“就是啊,如果我们把木马的代码插入到IE进程中去,那么当防火墙提示IE访问Internet时,也就是我们木马解放的时候啊!用户只要第一次允许IE访问网络,以后当IE在此访问网络的时候,防火墙就不给予提示啦。那样我们的木马或后门不是就是可以突破防火墙了吗?”“哈哈!暗道陈仓,绝!”“好,我们现在就来动手写程序啦。我们先看看远程线程的主角CreateRemoteThread(),首先介绍一下我们的主要工具CreateRemoteThread,这里先将函数原型简单介绍以下。Create
5、RemoteThread可将线程创建在远程进程中。函数原型:HANDLECreateRemoteThread(HANDLEhProcess,//handletoprocessLPSECURITY_ATTRIBUTESlpThreadAttributes,//SDSIZE_TdwStackSize,//initialstacksizeLPTHREAD_START_ROUTINElpStartAddress,//threadfunctionLPVOIDlpParameter,//threadargumentDWORDdwCreationFla
6、gs,//creationoptionLPDWORDlpThreadId//threadidentifier);参数说明:hProcess[输入]进程句柄lpThreadAttributes[输入]线程安全描述字,指向SECURITY_ATTRIBUTES结构的指针dwStackSize[输入]线程栈大小,以字节表示lpStartAddress[输入]一个LPTHREAD_START_ROUTINE类型的指针,指向在远程进程中执行的函数地址lpParameter[输入]传入参数dwCreationFlags[输入]创建线程的其它标志lpT
7、hreadId[输出]线程身份标志,如果为NULL,则不返回返回值成功返回新线程句柄,失败返回NULL,并且可调用GetLastError获得错误值。大家很快可以领略到CreateRemoteThread的神通,它使你的代码可以脱离你的进程,植入到别的进程中运行。大家说,把代码插入到那个进程中突破防火墙最好啊?”“那当然是QQ或者IE啦!因为没有人会傻到不允许这两个程序访问网络啊!”“嗯,是的!这两个程序都很好。但接下来我们会选择IE。因为通常我们会打开多个IE而不是多个QQ,那样我们启动一个没有窗口的IE再把代码插进去隐藏性就比较好了。
8、”“怎样打开一个没有窗口的IE啊?”“要打开一个新的进程,我们利用的是CreateProcess()函数。以下代码实现打开一个IE进程,但窗口被隐藏起来。STARTUPINFOsi;//进程启
此文档下载收益归作者所有