(一)模块组成

        感染过Sinowal的电脑,Sinaowal在硬盘中的分布例如以下图:
; Sector                 Offset                 Size                          Name
; ----------------------------------------------------------------------------------------------------------------------
; 0                         0000h             512             Bootloader
; 60                       7800h             512             Ntldr Hook Code
; 61                       7A00h             512             Kernel Code
; 62                       7C00h             512             Original Bootloader
(二)Bootloader 分析
     (a)  Bootloader 的主要功能。
首先将sinowal的其它部分读入内存。然后Hook int 13h ,最后将原始的BootLoader 载如内存 0x7c00处。运行原始代码。
内存映像为:
| 0x9f400 - 0x9f600   |  0x9f600 -0x9f800  | 0x9f800 -0x9fa00 |
; ----------------------------------------------------------------------------------------------------------------------
|Bootloader               |  Ntldr Hook Code    | NtosHookCode   |
(b)int 13hook 函数的运行逻辑
     在读入的数据流中搜索特征码 8B F0 85 F6 74 21 80 3D 这段特征码相应的代码例如以下:
.text:00422A6A      call    _BlLoadBootDrivers@12 ;
.text:00422A6F mov esi, eax 。8bf0
.text:00422A71 test esi, esi ;85f6
.text:00422A73 jz short loc_422A96 ;7421
.text:00422A75 cmp _BlRebootSystem, 0 ;80 3D F8 AE 43 00 00
定位到特征码后,进行第一次Hook  将8B F0 85 F6 74 21 的6个字节替换为ff 15 fc f5 09 00 即 call  dword  ptr  [0x9f5fc], Hook后的代码例如以下:
.text:00422A6A       call    _BlLoadBootDrivers@12
.text:00422A6F call dword ptr [0x9f5fc] 。注:[0x9f5fc]保存的地址是 0x9f600,为Ntldr Hook Code
.text:00422A75 cmp _BlRebootSystem, 0;
(三)Ntldr Hook Code 分析
     (a) 保存现场环境
mov esi,eax
test eax,eax
pushf
jnz Hook_Handler
add [esp+4],dword 21h
Hook_Handler:
pushad
mov edi,[esp+24h]
and edi,0FFF00000h
          *** *** ***
     (b)搜索全局变量 BlLoaderBlock
      将函数函数的返回地址按4kb对齐,然后在Ntldr代码区搜索特征码 C7 46 34 00 40 ,该特征码相应的代码为:
.text:00415914                 mov     dword  ptr [esi+34h], 4000h     。 C7 46 34 00 40
.text:0041591B mov word ptr [esi+38h], 1 ; 66 C7 46 38 01 00
.text:00415921 mov eax, _BlLoaderBlock ; A1 C4 82 46 00 注 :C4 82 46 00 为地址部分
         由此可定位到 BlLoaderBlock,其类型为PLOADER_PARAMETER_BLOCK,。在BlLoadBootDrivers调用以后,全部Boot型的驱动都会被                                  增加到内存中,相关信息,如地址,名称,大小等都会保存到链表 BlLoadBootDrivers中。
      (c)定位系统初始化时IoInitSystem的调用点
        依据上一步骤获取到的BlLoadBootDrivers可定位到NtosKernel的ImageBase 和SizeOfImage。然后搜获特征码6A 4B 6A 19 E8 * * * * E8 * * * *
         此处相应的代码为:
INIT:005ACEC9          push    4Bh                                         ;6a 4b
INIT:005ACECB push 19h 。6a 19
INIT:005ACECD call _InbvSetProgressBarSubset@8 ; E8 **
INIT:005ACED2 push dword ptr [ebp-470h]
INIT:005ACED8 call _IoInitSystem@4 ; E8 **
         由此可搜索到IoInitSystem  将IoInitSystem地址 和 Ntoskenel 基址保存在 0x9f800 + 4 和 0x9f800 + 0xc处
         将0x9f800 —0x9fa00处共512字节的代码挪至Ntoskenel 尾部(0x8068)
         将 call  _IoInitSystem@4 替换成 call 0x8068 完毕对NtOskernel的hook
(四)Kernel Code  Hook
       依据之前保存的Ntoskenel 基址,搜索到ExAllocatePool 申请一片内存(分页内存池和非分页内存池都已初始化完成)。将代码挪个窝
       然后调用 原始IoInitSystem。调用完毕后,windows运行体函数大多能够使用了。
       可搜索ZwCreateKey,ZwClose创建“Registry\Machine\System\BootKit”

Sinowal Bootkit 分析-中国红客网络技术联盟 - Powered by Discuz!的更多相关文章

  1. FD.io 社区中国行暨未来网络技术沙龙 南京站 参会小结

    FD.io 社区中国行暨未来网络技术沙龙 南京站,2018 年 3 月 17 日. 开场致辞 Ray 介绍了一些有的没的 ⁃ (Future Event)DPDK summit, FD.io summ ...

  2. 参加2013中国大数据技术大会(BDTC2013)

    2013年12月5日-6日参加了为期两天的2013中国大数据技术大会(Big Data Technology Conference, BDTC2013),本期会议主题是:“应用驱动的架构与技术 ”.大 ...

  3. [转载] Google数据中心网络技术漫谈

    原文: http://www.sdnlab.com/12700.html?from=timeline&isappinstalled=0#10006-weixin-1-52626-6b3bffd ...

  4. 探索云网络技术前沿,Sigcomm 2019 阿里云参会分享

    Sigcomm 2019简介 一年一度的网络顶级学术峰会Sigcomm于8月20日至22日在北京举行.作为ACM Special Interest Group on Data Communicatio ...

  5. CDN 内容分发网络技术

    1.前言 Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加,用户数量也在不断增加,受Web服务器的负荷和传输距离等因 ...

  6. 深入理解linux网络技术内幕读书笔记(三)--用户空间与内核的接口

    Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...

  7. 2016中国大数据技术大会( BDTC ) 共商大数据时代发展之计

    中国大数据技术大会(BDTC)的前身是Hadoop中国云计算大会(HadoopinChina,HiC).从2008年仅60余人参加的技术沙龙发展到当下数千人的技术盛宴,目前已成为国内最具影响力.规模最 ...

  8. Android学习之基础知识十二 — 第一讲:网络技术的使用

    这一节主要讲如何在手机端使用HTTP协议和服务器端进行网络交互,并对服务器返回的数据进行解析,这也是Android中最常用的网络技术. 一.WebView的用法 有时候我们可能会碰到比较特殊的需求,比 ...

  9. 无线Mesh网络技术基础与应用

    无线Mesh网络主要包含三类节点,构成了Mesh的基本服务集. 1.与有线网络相连的节点(GateWay节点),其主要负责实现无线Mesh网络和有线网络的数据交换. 2.可以进行Mesh组网并拥有Ro ...

随机推荐

  1. Java中Ajaxa中文乱码问题

    客户端: url='test/queryList?itemName='+itemName; //如果只转一次url=encodeURI(toUrl);   到后台时:乱码    servlet里dec ...

  2. Obsolete---标记方法 类过期

    最近做一个接口的修改,由于是很老的接口,不太了解外部有多少地方引用了它. 但是内部的方法由于业务发展已经不太适合现在的需求,想改又不该动.所以想到了如果设置为过期. Obsolete 属性将某个程序实 ...

  3. Ionic3 环境搭建以及基础配置实现(更新中)

    GitHub:https://github.com/Teloi 环境配置输入以下命令安装 Ionic (如果刚才设置了淘宝镜像源,可以使用 cnpm 代替 npm):npm install -g io ...

  4. Android自定义开机和关机动画

    Android自定义开机和关机动画 Android在开机的过程中,会经历三张图片,关于静态图的修改在我的这篇文章中有介绍到: Android开机图片替换 现在要介绍的是怎么用动画替换静态图片.开/关机 ...

  5. hibernate中的懒加载和急加载

    懒加载(FatchType.LAZY)是Hibernate为提高程序执行效率而提供的一种机制,简单说就是只有正真使用其属性的时候,数据库才会进行查询. 具体的执行过程就是:Hibernate从数据库获 ...

  6. HDU_1711_初识KMP算法

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  7. RBM(受限玻尔兹曼机)和深层信念网络(Deep Brief Network)

    目录: 一.RBM 二.Deep Brief Network 三.Deep Autoencoder 一.RBM 1.定义[无监督学习] RBM记住三个要诀:1)两层结构图,可视层和隐藏层:[没输出层] ...

  8. eas之编码规则&单据转换规则

    *当在企业建模中没有要显示的项目的话,则从包更新到系统树然后选择到规则定义,对申请单新增规则. 企业建模--业务规则-规则定义组织优先  多组织有先  集团优先固定值 显示格式PUR ..系统日期 2 ...

  9. switch 语句的反汇编浅析

    switch 的简单情景(case 不超过 3 项) 首先,我们分析一下 switch 语句的一种简单情景,我们可以用 C 写出如下如下代码. 编译后用 OllyDBG 载入,它将显示出如下的反汇编代 ...

  10. 高举 Vue-SSR

    将同一个组件渲染为服务器端的 HTML 字符串,将它们直接发送到浏览器,最后将静态标记"混合"为客户端上完全交互的应用程序. SSR的目的 To solve 首屏渲染问题 SEO问 ...