(一)模块组成

        感染过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. POJ 1101 译文

    The Game 题意: Description One morning, you wake up and think: "I am such a good programmer. Why ...

  2. C#中通过js实现个人用户和非个人用户的登陆

    实现用户的登录功能,这里举一个个人和非个人用户的登录的例子 前台代码: <ul class="login_list clearfix"> <li> < ...

  3. 【SQL】CASE与DECODE

    1. case..when case..when语句用于按照条件返回查询结果,如当我们想把emp表的工资按照多少分成几个不同的级别,并分别统计各个级别的员工数.SQL语句如下: select (cas ...

  4. 国外AI界牛人主页 及资源链接

    感觉 好博客要收集,还是贴在自己空间里难忘!!! 原文链接:http://blog.csdn.net/hitwengqi/article/details/7907366 http://people.c ...

  5. sql 排序

    select count(*) from vote group by contents PERCENT * from vote order by contents)as A group by cont ...

  6. Python2X和Python3X 除法运算符的使用:

    首先注明:如果没有特别说明,以下内容都是基于python 3.4的. 1. /是精确除法,//是向下取整除法,%是求模 2. %求模是基于向下取整除法规则的 3. 四舍五入取整round, 向零取整i ...

  7. webpack学习(三)

    前篇:webpack学习(二) jquery不需要在项目中自己下载,而是作为一个模块引入.jquery的存放路径是在 node_modules目录下.1.首先给项目安装jquery,npm insta ...

  8. 【转载】JSP 中EL表达式用法详解

    EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...

  9. 【转载】关于DBUtils中QueryRunner的一些解读

    前面已经有文章说了DBUtils的一些特性, 这里再来详细说下QueryRunner的一些内部实现, 写的有错误的地方还恳请大家指出. QueryRunner类 QueryRunner中提供对sql语 ...

  10. 【剑指Offer】36、两个链表的第一个公共结点

      题目描述:   输入两个链表,找出它们的第一个公共结点.   解题思路:   本题首先可以很直观的想到蛮力法,即对链表1(假设长度为m)的每一个结点,遍历链表2(假设长度为n),找有没有与其相同的 ...