低内存地址0x4c和0x4e

时间:2012-10-15 08:18:33

标签: assembly x86 interrupt bios

我试图反转mbr rootkit并遇到低内存地址0x4c和0x4e的问题。 我不知道他们的目的地。

[0x000000000009f51c] 9f40:011c (unk. ctxt): xor ax, ax                ; 33c0
[0x000000000009f51e] 9f40:011e (unk. ctxt): mov ds, ax                ; 8ed8  
...  
[0x000000000009f52e] 9f40:012e (unk. ctxt): cli                       ; fa
...
[0x000000000009f52f] 9f40:012f (unk. ctxt): xor ax, ax                ; 33c0
[0x000000000009f531] 9f40:0131 (unk. ctxt): mov word ptr ds:0x4c, ax  ; a34c00
[0x000000000009f534] 9f40:0134 (unk. ctxt): mov ax, es                ; 8cc0
[0x000000000009f536] 9f40:0136 (unk. ctxt): add ax, 0x0040            ; 054000
[0x000000000009f539] 9f40:0139 (unk. ctxt): mov word ptr ds:0x4e, ax  ; a34e00
[0x000000000009f53c] 9f40:013c (unk. ctxt): sti                       ; fb

在9f40:0131 DS为零。

1 个答案:

答案 0 :(得分:2)

实模式中断向量表从地址0开始,它包含256个4字节(远)指向256个中断服务程序的指针。

0x4c / 4 = 19,0x4e / 4 = 19,因此代码正在访问指向矢量19(= 0x13)的ISR的指针。

该ISR很特殊,它使用int 0x13指令调用以访问磁盘。查看拉尔夫·布朗的中断名单了解详情。

上述代码在中断向量表中更改了此ISR的地址。它可能会拦截来自其他软件(例如OS加载程序)的磁盘I / O,因此它可以伪造一些数据。

它将ISR地址设置为0x40:0,这是在中断向量表结束之后。