zoukankan      html  css  js  c++  java
  • 【旧博文】需求与病毒

    随着开发平台的高级化智能化,程序员编写程序的门槛越来越低了。加上各个操作系统的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消息就可以了。就这样,实现了客户的需求。但试想一下,加上进程隐藏,程序隐藏,热键处理俨然就变成了一个超级的后台备份器,然后呢,加上网络传播、自我复制就变成了病毒。

  • 相关阅读:
    redis的常用操作
    django中的缓存 单页面缓存,局部缓存,全站缓存 跨域问题的解决
    drf 下的 url控制 解析器 响应器 版本控制 分页
    django下的 restful规范 Drf框架 psotman的安装使用 及一些容易遗忘的小点
    vue学习 自建服务器 node
    vue学习 条件、循环指令、computed、watch、局部、全局、组件间交互
    Linux入门
    redis进阶
    redis介绍和安装
    DRF解析器和渲染器
  • 原文地址:https://www.cnblogs.com/ldr123/p/2389605.html
Copyright © 2011-2022 走看看