跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

MBR病毒IDA逆向分析与重写内容解读

精选回复

发布于
4042019032 于小涵

运行病毒

拍摄快照

1661324990247-433f2af0-8f5f-4282-a65d-789fec1c82b2.png

运行病毒,直接关机

1661324760547-f968be33-fe40-4007-92e3-72aa7a16f951.png

重启后出现下面的页面

1661324786025-884f20f2-70f0-4b15-8ef8-9607604cdc27.png

输入任意字符,回车后会清空

1661324805027-740897b5-70dc-48de-914c-10a47687e922.png

可以知道,该病毒破坏了windows的启动过程,要进入系统必须输入正确的口令,该病毒属于MBR病毒的类型

2 基础知识

硬盘的主引导区在0柱面0磁道1扇区,包括硬盘主引导记录MBR(Main Boot Record)、四个分区表DPT(Disk Partition Table)信息和主引导记录有效标志字三部分,如表所示:

0000-0088 Master Boot Record主引导程序 主引导程序 0089-01BD 出错信息数据区 数据区 01BE-01CD 分区项1(16字节) 分区表 01CE-01DD 分区项2(16字节) 01DE-01ED 分区项3(16字节) 01EE-01FD 分区项4(16字节) 01FE 55 结束标志 01FF AA

主引导记录MBR从0000H开始到00D9H结束,共218个字节。MBR的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。MBR是由分区程序(例如DOS 的Fdisk.exe)产生的,在不同的操作系统平台下,这个扇区的内容可能不完全相同。

3 猜解口令

恢复快照到运行病毒前

如果要找到开机口令那应该是非常的容易,将病毒拖入x32dbg,进行字符串搜索就可以锁定这个特殊的字符串,猜测其为口令

1661403238610-20aa8cb2-2331-440f-a0c8-f7cbe56b58b0.png

4 逆向分析

下面逆向分析病毒原理

首先使用Exeinfo PE查壳,发现无壳

1661411947153-9a7481af-59ca-412a-9200-c95817ab25d1.png

IDA中查看汇编指令,发现并没有很多识别不出来的红色语句,所以并没有花指令,到此可以知道病毒并没有保护

1661412146238-578f4deb-3114-4dc6-83b9-b7ec09e98816.png

既然涉及到关机,那么在windows系统下一定涉及到关机的API函数,经过查阅资料,可以找到

1661403797969-353cbd8a-6aa4-4975-bf70-2866555d4c4c.png

查找字符串

1661412268752-3fb6fb1c-aeff-4167-8476-4ec86fcc733f.png

找到关机API位置

1661412301646-2ad55e31-e096-48d4-bfce-529f96854562.png

查看其反编译代码

1661412353540-5cdd252d-550e-4cb9-afe0-a1580125b2d4.png

向上找到sub_4456D0函数

1661412459628-9b9193c2-7591-46fd-ade8-ef4cb0d1766f.png

查看函数内容

1661412798817-fabe1cf5-ecaa-4894-91f0-de6a7653f48b.png

找到当前进程伪句柄函数GetCurrentProcess、取得程序访问标记函数OpenProcessToken、查找进程权限函数LookupPrivilegeValue、获得关机权限函数AdjustTokenPrivileges,其作用为为关机做好提权

回到关机函数sub_4455E0,交叉引用向上查询

1661413338578-e7ab334b-4c7b-41c7-8f45-a4c9048f597a.png

1661413547415-1fee4ff2-57a8-4338-b7ff-93e549e8cf16.png

1661413806134-9cc8164c-f3ff-4e6e-a690-ac22c8821aaa.png

在这个函数中我们会发现关机函数的上面有两个一样的函数,其参数不一样

1661426700374-14005187-0075-46e0-8d84-7bb40726309d.png

结合之前字符串搜索中发现的本机电脑磁盘标识符,因此可以猜测是完成了MBR的读写操作

1661436671114-d6863aa5-3985-430f-84e0-af9b8dd17860.png

在病毒感染前使用winhex查看磁盘的MBR

1661416931590-b1956fb1-350a-4e39-b3f8-fce2b3066b7a.png

找到关机函数的地址,在X32dbg调试中设置断点,然后运行

1661416998801-91fcdcdc-27dd-4f02-8d5e-6743387fe04a.png

1661417266353-d03aebe8-6147-4e5d-b567-63c66b721a49.png

再次查看MBR,发现被修改

1661417120283-1140a3bd-2f9f-4fa6-a92c-b59f4da07dfd.png

5 重写内容分析

粘贴至新文件,导出MBR被重写的数据

1661426902338-c9ed3f0c-d3f9-4789-b2d9-47de1effe4f7.png

将其拖入IDA进行反汇编分析

注意选择no,引导程序为16位

1661427022756-f6a51ca8-612d-41bc-a867-1481ee951c1b.png

5.1 int 10h中断——屏幕显示

首先 int 10中断,这是BIOS对系统屏幕显示器所提供的服务程序,调用int 10h中断来控制显示器的显示控制显示器的显示

其中ES:BP是字符串地址,即00C2

1661428642141-43b45847-34e2-4c58-b9e1-7ccb981b438c.png

cx是14h,即串的长度为20字节

因此确定了开始屏幕上显示的**qq-17412666**

AH = 13,功能号,表示显示字符串

BH表示页号

DH DL表示起始行列

1661428365224-00290473-42d8-4daa-a3a7-15ba7b178843.png

5.2 int 16h中断——键盘读入

等待键盘键入字符,其中al代表键盘输入的字符

1661429084714-c22e6228-3f0a-4f47-98b9-261d0603dc74.png

5.3 第一次int 13h中断——密钥比较

下面是从扇区写入内存的中断操作,我们逐步探讨

1661429281840-96a08dda-4e05-4324-8230-3577d895751f.png

首先涉及到字符的比较,8对应的ASCII码是退格,如果检测到退格键则会跳转到loc_46

1661480318902-7f8969cc-bfa0-478b-9e7c-f2f77842d60c.png

我们看一下loc_46的内容,属于是清空操作,与退格键的功能对应

1661480396505-ebd80048-a0ae-4d44-a399-9042a5b0e4d0.png

第二次比较是与0Dh对应的ASCII码回车的比较,如果用户输入完毕进行了回车的话,那么就会跳转到loc_52

1661480526399-23db362b-d1c5-45c0-8566-cabb944ccc35.png

我们看一下loc_52的内容,一个段寄存器的转换,然后清空bx,继续进行下面的操作

1661480912783-3828d331-ad54-43d2-a037-d55dfb7bed73.png

若不是退格和回车键的话,就继续存入字符,[bx]存入键盘输入的字符,然后地址+2,cx记录输入字符的个数

1661480983684-92a625a9-7142-4193-b770-591deefb49a7.png

下面将注意力集中在回车之后的操作

loc_58这里给si写入了一个很重要的地址

1661481495545-676827af-f7a5-4a24-94e4-ea69bc188649.png

其正好是以下字符串的初始地址

1661430065131-d1010f41-e295-4751-a701-37246d4c4334.png

下面就开始字符的比较,al是键盘输入的字符,ah是上面的字符串中的逐个字符,如果不相等的话会跳转到loc_9C进行出错处理;每个字符如果比较完成,就会取下一个字符继续比较,完成循环,loop循环次数由cx决定,即我们输入的字符的数量

1661481850313-6b9687f8-fffd-4e94-a3c3-858ac0d91863.png

再往下是为中断做参数准备

1661481993804-a47f9152-55d8-4f31-8814-bf1436d46a07.png

所以,按照上面的分析,我们只要将输入的字符与d8h地址开始的字符逐一比较,这就是口令

5.4 第二次int 13h中断——MBR写回

1661430131677-5ce04c3f-932d-45d5-ba56-886b56eee95a.png

从内存将MBR写入扇区

6 遇到的问题

输入我们分析的口令之后并没有进入系统,而是出现了下面的情况,卡死在下面的页面,这个问题到现在还没有解决

1661482775252-0b60d672-1bb1-4ebd-85e2-9d655d665a2d.png

和同学讨论发现,XP虚拟机不会存在这样的问题,可能是win7的引导与xp有区别导致的

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。