(一)模块组成

        感染过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 Queue中 remove/poll, add/offer, element/peek区别

    offer,add区别: 一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝. 这时新的 offer 方法就可以起作用了.它不是对调用 add() 方法抛出一个 unche ...

  2. cookie/session在nodes中的实战

    cookie 和 session 众所周知,HTTP 是一个无状态协议,所以客户端每次发出请求时,下一次请求无法得知上一次请求所包含的状态数据,如何能把一个用户的状态数据关联起来呢? 比如在淘宝的某个 ...

  3. CDC之Metastability

    1 CDC  A clock domain crossing occurs whenever data is transferred from a flop driven by one clock t ...

  4. 明明引用了jquery,js还是报错

    先引jquery,不然加载上一个js的时候jquery还没有加载 <script src="js/jquery-1.9.1.js" type="text/javas ...

  5. PAT_A1110#Complete Binary Tree

    Source: PAT A1110 Complete Binary Tree (25 分) Description: Given a tree, you are supposed to tell if ...

  6. es 存入失败错误

    {, 'error': {'type': 'illegal_argument_exception', 'reason': 'Rejecting mapping update to [bd_date] ...

  7. HDU 2267 How Many People Can Survive(广搜,简单)

    题目 //一道简单的广搜水题 #include<queue> #include<stdio.h> #include<string.h> #include<al ...

  8. Python学习【第1篇】:环境配置

    1. 下载安装包 https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64.msi    # 2.7安装包   https://www. ...

  9. 51nod1079 中国剩余定理【数论】

    一个正整数K,给出K Mod 一些质数的结果,求符合条件的最小的K.例如,K % 2 = 1, K % 3 = 2, K % 5 = 3.符合条件的最小的K = 23. Input 第1行:1个数N表 ...

  10. [jzoj 5770]【2018提高组模拟A组8.6】可爱精灵宝贝 (区间dp)

    传送门 Description Branimirko是一个对可爱精灵宝贝十分痴迷的玩家.最近,他闲得没事组织了一场捉精灵的游戏.游戏在一条街道上举行,街道上一侧有一排房子,从左到右房子标号由1到n. ...