歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix資訊 >> DOS解決Unix操作系統問題

DOS解決Unix操作系統問題

日期:2017/3/6 11:42:15   编辑:Unix資訊

也許在Unix操作系統中,你會忘記了管理員口令,雖然這是不可原諒的過失,但是還是不可避免的問題,今天。我們就來教大家一個解決這個問題的方法,比較一些傳統的方法更加適用。

因為雖然其它操作系統識別不了Unix操作系統的文件系統格式,但在任何操作系統上,我們都可以訪問物理硬盤;而只要是帶有訪問物理硬盤功能的軟件,都可以成為我們的操作工具。

大家最熟悉的操作系統無疑是DOS。可以訪問物理硬盤的軟件很多,但最易尋覓的莫過DEBUG.EXE。所謂最易尋覓,是因為DEBUG是DOS本身的一條外部命令,可以說只要是在安裝了DOS的機器上都可以找到它。

對DEBUG略知一二的人可能會指出該命令並沒有提供訪問物理硬盤的選項,但請不要忘記 DEBUG是DOS提供給用戶的一個匯編語言調試程序,我們完全可以利用它編寫、調試和執行一個匯編小程序去訪問物理硬盤。應該說,這對一個能夠取得系統管理員身份的人並不困難。

綜上所述,在DOS上運行DEBUG來破除Unix操作系統管理員口令,這就是本文提出的解決SCO Unix操作系統超級用戶口令被忘記問題的新方案。

新方案的應用

新方案已經提出,下面我們來看看它是如何應用於實踐的。我們假設一台裝有SCO OpenServer Release 5的超級用戶口令被忘記。

首先,隨便找一台安裝了DOS的計算機,制作一張DOS系統盤,並在系統盤上拷貝一個DEBUG.EXE文件。

  1. COS>format/s a:
  2. COS>copy debug.exe a:

然後將該盤插入COMPAQ服務器A驅,開機啟動DOS操作系統,執行DEBUG命令。

A:>debug

現在我們就編寫一段匯編語言程序,來讀出硬盤0柱0頭1扇區的內容。該Unix操作系統扇區存放的是主引導記錄,讀出它是為了確定SCO Unix操作系統分區的起始位置。該程序是調用中斷13H實現的,以後我們還要反復用到它,當然入口參數將隨所讀內容物理地址的變化而變化。

  1. -a
  2. 2039:0100 MOV AX,0201
  3. 2039:0103 MOV BX,1000
  4. 2039:0106 MOV CX,0001
  5. 2039:0109 MOV DX,0080
  6. 2039:010C INT 13
  7. 2039:010E INT 20
  8. 2039:0110
  9. -g
  10. Program terminated normally
  11. -d 1180
  12. 2039:1180 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
  13. 2039:1190 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
  14. 2039:11A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
  15. 2039:11B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
  16. 2039:11C0 01 6E 06 3F 20 96 00 70-03 00 00 48 01 00 00 00 .n.? ..p...H....
  17. 2039:11D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
  18. 2039:11E0 01 97 05 3F E0 FF 00 B8-04 00 00 C8 1B 00 80 00 ..c?............
  19. 2039:11F0 01 01 63 3F 20 6D 00 08-00 00 00 68 03 00 55 AA ..c? m.....h..U.

從分區表中可看出硬盤上共有三個分區,其中類型標志字節為 63H的分區是SCO Unix操作系統分區。該分區起始於1柱面0磁頭1扇。

下面,讀出Unix操作系統根文件系統i-node表的第一個扇區,以確定根目錄的位置。

先讀 i-node 表。由於Unix操作系統分區始於1柱0頭1扇,所以根文件系統必定始於2柱0頭1扇。並且,由於2柱0頭1扇是引導塊,2扇是專用塊,3、4扇為間隔,所以 i-node 表必定始於第5扇。

  1. -a
  2. 2039:0100 MOV AX,0201
  3. 2039:0103 MOV BX,1000
  4. 2039:0106 MOV CX,0205
  5. 2039:0109 MOV DX,0080
  6. 2039:010C INT 13
  7. 2039:010E INT 20
  8. 2039:0110
  9. -g
  10. Program terminated normally
  11. -d 1000
  12. 2039:1000 00 80 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
  13. 2039:1010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
  14. 2039:1020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
  15. 2039:1030 00 00 00 00 0A 4B 32 33-0A 4B 32 33 0A 4B 32 33 .....K23.K23.K23
  16. 2039:1040 ED 41 10 00 00 00 02 00-80 02 00 00 DA 05 00 00 .A..............
  17. 2039:1050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
  18. 2039:1060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
  19. 2039:1070 00 00 00 00 E1 83 C5 35-46 82 C5 35 46 82 C5 35 .......5F..5F..5

現在我們看到的是 i-node 表的前兩項。從偏移1040H至107FH的64個字節是2號i-node ,即根目錄的 i-node 。

下面我們就根據 i-node 計算根目錄在硬盤上的物理地址。

我們從偏移1040H看起:ED41H表示文件類型與存取權限為“drwxr-xr-x”;

  1. 1000H表示文件連結數為16;
  2. 0000H表示文件屬主ID為 0;
  3. 0200H表示文件組ID為 2;
  4. 80020000H表示文件字節數為 640個;

DA0500H表示第一個數據塊地址。由於其它12個數據塊地址均為 0,所以可斷定根目錄在硬盤上只占了一個數據塊。現在我們必須依據DA0500H計算出這個數據塊存放在硬盤的第幾柱面、第幾磁頭、第幾扇區。如何計算?作者專門總結了一套公式:

  1. C = TRUNC ( P/(H*S) )
  2. C1 = C0 + C
  3. H1 = TRUNC( (P-C*H*S)/S )
  4. S1 = P - C*H*S - H1*S + 1


其中:

C1、H1、S1分別為數據塊物理地址柱面號、磁頭號、扇區號
P等於數據塊地址翻譯成十進制數後再乘以 2
H為硬盤磁頭數
S為每磁頭扇區數
C0為根文

這樣,我們就完成了在Unix操作系統中忘記管理員密碼的解決方法的解析。希望大家能夠好好的學習。

Copyright © Linux教程網 All Rights Reserved