资源描述:
《病毒常用技术之远程线程插入技术》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、病毒常用技术之远程线程插入技术转帖推荐人:WD 今天真是一个令人倒霉的天气的。 今天早上早早的爬起来,本想趁着今天的好天气好心情,写上一篇好的技术文章。不想该死的CNBLOG的管理员败坏了我的好兴致。我费了九牛二虎之力,用了近两个小时好不容易把文章写好了,提交的时候却提示错误(没有细看也不知是什么鸟什错误),我就怕文章丢失赶紧后退回来却发现标题和关键字还在,而我辛辛苦苦写的文章却被“这里编辑日志内容”几个字所替代。咳!倒霉的事情不说了......。下面接着写我的文章。 现在有一个项目需要承包给其他公司去完成,一般承包给你个公
2、司就够了,可是如果项目比较大可能就需要承包给多个公司同时完成。公司只是一个组织,它不能够完成我们的项目,项目的具体实施要交给公司所属的程序员来完成。一个公司下面最少要有一名员工,不然工商局是不会给注册的,如果公司注销公司所属的员工也就不会存在。在我们的计算机里,项目就好比是我们通过双击一个可执行文件来运行一个程序,进程是公司,线程就是公司里面的员工。 病毒为了实现自己不注册公司也要完成自己所需的工作,方法就是在其他公司面安插一名自己的奸细,吃别人的拿别人而却替自己工作。这就是病毒较为常用的隐藏进程技术。 这里要用到Microsoft提
3、供的一个API函数CreateRemoteThread,该函数声明如下: HANDLE CreateRemoteThread( HANDLE hProcess, //远程进程句柄 LPSECURITY_ATTRIBUTES lpThreadAttributes,//安全属性指针,NULL表示使用默认安全属性 SIZE_T dwStackSize, //堆栈大小,0表示默认 LPTHREAD_START_ROUTINE lpStartAddress, //线程函数地址 LPVOID lpParameter, //线程函数的参数地址
4、DWORD dwCreationFlags, //标志,一般为0 LPDWORD lpThreadId //成功后返回的线程ID ); 由于我们安插的奸细不听那倒霉公司的指挥,需要我们给他安排任务,但是这个任务我们怎么才能分配给他呢? 最好的做法就是把任务代码放入一动态连接库文件中,使用CreateRemoteThread函数把这个动态连接库装载进目标进程,由动态连接库的DllMain函数响应动态连接库被装载事件来执行我们的任务,不过这样操作会在目标进程中多出一个模块来,那么有没有一种方法即让目标进程运行我们的任务又不使用动态连接库文
5、件呢?答案是肯定的,那就是把任务代码也插入到目标进程空间中,由于执行体在两个进程中的位置不同,线程函数中的变量、字符串映射入进程空间的位置也不定相同,这就需要线程函数对其所调用的函数进行重新定位,将所须用到的字符串等信息写入目标进程中,将在目标进程中存放字符串等信息的地址作为参数传递给线程函数,WINDOWS中提供的API函数GetProcAddress可是实现获取API函数地址的功能。以下对各种实现方法进行阐述。 一、使用远程线程插入技术为进程插入和删除模块 具体操作步骤如下: 1. 提升当前进程的操作权限,使其有权限对其他进程进行操作。
6、HANDLE hToken; OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken ); TOKEN_PRIVILEGES tp; LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid ); tp.PrivilegeCount = 1; tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
7、 AdjustTokenPrivileges( hToken, FALSE, &tp, sizeof( TOKEN_PRIVILEGES ), NULL, NULL ); 2. 取得目标 Process ID (这个方法有很多,你可以使用 FindWindow+GetWindowProcessID 或则使用PSAPI中的函数,或则使用其他的终止只要找一个下手的目标就可以) 3. 使用OpenProcess 打开进程并设定对进程的操作权限。 HANDLE hProcess = OpenProcess( PROCESS_CREATE_THR
8、EAD
9、 PROCESS_VM_OPERATION
10、 PROCESS_VM_WRITE, FALSE,