| 网站首页 | 资讯 | Hack | 漏洞 | 网管 | 编程 | 培训 | 品黑页 | 软件 | 论坛 | 动画 | 视频 | 经典 | 教学站 | 黑客点睛 | 
服务导航 我要发布 主力频道 空间域名 精华收集 服务器出租 黑客培训 光盘刻录 特色服务 解决方案 我要投诉
您现在的位置: 华夏黑客同盟 >> 编程 >> 其它编程 >> 正文 用户登录 新用户注册
机器狗0625技术的剖析         ★★★ 【字体:
机器狗0625技术剖析(驱动读写磁盘扇区)
作者:不详 文章来源:华盟收集 点击数: 更新时间:2008-8-5

  由于对磁盘结构不是很熟,仅仅从逆向分析的角度,通过对这个驱动的分析过程,学习了向SCSI端口向扇区写数据的方法。如有错误或纰漏之处,请大家指出。

  摘要

  这是一个6月23号捕获的机器狗变种。跟之前不同的地方,主要是将以前ring3下写磁盘替换文件的操作使用驱动实现了,本文的主要部分也是对该部分的解析。可以看出,机器狗的作者对内核驱动以及磁盘结构都很熟悉。

  三、驱动分析

  1、基本信息

  文件名:%windir%\system32\drivers\obj2.sys

  DeviceName:\\Device\\DogBaby

  SymbolicLinkName:\\DosDevices\\DogBaby

  2、摘除ntfs的AttachedDevice

  3、恢复disk的Hook

  1)、摘除disk的AttachedDevice

  2)、根据_DRIVER_OBJECT.DriverSection获得_LDR_DATA_TABLE_ENTRY的链表,枚举该链表查找名为CLASSPNP.SYS的模块,找到则获取该模块的基址Base和EntryPoint,如果EntryPoint - Base等于0AE8Fh(入口的RVA),则取g_pClassInternalIoControl = Base + 4FC3h。然后注册驱动disk的派遣例程为_DRIVER_OBJECT.IrpInternalDeviceControlDispatch = pClassInternalIoControl。

  4、摘除FtDisk的AttachedDevice

  5、摘除Atapi的AttachedDevice

  6、恢复Atapi的Hook

  1)、读取atapi.sys文件,并定位pe头、及块表。

  2)、定位到init块,从init块中使用模糊匹配特征C7 ?? 30 ?? ?? ?? ?? C7 ?? 34。

  3)、找到的地址为24968h,记为Atapi_24968h。

  4)、取Atapi_24968h + 11h的位置,并换算成RVA,得到fnRVA_IdePortDispatch。

  5)、取Atapi_24968h + 18h的位置,并换算成RVA,得到fnRVA_IdePortDispatchDeviceControl。

  6)、如果上面的方法获取失败,则强制转换:

  fnRVA_IdePortDispatch = 67B4h,

  fnRVA_IdePortDispatchDeviceControl = 0A592h。

  7)、获取这两个函数的SVA

  fnIdePortDispatch = fnRVA_IdePortDispatch + DriverStart,

  fnIdePortDispatchDeviceControl = fnRVA_IdePortDispatchDeviceControl + DriverStart。

  8)、注册Atapi的派遣例程

  _DRIVER_OBJECT.IrpDeviceControlDispatch =

  fnIdePortDispatchDeviceControl,

  _DRIVER_OBJECT.IrpInternalDeviceControlDispatch = fnIdePortDispatch。

  7、定位被覆盖文件的逻辑簇号

  1)、打开文件conime.exe,失败则打开userinit.bat;并获取FileObject。

  2)、根据FileObject获取_FILE_OBJECT.Vpb,再获取_VPB.DeviceObject。

  3)、创建一个IRP。设MainFunction为IRP_MJ_FILE_SYSTEM_CONTROL。

  4)、设定_IO_STACK_LOCATION.FsControlCode =

  FSCTL_GET_RETRIEVAL_POINTERS

  //其它IRP初始化略过,详细请看idb文件。

  5)、调用自己实现的IOCallDriver,获取指定文件的RETRIEVAL_POINTERS_BUFFER信息。

  结构查阅msdn如下:

typedef struct RETRIEVAL_POINTERS_BUFFER {
   DWORD ExtentCount;
   LARGE_INTEGER StartingVcn;
   struct {
     LARGE_INTEGER NextVcn;
     LARGE_INTEGER Lcn;
   } Extents[1]; 
} RETRIEVAL_POINTERS_BUFFER, 
*PRETRIEVAL_POINTERS_BUFFER;

  要注意的是按8个字节对齐的,所以DWORD ExtentCount后、LARGE_INTEGER StartingVcn前有4个字节的空间

  ExtentCount记录了该文件分成了n块存储。

  StartingVcn记录了起始虚拟簇号。

  Extents[i].NextVcn记录了下一个块的起始虚拟簇号,所以Extents[i].NextVcn - Extents[i - 1].NextVcn表示i块所占的簇数。

  Extents[i].Lcn记录了第i + 1块的起始逻辑簇号。注意i是从0开始的。

[1] [2] [3] 下一页

责任编辑:朱倩  联系方式  Email:朱倩
电话:51228163
  • 上一篇编程:

  • 下一篇编程:
  • (只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
    姓 名:
    * 游客填写  ·注册用户
    主 页:
    评 分:
    1分 2分 3分 4分 5分
    评论内容:
    验证码: *
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  • 最新hack更新
    最新推荐资讯
    相关编程
    “三无”后门(序章)
    CDO.Message做vbs下载者
    vbs类的使用方法
    免疫最新机器狗批处理
    机器狗文件下载者源码
    VC++多线远程IPC木马
    利用JCOM实现仿excel
    asp实现在线人数
    从零开始学ASP.NET
    执行控制台程序并且获得它的输出
    最新会员软件
    最新推荐视频
    最新推荐动画

    Copyright @ 2005 77169.Net Inc. All rights reserved. 华夏黑客同盟 版权所有
    北京市电信通提供网络带宽

    mailto:webmaster@77169.net
    咨询QQ号:836982 / 59280880
    联系站长 QQ38588913
    热线电话: 86-10-67634029/676229433
    京ICP证041431号