阅读:2454回复:15
SoftIce的\"HBOOT\"命令是如何实现的呢??
大家都知道SoftIce中有这样一个命令\"HBOOT\",可在某些严重死机的情况下冷启动计算机,但它是如何实现的呢,我跟踪过TRW2000 1.22及1.23版,它的实现方式如下:
mov al,feh out 64h,al 而后我又查过中断手册,还有一种实现方式,代码如下: mov dx,0cf9h mov ax,04h out dx,ax 两种实现方式可以在实模式及ring0保护模式下达到冷启动的效果,但SoftIce似乎不是如此实现的,虽然反汇编其代码可找到如上指令代码,但我尝试修改后仍然能够冷启动计算机,那么它究竟是如何实现的呢,不知哪位同道对此有过研究,望不吝指教,先谢了! |
|
最新喜欢:![]() |
沙发#
发布于:2002-05-16 15:31
楼上的兄弟,你使用什么反汇编工具,是W32dasm吗?
ntice.sys文件那么大,有许多跳转表,一般软件处理不了 |
|
|
板凳#
发布于:2002-05-17 15:03
是W32Dasm,但我反汇编的是SoftIce for win9x v3.25,不是NT下的,即winice.exe
|
|
地板#
发布于:2002-05-22 13:21
May be ACPI....
|
|
|
地下室#
发布于:2002-05-24 13:00
用的
mov al,feh out 64h,al 我们以前一位兄弟在98下跟踪过softice.我保证100%是的 |
|
|
5楼#
发布于:2002-05-24 21:28
谁来写一小段代码?
|
|
|
6楼#
发布于:2002-05-24 22:27
在Win98下,用VXD, 在Windows2k下,用driver。也是写端口拉.
|
|
|
7楼#
发布于:2002-05-26 13:18
Softic中是有下面的代码,我
mov dx,0x0674 ; mov al , 0 ; out dx,al ; mov dx , 0x0670 ; out dx,al ; mov al,0xfe ; out 0x64,al ; 64端口是键盘的写端口,可是键盘的Power键扫描码是5Eh,而不是efh,我没有具体根踪SoftIce |
|
|
8楼#
发布于:2002-05-28 16:21
SoftIce中是有以上代码,但我把它屏蔽掉(NOP)后,\"HBOOT\"命令仍然能用,若把它附近的代码全都屏蔽掉,则会引发无效页错,可以肯定\"HBOOT\"命令是要执行到此处,但究竟如何实现的还要进一步的研究
|
|
9楼#
发布于:2002-05-29 11:39
你将那几条指令屏蔽了还可运行?
那几条指令屏蔽了有不可运行? |
|
|
10楼#
发布于:2002-05-29 14:11
测试需要时间,大家交流能够更快进步
所以我倡议大家多发言,多指点 |
|
|
11楼#
发布于:2002-05-30 20:55
以下是反汇编的相关代码段:
.... 0001d24e: mov edi,00000472 0001d253: add edi,dword ptr [00000000] 0001d259: mov dword ptr [00000000],00000000 0001d263: mov dword ptr [00000000],ffffffff /*这一段屏蔽掉不影响 0001d26d: mov ax,1234 0001d271: call 0000b8f6 */ 0001d276: in al,61 0001d278: push ecx 0001d279: mov ecx,00000014 0001d27e: loop 0001d27e 0001d280: pop ecx 0001d281: or al,0c 0001d283: out 61,al 0001d285: push ecx 0001d286: mov ecx,00000014 0001d28b: loop 0001d28b 0001d28d: pop ecx /*这一段屏蔽掉不影响 0001d28e: mov dx,0674 0001d292: mov al,00 0001d294: out dx,al 0001d295: mov dx,0670 0001d299: out dx,al 0001d29a: mov al,fe 0001d29c: out 64,al */ 0001d29e: mov ecx,00600000 0001d2a3: loop 0001d2a3 0001d2a5: mov ax,0010 0001d2a9: lgdt [00000000] //这一行屏蔽掉也不影响 0001d2b0: mov ds,ax 0001d2b3: retf 若把整段代码都屏蔽掉,则会产生无效页错,但不会冷启动,我估计应该是在retf返回后才会执行到,具体还要分析分析,大家可以一起交流一下 |
|
12楼#
发布于:2002-05-30 21:04
向8042端口64H写命令,其中0xFx命令定义如下: 0xFx: Pulse Output Port: Bits 0-3 of the 8042 output port can be pulsed low for 6 us; Bits 0-3 of command indicate which Bits should be pulsed; 0=pulse, 1=don\'t pulse; pulsing Bit 0 results in CPU reset since it is connected to system reset line.. 摘自PC机的硬件资料中8042的应用说明 |
|
13楼#
发布于:2002-05-31 09:49
兄弟能否将这内容全部贴出来,或者提供书的期号也行,多谢了 |
|
|
14楼#
发布于:2002-06-03 18:38
LIDT 0
|
|
|
15楼#
发布于:2002-06-06 16:53
很感谢lu0兄,你写的是lidt fword ptr [00000000]吧,你是如何找到的呢,静态反汇编分析还是动态跟踪?,由于SoftIce不允许对自身代码下断点,我试了几种办法中断它,诸如引发无效页错/无效代码错,但这样很容易死掉(先在内存中找到该段代码的地址,再用a命令直接修改其指令),我现在用的是折中的办法,自己写一个VXD,其中直接跳转到SoftIce的代码,但这只能验证上面我给出的代码,其中的两处:
a.0001d29a: mov al,fe 0001d29c: out 64,al b.0001d2a9: lgdt [00000000] 都是正确的,均可冷启动计算机,(双重保险???)但到了retf处就无法验证了,因此时esp保存的是我的堆栈结构,不是SoftIce的,同时我也发现了一个有趣的现象,看看以下的代码: 1.lidt fword ptr [00000000] 2.lidt fword ptr [ffffffff] 3.lgdt fword ptr [00000000] 4.lgdt fword ptr [ffffffff] 5.lidt fword ptr [xxxxxxxx] 6.lgdt fword ptr [xxxxxxxx] 每一行代码都可冷启动计算机,其中5和6表示只要[xxxxxxxx]所指向的内存地址是有效的,也可达到同样的目的。 retf指令执行后又运行到了何处,做了什么,我还不知道,曾看过DOS中断手册,好像SoftIce预留有接口,可允许外部程序执行它的内部命令,得查查看,若行的话,就可跟进去看看了,不知lu0兄可否指教一二,不胜感激!!! |
|