【旧博文】需求与病毒

随着开发平台的高级化智能化,程序员编写程序的门槛越来越低了。加上各个操作系统的API不断的完善,程序员很容易编写出与底层交互的程序。熊猫烧香,灰鸽子。。。,很多病毒都是使用高级语言编写的。另一方面,在用户需求上,也涉及到一些自动交互的底层应用。比如:U盘自动备份程序。

在一个实际项目中,客户要求实现U盘的自动备份。起源是,现在U盘的使用已经十分普及,市面上的U盘品牌五花八门,其中的质量也良莠不齐,在享受U盘给我们带来的方便的同时,一些问题也随之而来,质量的不同性带来了稳定性的问题,在使用的时候,经常会丢失数据。用户的需求具体的过程是,当用户U盘插入到计算机时,自动将U盘的内容复制到本地磁盘上的某个目录中。

这个功能的实现并不复杂。计算机系统的硬件发生变化时,系统会产生WM_DEVICECHANGE消息。

WIN32下,在回调函数中截获消息。

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam)

{

    switch (message)

    {

        case WM_DEVICECHANGE:   //硬件发生改变

        {

           DWORD wp = (DWORD)wParam; //保存硬件发生改变中产生的事件拦截。

           switch(wp)

           {

             case DBT_DEVICEARRIVAL://硬件插入并可以使用

             {

                PDEV_BROADCAST_HDR pbh = reinterpret_cast<PDEV_BROADCAST_HDR>(lParam);

                if (pbh->dbch_devicetype = DBT_DEVTYP_VOLUME)  //移动设备

                {

             PDEV_BROADCAST_VOLUME pbv = reinterpret_cast<PDEV_BROADCAST_VOLUME>(pbh);

                    DWORD unit = pbv->dbcv_unitmask;

                    int i=0; //当前盘符

                    while ( !(unit&1) )//循环找出最后一个盘的盘符

                    {

                        if (i == 25)

                        {

                           break;

                        }

                         i++;

                         unit >>= 1;

                      }

                      char *source = new char(10);

                      sprintf(source, "%c:\\", i+65);

                     copyFileToTag cf(source);  //构造一个以source为源地址的对象

                     if ( !cf.copy("C:\\11") ) //拷贝到C:\11目录下

                     {

                           MessageBox(hwnd, "拷贝失败", "", NULL);

                     }

                 }

           }

          break;

       }

  }

// 其他操作

}

简单的一个WM_DEVICECHANGE消息就可以了。就这样,实现了客户的需求。但试想一下,加上进程隐藏,程序隐藏,热键处理俨然就变成了一个超级的后台备份器,然后呢,加上网络传播、自我复制就变成了病毒。

原文地址:https://www.cnblogs.com/ldr123/p/2389605.html