循环渐进NsDoor(一)

基本前三节的内容我都思考好了,甚至代码都写好了,甚至我都测试成功了…
但是,这节还是只写windows socket编程的基础内容,为了存点底,然后最近又没时间继续向下想…
这次实现一个socket服务端,可以看成木马的雏形,虽然它根本和木马差距十万八千里…
涉及hack的东西,基本不加注释…而且有时候故意添加错误代码….原因….自己想…
这个服务端仅仅是实现socket通信….
 1 //NsServer 
 2 #include<iostream> 
 3 #include<winsock.h> 
 4 #pragma comment(lib,"Ws2_32") 
 5 using std::cout; 
 6 using std::endl; 
 7 ­
 8 int main() 
 9 
10     const int MSG_COUNT = 40
11     const int PORT = 1517
12     const int BACKLOG = 10
13     int sockfd,new_fd; 
14     struct sockaddr_in my_addr; 
15     struct sockaddr_in their_addr; 
16     int sin_size; 
17     WSADATA ws; 
18     WSAStartup(MAKEWORD(2,2),&ws); 
19 ­
20     if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1
21     { 
22        cout<<"socket error!"<<endl; 
23        exit(1); 
24     } 
25      
26     my_addr.sin_family = AF_INET; 
27     my_addr.sin_port = htons(PORT); 
28     my_addr.sin_addr.s_addr = INADDR_ANY;//a small case 
29 ­
30     if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof sockaddr) == -1
31     { 
32        cout<<"bind error"<<endl; 
33        closesocket(sockfd); 
34        exit(1); 
35     } 
36 ­
37     if(listen(sockfd,BACKLOG) == -1
38     { 
39        cout<<"listen error"<<endl; 
40        closesocket(sockfd); 
41        exit(1); 
42     } 
43 ­
44     cout<<"listen"<<endl;//如何让程序自动隐藏
45 ­
46     sin_size = sizeof(struct sockaddr_in); 
47     if( (new_fd = accept(sockfd,(struct sockaddr*)&their_addr,&sin_size)) == -1
48     { 
49        cout<<"accept error"<<endl; 
50        closesocket(sockfd); 
51        exit(1); 
52     } 
53 ­
54     cout<<"accept ok now"<<endl; 
55     char* msg = "Welcome to a magic world,NewSketcher.\n";//e..heh.. 
56     if( send(new_fd,msg,MSG_COUNT,0== -1
57     { 
58        cout<<"send message error"<<endl; 
59        closesocket(sockfd); 
60        closesocket(new_fd); 
61        exit(1); 
62     } 
63 ­
64     cout<<"send message ok!"<<endl; 
65 ­
66     closesocket(sockfd); 
67     closesocket(new_fd); 
68 ­
69     system("pause"); 
70     return 0
71 
72 
这个代码相当简单,简直就是全部调用API,我写这个的时候遇到两个问题,如何最简单最小代码体积的计算出含空格的字符串的长度…
还有如何把这个服务端自动隐藏运行(方便后期与其它程序捆绑..嘿嘿)
­
测试报告:
需要两台机器…
我的本本和我家破电脑..>
目前仅仅局域网内测试,其它的以后再说…
编译这个代码后运行(以发布版编译):
­
­
­
注意,这个客户端用telnet服务实现,问题是vista没这个玩意,所以用我家电脑做客户端(XP os),本本作服务端(vista os)
­
­
看见没,防火墙拦截,这个问题后面再解决
­
­
这是生产的服务端,在我本上运行:
­
就是这个样子,傻兮兮的,怎么算个木马》。。。
以后会选择隐藏它,嘿嘿
客户端(就是我家破电脑)
执行这句命令:
telnet 192.168.0.20 1517
即 telnet IP 端口
1517端口在程序中绑定好的
IP就是服务端的IP,就是我本本的IP
这是执行后的客户端,得到了welcome  。。。这句话…
再看服务端..:
­
­
也是显示执行成功,现在测试完了…
­
­
遗留问题:
这个东西竟然没客户端,不爽,需要给它整个客户端..
IP和端口竟然绑定到代码里…打造可以动态生成滴服务端…
仅仅是socket通信然后收到条固定消息有屁用,让它可以做点不为人知的事,嘿嘿
C++写的而已,有啥子好地,把它汇编写,然后再shellcode..
这个玩意shellcode后肯定不通用,使用高级技术把它给打造成宇宙通用版
竟然弹出防火墙阻拦,想办法搞定这个(反弹型)…
体积太大,争取shellcode后不到3K…(现在是100K)
­
以上问题,在接下来的代码中都有可能实现….
­
                                         ---------by NewSketcher
                                              Time:  080812    21:36
­
­
­
­
posted @ 2008-10-04 12:30  端木  阅读(280)  评论(0编辑  收藏  举报