U盘病毒及其相关资源的分析(patch shell32.dll)

Windows 10源码探索:从公开资源到逆向工程的合法研究路径 源码是理解软件系统底层实现逻辑的核心,尤其在操作系统领域,通过分析源码可以深入掌握其架构设计、内存管理和进程调度等基本原理。对于Windows 10这样的商业闭源系统,虽然无法直接获取其核心内核源码,但开发者依然可以通过一系列合法且高效的技术手段进行深度研究。这包括利用微软官方提供的Windows API文档、驱动程序开发工具包(WDK)以及公开的调试符号(PDB文件),这些资源相当于系统的“设计图纸”和“观察窗”。在工程实践中,结合进程监控工具(如Sysinternals Suite)、性能分析器(WPA 阅读详情
U盘病毒让很多人很郁闷,不过说起来也没什么高深的东西
autorun.inf在shell32.dll里面,超级巡警的工具里面的一项强力废除就是patch了shell32.dll,部分代码如下:
void KillSFC()
{
    WCHAR shell32file[100]={0};
   
    GetSystemDirectoryW(shell32file,sizeof(shell32file));
    lstrcatW(shell32file,L"//shell32.dll");
    HMODULE hLib = LoadLibrary("SFC.DLL");
    SfcFileException *se = (SfcFileException (__stdcall *))GetProcAddress(hLib,(LPCSTR)5);
   
    se(0,shell32file,-1);
    FreeLibrary(hLib);
    return;
}

bool MapCacheFileToPatch()
{
    CHAR Mapfile[50]={0},anotherfile[50]={0};
    HANDLE hfile,hmapfile;
    //LARGE_INTEGER filesize;
    PVOID Mappingbegin=NULL;
    WCHAR* ppt;
   
    GetSystemDirectory(Mapfile,sizeof(Mapfile));

    lstrcat(Mapfile,"//dllcache//shell32.dll");
    SetFileAttributes(Mapfile,FILE_ATTRIBUTE_NORMAL);
    hfile=CreateFile(Mapfile, GENERIC_READ|GENERIC_WRITE,
        FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
    if (hfile==INVALID_HANDLE_VALUE)
    {
        ZeroMemory(Mapfile,sizeof(Mapfile));
        GetSystemDirectory(Mapfile,sizeof(Mapfile));
        lstrcpy(anotherfile,Mapfile);
        lstrcat(anotherfile,"//shell32.tmp");

        lstrcat(Mapfile,"//shell32.dll");
        CopyFile(Mapfile,anotherfile,FALSE);
        SetFileAttributes(anotherfile,FILE_ATTRIBUTE_NORMAL);

        hfile=CreateFile(anotherfile, GENERIC_READ|GENERIC_WRITE,
        FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

        if (hfile==INVALID_HANDLE_VALUE)
        {
            return FALSE;
        }

    }
   
    //GetFileSizeEx(hfile,&filesize);
    hmapfile=CreateFileMapping(hfile,0,PAGE_READWRITE,0,0,0);
    if (hmapfile==INVALID_HANDLE_VALUE)
    {
        CloseHandle(hfile);
        return FALSE;
    }
   
    Mappingbegin=MapViewOfFile(hmapfile,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
    if (!Mappingbegin)
    {
        CloseHandle(hfile);
        CloseHandle(hmapfile);
        return false;
    }
    else
    {   
        for (long i=0;i<0x300000;i++)//0x300000可以
        {
            __try
            {
                ppt=(WCHAR *)Mappingbegin+i;
               
                if( wcscmp(ppt,L"AutoRun.x86")==0 && wcscmp(ppt+12,L"AutoRun.inf")==0 )//XP/2003
                {
                    //AfxMessageBox("45patch~~~~");
                    ZeroMemory((PCHAR)ppt,45);
                    *ppt=(WCHAR)L"NUL";
                    *(ppt+12)=(WCHAR)L"NUL";
                }
               
                else if  ( wcscmp(ppt,L"autorun.inf")==0 || wcscmp(ppt,L"AutoRun.inf")==0)//前面XP后面2000
                {
                    //AfxMessageBox("21patch~~~~");
                    ZeroMemory((PCHAR)ppt,21);
                    *ppt=(WCHAR)L"NUL";
                }
            }
            __except(EXCEPTION_EXECUTE_HANDLER){}
        }
        //暴力搜索内存patch %system%/dllcacahe/shell32.dll
        UnmapViewOfFile(Mappingbegin);
        CloseHandle(hfile);
        CloseHandle(hmapfile);
        return TRUE;
    }
   
}

void DelShell32()
{   
    CHAR Oldfile[50]={0},Newfile[50]={0},CopyName[50]={0};
   
    GetSystemDirectory(Oldfile,sizeof(Oldfile));
   
    lstrcpy(Newfile,Oldfile);
    lstrcat(Oldfile,"//shell32.dll");
    lstrcat(Newfile,"//shell32.bak");
   
    SetFileAttributes(Newfile,FILE_ATTRIBUTE_NORMAL);
    MoveFileEx(Oldfile,Newfile,MOVEFILE_REPLACE_EXISTING);//shell32.dll->shell32.bak
    MoveFileEx(Newfile,NULL,MOVEFILE_DELAY_UNTIL_REBOOT);//shell32.bak->NULL
   
    GetSystemDirectory(CopyName,sizeof(CopyName));
    lstrcat(CopyName,"//dllcache//shell32.dll");
    if (MoveFileEx(CopyName,Oldfile,MOVEFILE_REPLACE_EXISTING))
    {
        //dllcache move to shell32.dll
        CopyFile(Oldfile,CopyName,FALSE);//shell32.dll move to dllcache
    }
   
    else
    {
        GetSystemDirectory(CopyName,sizeof(CopyName));
        lstrcat(CopyName,"//shell32.tmp");
        MoveFileEx(CopyName,Oldfile,MOVEFILE_REPLACE_EXISTING);
    }
    return;
}


当然,现代病毒还会结合U盘插入,自动感染的方式,基本原理就是当闪存插入时会给每一个窗口发送WM_DEVICECHANGE消息,其中wParam里是Event,包含了当前的事件。我们注册一个窗口类,Wndproc里面检测如下:
void OnDeviceChange(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
  PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
  switch(wParam)
  {
    case DBT_DEVICEARRIVAL:
      if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)
      {
          PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
          ULONG unitmask=lpdbv ->dbcv_unitmask;
          for (int i = 0; i < 26; ++i)
          {
                //取得设备的盘号
                if (unitmask & 0x1)
                {
                //这里我们加入你要做的事
                //其中i+'A'表示当前的盘符
                }
                unitmask = unitmask >> 1;
          }
      }
  }

  return;
}
MADN中定义的事件如下:

        DBT_CONFIGCHANGECANCELED      A request to change the current configuration (dock or undock) has been canceled.
        DBT_CONFIGCHANGED      The current configuration has changed, due to a dock or undock.
        DBT_DEVICEARRIVAL      A device has been inserted and is now available.
        DBT_DEVICEQUERYREMOVE      Permission is requested to remove a device. Any application can deny this request and cancel the removal.
        DBT_DEVICEQUERYREMOVEFAILED      A request to remove a device has been canceled.
        DBT_DEVICEREMOVECOMPLETE      A device has been removed.
        DBT_DEVICEREMOVEPENDING      A device is about to be removed. Cannot be denied.
        DBT_DEVICETYPESPECIFIC      A device-specific event has occurred.
        DBT_QUERYCHANGECONFIG      Permission is requested to change the current configuration (dock or undock).

从底层的角度,U盘插入,设备总线会收到pnp消息,在其间检测/Driver/USBSTOR驱动对象,过滤即可禁止USB
NTSTATUS
FilterDispatchPnp (
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
{
    PDEVICE_EXTENSION          deviceExtension;
    PIO_STACK_LOCATION        irpStack;
    NTSTATUS                            status;
    KEVENT                              event;

    PAGED_CODE();

    deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
    irpStack = IoGetCurrentIrpStackLocation(Irp);

    status = IoAcquireRemoveLock (&deviceExtension->RemoveLock, Irp);
    if (!NT_SUCCESS (status)) {
        Irp->IoStatus.Status = status;
        IoCompleteRequest (Irp, IO_NO_INCREMENT);
        return status;
    }
   

    switch (irpStack->MinorFunction) {
        case IRP_MN_QUERY_DEVICE_RELATIONS:

        //SET_NEW_PNP_STATE(deviceExtension, RemovePending);
        //AttachedDevice (Upper) 81aac0f8 /Driver/USBSTOR
        //通过检测Upper Filters来检测是不是Mass Storage,是就STATUS_ACCESS_DENIED
        //DbgPrint("Device is %x/t",DeviceObject);
        //DbgPrint("Upper Filter is %ws/n",
                    //DeviceObject->AttachedDevice->DriverObject->DriverName.Buffer);

        if (_wcsnicmp(DeviceObject->AttachedDevice->DriverObject->DriverName.Buffer,
                                                            L"//Driver//USBSTOR",15)==0)
        {
            DbgPrint("Cmp Result is %d/n",
                _wcsnicmp(DeviceObject->AttachedDevice->DriverObject->DriverName.Buffer,
                                                            L"//Driver//USBSTOR",15));
            status = STATUS_ACCESS_DENIED;
            break;
        }
        status = STATUS_SUCCESS;
        break;
    //以下省略
}
 
2024年Shellcode加载器免杀实战:对抗360、Defender的核心技术与工具盘点 在网络安全领域,恶意代码的检测与绕过是攻防对抗的核心。杀毒软件通过静态特征检测、动态行为监控、内存扫描等多层次机制识别威胁,而免杀技术则致力于通过混淆、加密、系统调用等手段规避这些检测。其技术价值在于帮助安全研究人员在授权测试中模拟真实攻击,有效评估终端防御体系。应用场景涵盖红队渗透测试、应急响应演练与防御能力评估。本文聚焦于Shellcode加载器这一关键载体,结合系统调用(Syscall)和反射式DLL注入等热词,深入解析其在对抗主流杀软中的实战应用与原理。 阅读详情

相关推荐

Delphi实现USB设备操作完整源码解析

typeend;cbSize:结构体大小,必须初始化为;ClassGuid:设备类GUID;DevInst:设备实例句柄;Reserved:保留字段,通常为nil。在调用之前,必须了解设备所支持的 IOCTL(输入/输出控制)代码。这些代码通常由设备驱动程序定义,用于区分不同的操作类型,如获取设备状态、发送命令、读取数据等。常见的 IOCTL 代码结构如下:其中:DeviceType:设备类型,例如:功能代码,用于标识具体操作。

weixin_33363025的博客 481

Delphi自动检测U盘插入、拔出及获取U盘盘符

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, AppEvnts, ExtCtrls, StdCtrls; type TForm1 = class(TForm) procedure

被遗忘的遐想空间 2388

Delphi USB设备交互完整源码分析与实践

Delphi 是一种基于 Pascal 语言的强类型面向对象的编程语言。自1995年诞生以来,它就以其快速的应用程序开发(RAD)和VCL框架而闻名。Delphi为开发者提供了一套完整的工具集,旨在简化各种应用程序的开发过程,包括数据库、企业级解决方案以及本地Windows应用程序。USB技术自1996年推出以来,经历了多个版本的迭代,每一步的发展都伴随着计算机与外围设备间通信技术的革新。

weixin_33363025的博客 742

获取U盘序列号的代码

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34162228的博客 2340

全面禁止U盘插入代码

公用机房为了学生乱插U盘而又不能影响USB鼠标操作,放到防止的代码和操作说明!

Delphi编程实现U盘锁

Delphi编程实现U盘锁 好东西下载吧

计算机扫盲(下篇)

由于篇幅问题这篇文章被迫分成上下两篇建议反复上下对比着看,能应付生活中的使用就行。不是学操作系统的不用了解太深。实在不会就喂给ai帮你理解。逆向工程 = 通过分析程序的二进制文件,理解它的行为和逻辑。正常开发:源代码 → 编译 → 可执行文件 逆向工程:可执行文件 → 反汇编/反编译 → 理解逻辑5.2.1 指令与机器码1. 指令的组成 机器码格式(x86/x64):必会的汇编指令2. 常见寄存器3. 汇编代码中的栈重要观念:函数调用时生成的栈帧,在汇编层面根本不是一个必须存在的“结构”。, , , 等指

2504_94717629的博客 527

Shell32.dll V1.2.107

VS中自带的旧版本的V1.0兼容性差,问题多多。Shell32.dll V1.2.107 用于替换VS中自带的旧版本的V1.0

3.Linux基础开发⼯具【由浅入深-Linux】

在 Windows 环境中,我们习惯了双击 或 文件并一路点击“下一步”来安装软件。但在 Linux 的世界里,软件的分发和安装理念有着本质的不同。Linux 强调权限控制、模块化和依赖管理。为了帮您构建完整的 Linux 系统管理知识体系,我们可以将 Linux 下安装软件的方式归纳为五大主流阵营。这是 Linux 下最正统、也是日常使用频率最高的方式。它又细分为“在线仓库安装”和“本地包安装”两种场景。1. 在线仓库安装(如同手机自带的 App Store) 操作系统维护着一个庞大的软件云端仓库。通

插花弄玉的博客 912

Interop.Shell32 1.2版本

Interop.Shell32 1.2版本支持xp 1.0版本支持win7 string dirName = System.IO.Path.GetDirectoryName(FileName); string SongName = System.IO.Path.GetFileName(FileName);//获得歌曲名称 ShellClass sh = new ShellClass(); Folder dir = sh.NameSpace(dirName); FolderItem item = dir.ParseName(SongName); string win7Time = dir.GetDetailsOf(item, 27); //win7 win10 string xpTime = dir.GetDetailsOf(item, 21); //xp

Interop.Shell32.dll V1.2.107.0

@echo 开始注册 copy Interop.Shell32.dll %windir%\system32\ regsvr32 %windir%\system32\Interop.Shell32.dll /s @echo Interop.Shell32.dll注册成功 @pause

网络安全入门实验01:逆向分析三个文件

目录 0.前言 1.实验环境搭建 2.IDA PRO简单介绍 3.Sample_01的逆向分析 Sample_01总结(来自图灵社区相关文章) 4.Sample_02的逆向分析 函数分析: 分析与验证 Sample_02拓展 5.Sample_03逆向分析 函数分析: 分析与验证 Sample_03拓展 6.实验01总结 0.前言 大学三年终于上到了最最最想学...

Krumitz的博客 5638

U盘美化工具 U盘美化软件 磁盘美化工具

这个软件安装好了以后,不单单是现在表面所看到的!图片地址(http://home.51.com/wutuanfeng/photo/item/100133258.html)在这些文件夹里面还是一样的效果背景图也是变化万千的!文件夹的图标是对应各种文件类型而定!多彩多样。而文件夹的注明文字是红色的(熟练了你也可以自己设置的)与背景对称。一眼就能分辨出来!不需要去刻意去寻找辨别!背景更是变化万千~只要你愿意,随时可以进行更换!方法我已经写在了软件的使用说明里面了!在这里也就不多说!大家还是下载了再去慢慢摸索吧!我查过大量的其他这类软件,现在我得出一句话是:“这个软件绝对是世上独一无二的!”相信你也值得拥有一件作为收藏了! 呵呵……大家快点下载吧!

宽字符与窄字符的处理

1.      《windows核心编程》 >Unicode是传递字符串的最佳手段。 2.      C标准库中与wchar_t相关的文件: 《windows核心编程》 1)      文件”string.h”定义了wchar_t数据类型: {{{    typedef unsignedshort wchar_t; }}} 2)      标准的ANSI C函数和它们等价的UNIC

hunterzone的专栏 1万+

Interop.Shell32.dll V1.2

nterop.Shell32.dll vs自带的是1.0 会导致一些错误,这个是1.2的

C# 调用windows的shell32 获取icon

C# 调用windows的shell32 获取icon 调用winAPI转换SYSTEMTIME到FILETIME

C#获取音乐相关信息和相关问题解决

winform中需要获取音乐的相关信息,使用系统的shell32.dll这个dll库,开始的时候作者直接引用了系统自带的这个库,结果报错 一直不能解决,“System.InvalidCastException:“无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Shell32.Shell”。系统自带的shell32.dll这个库是1.0版本的 太落后了,自己又到网上下了个1.2版本的,提供在这里给大家下载。1.引用下载好的shell32.dll。

一个专注于技术研究创新的程序员 628

PID控制参数整定(调节方法)原理+图示+MATLAB调试

序 首先最重要的是了解每个参数调节了系统响应的那些属性,通过观察响应从而调节参数改变属性。 PID的作用概述: 1、P产生响应速度和力度,过小响应慢,过大会产生振荡,是I和D的基础。 2、I在有系统误差和外力作用时消除偏差、提高精度,同时也会增加响应速度,产生过冲,过大会产生振荡。 3、D抑制过冲和振荡,过小系统会过冲,过大会减慢响应速度。D的另外一个作用是抵抗外界的突发干扰,阻止系统的突变。 同时调节的顺序是:P>I>D 下面了解的一个很重要的就是调节的目标,也就是最好的响应曲线.

viafcccy的博客 16万+

鱼叉攻击-尝试

作者:倾旋 0x00 前言 本次是授权的鱼叉案例,也都是尝试,经验不够丰富 0x01 鱼叉攻击 “鱼叉攻击”是黑客攻击方式之一,最常见的做法是,将木马程序作为电子邮件的附件,并起上一个极具诱惑力的名称,发送给目标电脑,诱使受害者打开附件,从而感染木马。 0x02 准备开始 久久拿不到shell,遂开始通过鱼叉攻击,希望获得一些收获 询问是否允许支持这类技术手段: 接着找同事提供素材,一封客户...

weixin_34306593的博客 869

半导体AMHS系统振动控制技术演进:从0.5G到超低振动的工艺革命

在半导体制造进入埃米级时代后,AMHS的振动控制能力将成为区分厂商技术等级的标尺。国内企业通过“弹性机械设计-混合主动控制-智能调度”的三重创新,正逐步突破0.2G阈值,支撑12英寸晶圆厂向3nm/2nm制程升级。未来,振动抑制不再仅是物流系统的性能参数,而是与光刻、刻蚀等核心工艺深度耦合的基础能力,这将重塑半导体设备产业的竞争格局。

m0_60674045的博客 1586

UNITY2022 Cardboard环境搭建

必须安装 Git,并且 git 可执行文件必须位于 PATH 环境变量中。考文档:https://developers.google.cn/cardboard/develop/unity/quickstart?转到 Assets/Samples/Google Cardboard//Hello Cardboard/Scenes/HelloCardboard 场景中。粘贴https://github.com/googlevr/cardboard-xr-plugin.git到文本输入字段中。

weixin_39510925的博客 1213
上一篇: Break Kernel主要的代码——Boot=3的rootkit专用的简单anti anti rootkit
下一篇: list File By Driver Samlpe Code
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值