`
891633093
  • 浏览: 48968 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

用c语言写病毒

阅读更多
对于病毒和木马的启动,除了显示修改注册表,还有一个办法就是把木马或病毒做成Windows服务,不过这有一个不好的地方就是它的通用性,因为服务要用到winAPI,所以这样的病毒和木马只能运行于Windows系统,而且木马病毒的体积也会有所增加。
  下面我们要把现有的木马病毒程序转换为Windows服务,这个需要三个步骤:
   一、创建一个新的main入口点,在服务控制管理器中注册,在这个main函数中要提供逻辑服务名称和入口点即servermain();
   二、把原木马病毒程序的入口点main函数整合到逻辑服务入口点servermain函数中;
   三、编写我们自己的服务控制处理器函数来响应SCM的命令(服务控制命令)。
   现在就根据上面的步骤做一个木马病毒程序的框架。
   首先做一个新的main函数,这里没有添加头文件,也没有编译,只是把关键代码写上来了,就当是伪代码吧。代码显示为红色。
SERVICE_STATUS ServiceStatus;//服务状态结构体
SERVICE_STATUS_HANDLE hStat; //服务状态句柄
int main()
{
SERVICE_TABLE_ENTRY ste[]={{ServiceName,ServiceMain},
               {NULL,NULL} };//ServiceName是我们下面准备实现的逻辑服务的名称,这个像变量一样可以随便定义;ServiceMain就是逻辑服务所对应的服务入口点,它只是一个占位符,函数名称也是可以随便起的。这里可以给出多个逻辑服务,对于我们的木马病毒应该给两个逻辑服务。
if(!StartServiceCtrlDispatcher(ste); //在SCM中注册服务
   return GetLastError();
return 0;
}

接下来,定义逻辑服务的入口点ServiceMain函数:
int WINAPI ServiceMain(DWORD argc, DWORD argv[])
{
ServiceStatus.dwServiceType=SERVICE_WIN32_OWN_PROCESS;//设置或返回服务的类型,此处设置为在自己的进程中运行,其他的类型可查看MSDN
ServiceStatus.dwCurrentState=SERVICE_START_PENDING;//设置或返回服务当前的状态,此为正在启动中
ServiceStatus.dwControlAccepted=SERVICE_ACCEPT_PAUSE_CONTINUE;//设置或返回服务可接受的控制,此处为服务可以接受暂停和继续的控制命令,控制命令稍候介绍,可以查看MSDN。在我们的木马病毒中,只设置为可接受暂停和继续控制,像关闭、停止等命令都拒绝接受
ServiceStatus.dwWin32ExitCode=ERROR_SERVICE_SPECIFIC_ERROR;//设置或返回逻辑服务线程的退出码,如果这个数据成员的值为上述的值,那么就可以在下一个数据成员指定一个描述值了,否则下个数据成员将被忽略
ServiceStatus.dwServiceSpecificExitCode=0;//如果dwWin32ExitCode为ERROR_SERVICE_SPECIFIC_ERROR,那么在这儿设置返回的描述值
ServiceStatus.dwCheckPint=0;//用于跟踪服务,必须由服务周期性的增加,否则SCM会在dwWaitHint超时时报错
ServiceStatus.dwWaitHint=CS_TIMEOUT;//超时值
hStat=RegisterServiceCtrlHandlerEx(ServiceNmae //注册的服务名称,在StartServiceCtrlDispatcher中设置的逻辑服务名
                  ,ServiceCtrlHandlerEx //服务控制处理器,由我们自己写的回调函数
                  ,NULL); //这是一个VOID指针,它将被传给服务控制处理器。是它的一个参数
SetServiceState(hStat,&ServiceStatus); //用我们上面定义的SERVICE_STATE结构设置服务的状态
if(MyFun(argc,argv)!=0)//MyFun是我们木马病毒的函数,木马病毒的功能在这里实现
  {
   ServiceStatus.dwCurrentState=SERVICE_STOPEN;
   ServiceStatus.dwServiceSpecificExitCode=1;
   SetServiceStatus(hStat,&ServiceStatus);
   return 1;
   }
UpdateStatus(SERVICE_STOPED,0);
return 0;
}

void UpdateStatus(int NewStatus, int CheckValue)//用于更新服务状态
{
if(CheckValue<0)
  ServiceStatus.dwCheckPint++;
else
  ServiceStatus.dwCheckPint=CheckValue;
if(NewStatus>=0)
  ServiceStatus.dwCurrentState=NewStatus;
SetServiceStatus(hStat,&ServiceStatus);
return ;
}
下面定义我们的服务控制处理器:
void ServiceCtrlHandlerEx(DWORD dwControl //由系统传回的服务控制代码,停止服务为SERVICE_CONTROL_STOP;关闭服务为SERVICE_CONTROL_SHUTDOWN其他的可以查看MSDN
            ,DWORD dwEventType //通常为0,用于设备管理
             ,LPVOID lpEventData //通常为NULL
             ,LPVOID lpContext); //由RegisterServiceCtrlHandlerEx的第三个参数传过来的
{
switch(dwControl)
{
  case SERVICE_CONTROL_SHUTDOWN:
    break;
  case SERVICE_CONTROL_PAUSE:
    break;
     .  //其他需要处理的控制命令
     .
     .
  defult:
    if(dwControl>127 && dwControl<256)
    {
      //处理用户定义的控制命令
    }
}
UpdataStatus(-1,-1);
return ;
}
一般服务控制处理器是由一个switch..case语句组成的,我们可以根据dwControl命令来设置一些全局变量,从而控制我们的程序。在这里可以监控我们的服务是否被第三方软件关闭或执行了其他的操作,我们可以注册两个逻辑服务,这两个服务除了服务名和ServiceMain不一样,其他的一样,都是执行我们的木马病毒。先启动一个逻辑服务,当启动的这个服务被关闭或其他操作时,我们的处理器将接受到相应的命令,然后我在处理器中启动另一个服务,而第二个服务被关闭时,可以启动第一个,起到相互监控的作用。
  现在大家肯定有一个疑问,怎么启动我们的服务呢?控制命令是谁发送的呢?
  一、可以通过控制面板-管理工具-服务来管理和控制,这个大家应该很熟悉了。
  二、自己写程序,这个程序就是我们木马病毒的启动程序。首先要打开SCM,如下:
SC_HANDLE OpenManager(LPCTSTR lpMachineNnme //SCM所在的机器名,一般为NULL,表示本地系统
          ,LPCTSTR lpDatabaseName //一般也为NULL
          , DWROD dwAccess) //访问权限,可以设置为MANAGER_ALL_ACCESS
然后用上面的函数返回的SC_HANDLE调用CreateService函数,来创建一个逻辑服务的句柄,如下:
SC_HANDLE CreateService(SC_HANDLE hSCM, //OpenManager函数返回的SCM的句柄
            LPCTSTR lpServiceName, //逻辑服务的名称
             LPCTSTR lpDisplayName, //注册表关键字名称
             DWORD dwAccess, //对服务句柄的访问权限,可以是SERVICE_ALL_ACCESS
            DWORD dwServiceType, //启动类型,这个队我们很重要,SERVICE_DEMAND_START为手动启动;SERVICE_BOOT_START和 SERVICE_SYSTEM_START允许设备驱动器服务在引导或系统启动时启动;SERVICE_AUTO_START指定服务在系统启动时启动
            LPCTSTR lpBinaryPathName, //可执行程序的路径,我们转换后的木马病毒程序,就是我们前面写的那个框架
            LPCESTR lpLoadOrderGroup,
            LPDWROD lpdwTagID,
            LPCESTR lpDependencies,
            LPCTSTR lpServiceStartName,
            LPCTSTR lpPassword)
如果成功,将返回dwServiceName对应的句柄SC_HANDLE,通过对这个句柄的操作可以控制服务。
  用CreateService函数返回的句柄SC_HANDLE来启动服务,如下:
bool StartService(SC_HANDLE hService, //CreateService函数返回的句柄SC_HANDLE,指定要启动的服务的句柄
         DWORD argc, //传给ServiceMain函数的argc参数
          LPTSTR argv()]) //传给ServiceMain函数的argv参数
这样,服务就启动了,现在木马病毒已经开始执行了,这里的关键就是怎样把启动木马病毒的程序运行。
  用这个函数可以向服务发出控制命令,来关闭或停止服务,如下:
bool ControlService(SC_HANDLE hService, //逻辑服务句柄
          DWORD dwControlCode, //控制码
          LPSERVICE_STATUS lpServiceStatus) //返回当前状态的SERVICE_STATUS结构体指针
这个函数的调用,最终将导致用RegisterServiceCtrlHandlerEx函数注册的服务控制处理器ServiceCtrlHandlerEx执行。
服务的控制代码有以下几种:
SERVICE_CONTROL_STOP   停止服务
SERVICE_CONTROL_PAUSE   暂停服务
SERVICE_CONTROL_SHUTDOWN 关闭服务

  我们已经把木马病毒转换为Windows的服务了,而且也做了我们自己的服务启动和控制程序, 现在只要执行服务控制程序,那么木马病毒就开始执行了。
  至于如何在远程机器上执行服务控制程序,我们可以继续讨论。
分享到:
评论

相关推荐

    分析C语言写病毒的过程

    只讨论写病毒的技术,并不讨论危害计算机及网络,所示例的程序只是一个无危害的模板,你可以在技术范围及法律范围内扩充实验. 在读本程序前请保证不用此程序进行违法活动,否则,请马上离开.

    用C语言编病毒

    用C语言编写的病毒,仅供参考

    C语言编写的病毒范例

    可以供初学者玩玩的小C语言小程序,可以通过这个东西来体会编程的一些思路和过程,希望以后对大家有帮助

    病毒感染检测数据结构c语言代码.docx

    病毒感染检测数据结构c语言代码

    c语言写病毒

    小窍门,拿来同大家分享

    c病毒程序原理分析(防范病毒 c语言小病毒示例)

    病毒的特点: 病毒的最大特点就是自我复制,从病毒的分类来说有很多...下面给出c语言的实现过程:1,主程序调用病毒功能函数2,病毒功能函数读取查找同目录下所有c文件;3,找到一个(被感染c文件),打开它,并且将此文

    经典C语言100例 C语言编程实例

    经典C语言100例,是初学C语言的必备资料,这100个例题中包含了C语言各方面的知识,这100例收集自各大经典问题,掌了这100个例题可以说C语言就没有什么问题了 更多编程开发学习资料、实用工具、病毒防护、论文答辩请到...

    C语言杀毒代码 比较幼稚点哈

    C语言杀毒代码 杀的是熊猫烧香的病毒 里面用到了些DOS命令比较简单的

    用C语言设计Win32程序

    用C语言设计Win32程序,本书以实用实例作为编程指导,指引大家编写真正实用的程序。了解到大家对黑客程序、病毒、窗口类程序比较感兴趣,因此我就拿这些实例进行讲解。基于大家基本都用Windows XP SP3,我也就在这个...

    数据结构课程设计 病毒感染检测 可执行程序+电子版报告

    (2)要求将检测结果输出到文件中,文件中包括num行,每行有三个数据,用空格分隔,前两个数据分别表示输入文件中对应病毒的DNA序列和人的DNA序列,如果该人感染了对应的病毒,该行第三个数据则为“YES”,否则为...

    c语言病毒查看工具 txt

    *************************************************************************** * * * File: ANTI-VIRUS * * Function: This program demostrating file anti-virus managment * * * * * ...

Global site tag (gtag.js) - Google Analytics