循环渐进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![](https://www.cnblogs.com/Images/dot.gif)
"<<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
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
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/dot.gif)
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
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/dot.gif)
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