LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: weixiao

RH7.3最终汉化实例与RedHat软件设置

[复制链接]
发表于 2007-6-15 18:42:35 | 显示全部楼层

=== VMware + LFS系统安装 John the Ripper ===

=--= John the Ripper (www.openwall.com/john
注:可以选择在RH7.3系统安装 john-1.7.0.2-3.rh7.rf.i386.rpm 二进制包,试用操作基本一样。

解压john源码包
# cd /usr/src/
# tar -xvf john-1.7.0.2.tar.gz

准备
# cd john[tab键]
# cat doc/INSTALL
# cat src/Makefile
# touch install-test

操作
# cd src
# make
# find / -path '/proc' -prune -o -path '/sys' -prune -o -path '/dev' -prune -o -cnewer ../install-test

# make > /tmp/john-note
# cat /tmp/john-note | more

挑选SYSTEM,执行:
# make clean linux-x86-any
[ 如果编译出错,重新解压源码包,改用‘make clean generic’编译指令。]

检查
# find / -path '/proc' -prune -o -path '/sys' -prune -o -path '/dev' -prune -o -cnewer ../install-test

测试
# cd /usr/src/john-1.7.0.2/run/
# ./john --test

测试通过后,还可以选择把john工作程式集复制到合适的工作目录,例如:
# cd /root
# cp -a /usr/src/john-1.7.0.2/run ./john-run
# cp -a /usr/src/john-1.7.0.2/doc ./john-run/
# ./john-run/john --test

-------
-------
回复 支持 反对

使用道具 举报

发表于 2007-6-15 18:46:27 | 显示全部楼层

=== VMware + LFS系统试用 John the Ripper ===

1. 整合/etc/passwd和/etc/shadow,还原密码档

刚制作成的LFS系统只有root一个账号:
# cat /etc/passwd /etc/shadow

整合密码档
# /root/jonh-run/unshadow /etc/passwd /etc/shadow > /root/c-passwd
# cat /root/c-passwd

注:若不整合密码档,而取单一的/etc/shadow作为john破解的密码档,那么john程式不能使用 "--groups" 、"--shells"选项和"--users"选项不能设置UID,并且‘single crack’模式不能采用"Full Name/GECOS"资讯来破解工作。

2. 尝试执行john程式

# cd /root/john-run/
# ls
[ 工作目录常用john.conf是总配置文件,password.lst是字典档模式使用的字典。总配置文件中‘$JOHN’变量是指工作目录(/root/john-run),而配置的工作模式有"Single Crack"模式,字典档模式,增强模式和扩充模式。 ]

‘john c-passwd’属于自动化执行方式,程式自行判断‘破解账号’的加密方式,如DES或MD5等。首先执行"Single Crack"模式,然后执行字典档模式,并相应规则(rules)设置,最后执行增强模式。

执行john自动方式
# ./john /root/c-passwd
Loaded 1 password hash (FreeBSD MD5 [32/32])
[Ctrl+C] 中断破解工作

即时查看产生的文件档案
# find ./ -cmin -7
./
./john.log (破解过程中的log文件)
./john.pot (存储破解出的密码,那么john不会重复已破解的账号)
./john.rec (破解进度档,如 Ctrl+C中断任务,实现‘--restore’恢复任务)

中断后恢复任务
# ./john --restore
.................
.................
[Ctrl+C] 中断破解工作
注 john 默认每10分钟,存储一次john.rec破解进度档 。

命令行查看已破解出的密码(john.pot)
# ./john --show /root/c-passwd
0 password hashes cracked, 1 left

完全终止,并清理该次的破解工作
# rm ./john.{log,pot,rec}

------
------
回复 支持 反对

使用道具 举报

发表于 2007-6-15 18:50:12 | 显示全部楼层

=== VMware + LFS系统 + John the Ripper 试用笔记 1 ===

john.conf配置文件内容,以及规则文件语法,参考 doc/OPTIONS 和 doc/RULES 。
平时最常用到 "Single Crack" 模式 和 字典档模式:

"Single Crack" 模式
"Single Crack" 破解模式是针对帐户使用"Full name/GECOS"资讯设置口令,虽然john.conf配置文件内相应规则设置还是不太明白,确从测试中感觉破解速度超快。

LFS系统里测试
添加测试账号:
帐号名 > wei-test
password > weitestweitest
GECOS > Good morning
[ GECOS (General Electric Comprehensive Operating System) ]

# groupadd wei-test
# useradd -g wei-test -c 'Good morning' -d /home/wei-test -s /bin/bash wei-test
# passwd wei-test

# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
wei-test:x:1000:100:Good morning:/home/wei-test:/bin/bash

整合密码档
# /root/john-run/unshadow /etc/passwd /etc/shadow > /root/c-test
# cat /root/c-test

破解wei-test口令(参考 doc/EXAMPLES )
# cd /root/john-run/
# ./john
[ 显示帮助信息 ]

# ./john --single --users=wei-test /root/c-test
Loaded 1 password hash (FreeBSD MD5 [32/32])
weitestweitest (wei-test)
guesses: 1 time: 0:00:00:00 100% c/s: 2733 trying: weitestweitest

再指定passwd测试
# passwd wei-test
New password: weimorning

# ./unshadow /etc/passwd /etc/shadow > /root/c-test
# ./john --single --users=wei-test /root/c-test
[ 若显示 guesses: 0,则破解失败。 ]

显示破解出的密码
# cat john.pot
[ 或者使用 --show选项 ]

删除测试帐号
# userdel -r wei-test
[ 若出现移除/home/wei-test的错误信息,由于LFS系统没有进一步定制,属于正常。‘cat /etc/passwd’验证 ]

# rm /root/c-test

-------
------
回复 支持 反对

使用道具 举报

发表于 2007-6-15 18:55:56 | 显示全部楼层

=== VMware + LFS系统 + John the Ripper 试用笔记 2 ===

字典档模式

参考 doc/EXAMPLES ,下载程式推荐的字典(all.gz)

# cp all.gz /root/john-run/
# du -h /root/john-run/all.gz
42M /root/john-run/all.gz

# file /root/john-run/all.gz
/root/john-run/all.gz: ASCII C++ program text
[ 注 john程式默认使用password.lst字典 ]

整合LFS系统root口令
# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
# /root/john-run/unshadow /etc/passwd /etc/shadow > /root/c-passwd

===
a 字典档模式,破解例子:
# cd /root/john-run/
# ./john
[ 显示帮助信息 ]

# ./john --wordlist=/root/john-run/all.gz /root/c-passwd
[ 破解过程中,按键,会显示当前进度信息 ]
guesses: 0 ....... ....... 破解失败

启用规则(--rules)
# ./john
# ./john --wordlist=/root/john-run/all.gz --rules /root/c-passwd
.............
guesses: 0 time: 0:08:09:17 100% c/s: 4674 trying: Wysifigging
破解失败,累计使用时间约8小时

===
b 字典档模式,接受标准输入(--stdin)
--stdin选项是通过标准输入,方便手动猜测的字典档破解方式。

例子:
# cd /root/john-run/
# ./john

# echo 'wei#@12##' | ./john --stdin /root/c-passwd

# ./john --stdin /root/c-passwd << "EOF"
> wei#@12##
> passwdwei%#
> EOF
[注 创建 标准输入 方法很多,如‘cat files’]

===
c 添加一个手动猜测成功的例子

# cd /root/john-run/
# echo lfspassword | ./john --stdin /root/c-passwd
Loadded 1 password hash (FreeBSD MD5 [32/32])
lfspassword (root)
guesses: 1 time: 0:00:00:00 c/s: 33.33 trying lfspassword

命令行显示破解出的密码
# ./john --show /root/c-passwd
root:lfspassword:0:0:root:/root:/bin/bash
1 password hash cracked, 0 left

-------
note:
口令密码字串‘lfspassword’没有在以下环境被破解:
john程式+字典档模式+all.gz字典(free)+默认规则设置+8小时时间

-------
all.gz字典下载站点:
http://www.openwall.com/wordlists/
http://www.openwall.com/mirrors/
-------
回复 支持 反对

使用道具 举报

发表于 2007-6-17 16:26:19 | 显示全部楼层

=== VMware + LFS系统 + John the Ripper 试用笔记 3 ===

参考资料:网上‘John the Ripper 中文说明’

略窥john程式的‘增强模式’‘扩充模式’
--incremental ‘增强模式’使用合理设置的字元组合,比对密码的破解方式。
--external ‘扩充模式’john.conf内置 破解工作 相关的函数段,能够直接调用。

由于my的LFS系统设置的root口令长度是11位(lfspassword),而john程式设计的字元组合有‘8位限制’。下面操作只窥探字元组合,不参予破解工作。

(aaa) ‘增强模式’字元组合
# cd /root/john-run/

参考john.conf,‘Incremental modes’段落,例子如下:

[Incremental:All] 段内容
# ./john
# ./john --incremental --stdout

[Incremental:Alpha] 段内容
# ./john --incremental=Alpha --stdout

[ 注 可以选择Ctrl+C中断操作 ]

(bbb) ‘扩充模式’直接调用函数,my的例子:
参考john.conf,[list.External:Strip] 段落

# cd /root/john-run/
# vi john.conf
-----------------------------[list.External:Strip] 段落
minlength = 4 修改成 minlength = 11
maxlength = 8 修改成 maxlength = 11
-----------------------------

# ./john
# ./john --external=Strip --stdout
# ./john --external=Strip --stdout > /tmp/test

===
john操作遇上的问题:
# ./john --incremental --stdout > /tmp/mem-test

命令执行完成,或者Ctrl+C中断后。使用free命令显示结果中,若使用空间(used)占用太大,操作Vi软件,会显示‘E297: Write error in swap file’的错误信息。]

[ Crack5.0程式操作遇上该问题,‘make tidy’命令清除临时文件。]
[ john程式遇上该问题,my尝试多种方法,‘rm /tmp/mem-test’能释放‘used’内存,或重启系统。 ]
[ 从而取消使用 --stdout 选项制作字典的想法。]

===
注:
RH7.3系统选择安装 john-1.7.0.2-3.rh7.rf.i386.rpm 二进制包,gnome环境下操作 感觉速度还快。

------
----
回复 支持 反对

使用道具 举报

发表于 2007-6-17 16:33:53 | 显示全部楼层

摘录: Crack5.0 规则文件语法

[color="DarkRed"] Crack5.0 规则文件语法
--------------------------------------------------
操作符 | 说明
: 或 space | 无操作符标志,仅使规则文件更清晰。space表示‘手按空格键’操作
^x | 将x加到单词的前面
$x | 将x加到单词的后面
r  | 将单词中的字母反序
u  | 将单词中的所有字母变为大写形式
l  | 将单词中的所有字母变为小写形式
p  | 根据语法规则将单词变为复数形式
c  | 第一个字母大写,其余小写
C  | 第一个字母小写,其余大写
t  | 将单词中每个字母的大小写变为相反形式
d  | 将本单词复制后连接到自身后面
f  | 将本单词的反序连接到自身后面
sxy 或 s?cy | 将单词中每一个x 用 y 替换,或将单词中每一个c类字符(?c)用y替换
/x 或 /?c | 如果单词中没有字符x,或没有c类字符,则忽略该单词
!x 或 !?c | 如果单词中含有字符x,或含有c类字符,则忽略该单词
<n | 忽略所有长度大于等于n 的单词
>n | 忽略所有长度小于等于n 的单词
xnm | 从第n个字符起取出m个字符
onx | 将字符x用单词的第n个字符替换,不进行边界检查,因此该选项应与 > 或 < 一起使用
inx | 在单词的第n个字符前插入字符x ,所有后面的字符右移一位
=nx 或 =n?c | 若单词第n个字符不是x,或者不是c类字符(?c),则忽略该单词
@x 或 @?c | 删掉所有字符x 或 c类字符
[ | 删掉单词的第一个字符
] | 删掉单词的最后一个字符
(x 或 (?c | 如果单词第一个字符不是x,或不是c类字符,则忽略该单词
)x 或 )?c | 如果单词最后一个字符不是x,或不是c类字符,则忽略该单词
* | 恢复单词为其原始形式
'n | 将单词截断,成为n个字符
%nx 或 %n?c | 若单词中字符x的个数不为n,或c类字符的个数不为n,则忽略该单词
--------------------------------------------------

[color="darkred"]规则文件的数字参数
--------------------------------------------------
数字参数 | 意义
0,1,2,......,9 | 数值 0,1,2,3......,9
A,B,C,......,Z | 数值 10,11,12,......,36
* | 明文口令的最大字符数。DES是8,bigcrypt是16,MD5默认是16(尽管MD5说可以是任意)
+ | *+1,即DES是9,bigcrypt是17,MD5默认是17
- | *-1,即DES是7,bigcrypt是15,MD5默认是15
--------------------------------------------------

[color="darkred"]规则文件的类定义
--------------------------------------------------
类 | 定义
?a 或 ?A | 字母字体
?c 或 ?C | 常量
?d 或 ?D | 数字
?l 或 ?L | 小写字母
?p 或 ?P | 标点
?s 或 ?S | 符号
?u 或 ?U | 大写字母
?v 或 ?V | 元音字母
?w 或 ?W | 空白
?x 或 ?X | 字母数字字符
--------------------------------------------------


[color="darkred"]规则示例:

!?Ald
若单词不含有字母(?A),则所有字符小写(l),并在其后粘贴单词(d)

/isi2l
若单词中出现字符i,则用数字2替换,再把所有其它字符变为小写形式(l)

/ese3/asa2/sss$l
若单词含有字符e 、a 、s ( /e,/a,/s ),分别用3 、2 、$ 替换,再把其余字符小写(l)

!?A^:
若单词不含字母(?A),则在其前面加空格( ^: )

^($)
在单词前面加字符 (  
在后面加字符 )  

=====
[color="Sienna"]注 例子:以下意思大致相同

Crack5.0 规则
-------------------
>n | 忽略所有长度小于等于n 的单词
-------------------

John the Ripper 的 RULES文档
----------------------
>N reject the word unless it is greater than N characters long
----------------------
=====
回复 支持 反对

使用道具 举报

发表于 2007-6-27 20:29:09 | 显示全部楼层

hexedit笔记1

==
# rpm -ivh /mnt/cdrom/RedHat/RPMS/hexedit-1.2.2-3.i386.rpm

$ man hexedit
--------------------------
hexedit 是一种 十六进制/二进制 文件浏览器和编辑器。
hexedit 同时显示出文件的 ASCII和hexadecimal,而‘文件’也可以是设备。你能通过程式的搜索和编辑特性,进行文件操作。
OPTIONS
-s, --sector 显示扇区组织。
-m, --maximize 尝试‘最大化’显示。
-h, --help 帮助信息
....................
....................
--------------------------

制作测试文件:
$ cat > /tmp/hexedit-test.file << EOF
> more /usr/share/doc/hexedit-1.2.2/TODO
> * found string after a search could be shown
> (using reverse, bold or anything)
> EOF

$ cat /tmp/hexedit-test.file

hexedit程式初步操作例子:
$ hexedit -h
$ hexedit /tmp/hexedit-test.file
=---------------------------------------------------------------=
00000000 6D 6F 72 65 20 2F 75 73 72 2F 73 68 61 72 65 2F more /usr/share/
00000010 64 6F 63 2F 68 65 78 65 64 69 74 2D 31 2E 32 2E doc/hexedit-1.2.
00000020 32 2F 54 4F 44 4F 0A 2A 20 66 6F 75 6E 64 20 73 2/TODO.* found s
00000030 74 72 69 6E 67 20 61 66 74 65 72 20 61 20 73 65 tring after a se
00000040 61 72 63 68 20 63 6F 75 6C 64 20 62 65 20 73 68 arch could be sh
00000050 6F 77 6E 20 0A 28 75 73 69 6E 67 20 72 65 76 65 own .(using reve
00000060 72 73 65 2C 20 62 6F 6C 64 20 6F 72 20 61 6E 79 rse, bold or any
00000070 74 68 69 6E 67 29 0A __ __ __ __ __ __ __ __ __ thing).
00000080
........
--- hexedit-test.file --0x63/0x77--------
=---------------------------------------------------------------=

[ hexedit正处浏览模式,‘F1’、‘q’分别显示和退出帮助信息。
Tab键和‘Ctrl+T’ 则在 ASCII/hexadecimal 工作区之间切换。]

hexedit程式界面第一列标示着 段首地址(32位地址编码),特点是低4位为0(如 00000010)。段行内取 0~F 为偏移地址。而段行内容是用十六进制数值表示 文本的ASCII值,例如‘6D’表示‘m’,‘73’表示‘s’。

上例 Modeline ‘0x63’表示光标 正定位在 00000060 段行内‘2C’。

[ Ctrl+S: search forward ]
[‘Ctrl+C’没有存储直接中断hexedit程式。‘Ctrl+X’存储并退出hexedit程式界面。]

====
操作例子
$ hexedit /tmp/hexedit-test.file
热身操作> Ctrl+Z (放进后台)
$ fg
恢复前台操作

(1) 修改字符串
操作> [Tab]键切换到 ASCII区,输入字符把 more 修改成 read,观察hexadecimal区相应显示。
按 Backspace键逐个字符还原修改,若 Ctrl+U 还原全部修改。
按 F2键 即时保存修改。
Ctrl+X 退出hexedit程式界面。

(2)尾部添加空行(添加LF换行符)
操作> hexadecimal区,光标定位在0x77,输入 0A 后, Ctrl+X 保存并退出。

验证修改:
$ cat /tmp/hexedit-test.file

[注:若在ASCII区添加‘.’点,则不能表示为LF换行符 ]

继续以上的操作例子
(3)文件输入中文
$ hexedit /tmp/hexedit-test.file
操作> [Tab]键切换到 ASCII区,光标定位到尾部。
Ctrl-Space 调出fcitx输入法程式,切换至‘区位码’输入模式,输入‘2937’(脚)。hexadecimal区显示‘BDC5’十六进制汉字编码,通常称国标码,或称机内码。
Ctrl+X 保存并退出。

验证修改:
$ cat /tmp/hexedit-test.file

注:组合键‘Ctrl-Space’通常用在Gnome桌面调用输入法程式。而在hexedit程式是否符合原意?总之通过以上编辑中文例子,认识了汉字编码,方便了解GB2312 、GBK ...... 等概念。

=====
注 hexadecimal区手动编辑汉字编码,需要 区位码 与 国标码 之间换算,例:
29+160=189 ( 十六进制是 BD )
37+160=197 ( 十六进制是 C5 )
=====

例子:操作系统locale内容是zh_CN.GB18030,‘GNOME terminal’支持并正常显示/tmp/hexedit-test.file

$ cat /tmp/hexedit-test.file
$ iconv -f GB18030 -t ISO-10646 /tmp/hexedit-test.file
$ iconv -f GB18030 -t ISO-10646 /tmp/hexedit-test.file > /tmp/yy
$ hexedit /tmp/yy

======
===
-
回复 支持 反对

使用道具 举报

发表于 2007-6-27 20:41:00 | 显示全部楼层

hexedit笔记2

==
制作模拟软盘的镜像文件,并建立DOS文件系统
# dd if=/dev/zero of=/tmp/dos-fs.img bs=512 count=2880
2880+0 records in
2880+0 records out
# losetup /dev/loop0 /tmp/dos-fs.img
# mkdosfs /dev/loop0
mkdosfs 2.8 (28 Feb 2001)
# losetup -d /dev/loop0

# mount -t msdos /tmp/dos-fs.img /mnt/image -o loop
# df -T
# umount /mnt/image
==

hexedit程式 -s 选项观察镜像文件
# hexedit -s /tmp/dos-fs.img

00000000 EB 3C 90 6D 6B 64 6F 73 66 73 00 00 02 02 01 00 .<.mkdosfs......
00000010 02 70 00 40 0B F9 05 00 09 00 02 00 00 00 00 00 .p.@............
00000020 00 00 00 00 00 00 29 8D 2D 5A 46 20 20 20 20 20 ......).-ZF
00000030 20 20 20 20 20 20 46 41 54 31 32 20 20 20 0E 1F FAT12 ..
00000040 BE 5B 7C AC 22 C0 74 0B 56 B4 0E BB 07 00 CD 10 .[|.".t.V.......
00000050 5E EB F0 32 E4 CD 16 CD 19 EB FE 54 68 69 73 20 ^..2.......This
00000060 69 73 20 6E 6F 74 20 61 20 62 6F 6F 74 61 62 6C is not a bootabl
00000070 65 20 64 69 73 6B 2E 20 20 50 6C 65 61 73 65 20 e disk. Please
00000080 69 6E 73 65 72 74 20 61 20 62 6F 6F 74 61 62 6C insert a bootabl
00000090 65 20 66 6C 6F 70 70 79 20 61 6E 64 0D 0A 70 72 e floppy and..pr
000000A0 65 73 73 20 61 6E 79 20 6B 65 79 20 74 6F 20 74 ess any key to t
000000B0 72 79 20 61 67 61 69 6E 20 2E 2E 2E 20 0D 0A 00 ry again ... ...
000000C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

--- dos-fs.img --0x0/0x168000--sector 0-------------------------------

观察 单一逻辑扇区号 表示多少字节
如上例 十六进制‘EB’换算成二进制是 11101011,由于每8位二进制数组成一个字节(byte),那么段内内容‘EB’占用一个字节。上例页面能表示16x16=256字节,翻两个页面才进入‘sector 1’,可以确定单一逻辑扇区号表示 256 x 2 = 512字节。

或从 Modeline‘--0x200/0x168000--sector 1’总偏移量得知 (200)十六进制=(512)十进制。

操作
‘>’键定位光标到尾部,‘<’键定位光标到开头。
Return键,然后输入逻辑扇区号。

注:上例模拟1.44M软盘的镜像文件,其中逻辑扇区号(0~2879),跟格式化程式有联系,而dd命令中的bs和count参数只作参考。

===
注:硬盘主引导扇区MBR用物理扇区表示,与操作系统的格式化程式无关。与 逻辑0扇区分别可以通过以下例子观察:

例子 4磁头、17扇区硬盘的物理扇区和逻辑扇区号的对照

柱面_磁头_扇区____逻辑扇区号
_0____0_____1_____MBR扇区
_0____0____17_____非DOS扇区
_0____1_____1_____ 0 (DOS引导扇区)
_0____1____17_____ 16
_0____2_____1_____ 17
_0____2____17_____ 33
_0____3_____1_____ 34
_0____3____17_____ 50
_1____0_____1_____ 51

硬盘上的DOS分区的第一个起始扇区都作为逻辑0扇区。
而软盘上 0磁道 0磁头 1扇区 作为逻辑0扇区。

===
在DOS(Windows)管理下,FAT文件系统的模式有(FAT12、FAT16和FAT32)。

mkdosfs格式化程式自动识别软盘采用FAT12文件系统,而FAT16用在硬盘分区。
mkfs.vfat对软盘进行格式化操作时,效果跟mkdosfs格式化程式一样。hexedit观察软盘内容,只是卷序列号(0x27)不同。
===
---
--
回复 支持 反对

使用道具 举报

发表于 2007-6-27 20:52:48 | 显示全部楼层

hexedit笔记3

==
FAT文件系统的数据组织结构:
DOS引导记录(DBR) + 文件分配表(FAT1) + (FAT2) + 文件目录表(FDT) + 数据区

==
DOS引导记录(DBR)是建立在 逻辑0扇区 ,续上例:
‘sector 0’页面1

00000000 EB 3C 90 6D 6B 64 6F 73 66 73 00 00 02 02 01 00 .<.mkdosfs......
00000010 02 70 00 40 0B F9 05 00 09 00 02 00 00 00 00 00 .p.@............
00000020 00 00 00 00 00 00 29 8D 2D 5A 46 20 20 20 20 20 ......).-ZF
00000030 20 20 20 20 20 20 46 41 54 31 32 20 20 20 0E 1F FAT12 ..
00000040 BE 5B 7C AC 22 C0 74 0B 56 B4 0E BB 07 00 CD 10 .[|.".t.V.......
00000050 5E EB F0 32 E4 CD 16 CD 19 EB FE 54 68 69 73 20 ^..2.......This
00000060 69 73 20 6E 6F 74 20 61 20 62 6F 6F 74 61 62 6C is not a bootabl
00000070 65 20 64 69 73 6B 2E 20 20 50 6C 65 61 73 65 20 e disk. Please
00000080 69 6E 73 65 72 74 20 61 20 62 6F 6F 74 61 62 6C insert a bootabl
00000090 65 20 66 6C 6F 70 70 79 20 61 6E 64 0D 0A 70 72 e floppy and..pr
000000A0 65 73 73 20 61 6E 79 20 6B 65 79 20 74 6F 20 74 ess any key to t
000000B0 72 79 20 61 67 61 69 6E 20 2E 2E 2E 20 0D 0A 00 ry again ... ...
000000C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000000F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

-%% dos-fs.img --0x0/0x168000--sector 0-------------------------------
‘sector 0’页面2

00000100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
.......................
.......................
000001F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA ..............U.

-%% dos-fs.img --0x100/0x168000--sector 0-----------------------------

观察‘sector 0’页面1

0x0~0x2 3个字节 内容‘EB 3C 90’| JMP引导记录扇区的代码区的内容
0x3~0xA 8个字节 | 厂商标识和DOS版本号。内容是mkdosfs

0xB 属于BPB(BIOS Parameter Block,BIOS 参数块)内容,有的称扩展磁盘I/O参数表:
===
0xB 2个字节 内容‘00 02’| 每扇区字节数。(0200)16=(512)10,则每扇区512字节
0xD 1个字节 | 每簇扇区数。值是2,表示2扇区/每簇
0xE 2个字节 | 保留扇区数。保留用作引导区的扇区数,值是1
0x10 1个字节 | FAT(文件分配表)个数。该值是2,2个文件分配表,其中一个是备份
0x11 2个字节 | 根目录的项数,是指在根目录下最多允许的目录项数(最大值)。(0070)16=(112)10,则最大值是112

0x13 2个字节 内容‘40 0B’ | 总扇区数。(0B40)16=(2880)10,磁盘有2880个扇区
0x15 1个字节 | 磁盘介质类型描述符。F9表示双面5.25英寸软盘(HD)和双面3.5英寸软盘(每道扇区数是9),F0表示双面3.5英寸软盘(每道扇区数是18),F8表示硬盘

0x16 2个字节 | 每个FAT文件分配表所占的扇区数。该值是5
0x18 2个字节 | 每个磁道(柱面)的扇区数。(0009)16=(9)10,该值是9,对应磁盘介质类型描述符F9
0x1A 2个字节 | 磁头个数。值是2

0x1C~0x1F 4个字节 | 隐含扇区数。DOS将每一个分区视为由0开始的一组连续扇区块,隐含扇区数是指该分区以前的总扇区数。一般用在硬盘分区,软盘该值为0
0x20~0x23 4个字节 | 磁盘上的扇区数。是记录磁盘上实际扇区数的总和。例如硬盘分区大于32M时,这里将被设置,‘0x13’总扇区数则被设置为0,而总扇区数是通过‘磁盘上的扇区数’减去‘隐含扇区数’。软盘‘这里’跟‘隐含扇区数’同被设置成0,只用‘0x13’总扇区数表示
===

0x24 内容‘00’ | 标识驱动器的类型。这里表示软盘
0x25 | 保留区域。
0x26 内容‘29’ | 扩展署名
0x27 4个字节 | 卷序列号。内容‘8D 2D 5A 46’由格式化操作时随机生成
0x2B~0x35 | 卷标签。这里没有指定设置

0x36 | 这里开始属于引导记录代码区。内容包括文件系统标识(FAT12),执行代码时的文本信息等

观察‘sector 0’页面2
0x1FE~0x1FF | 引导记录的有效标志。内容‘55 AA’

==
文件分配表 FAT1 和 FAT2 内容

FAT1占用逻辑1扇区~逻辑5扇区
FAT2占用逻辑6扇区~逻辑10扇区
(可以通过DBR‘0x16’得知)
[ 注: 在WinXP格式化软盘,FAT1和FAT2的逻辑扇区号是(1~9)(10~18) ]

FAT1和FAT2的页头内容‘F9 FF FF’
FAT文件系统将磁盘上一个或若干个扇区组织成一个"簇","簇"是DOS进行数据读写操作的最小单位。也就是说,文件是以"簇"为单位在磁盘上存放。

FAT12布局结构采用簇号(000H 001H 002H)为保留簇,内容‘F9 FF FF’构成磁盘介质标志。与DBR‘0x15’含义相同。

而FAT12的使用簇、文件目录表(FDT)和数据区的内容,需要添加文件才能观察。

== 操作例子:格式化程式指定 DBR 部分内容 ==

# man mkdosfs

操作过程:
# losetup /dev/loop0 /tmp/dos-fs.img
# mkdosfs (参照以下测试例子)
# losetup -d /dev/loop0
# hexedit -s /tmp/dos-fs.img

测试例子:
1) 格式化时指定相同的卷序列号,如‘8D 2D 5A 46’
# mkdosfs -i 465A2D8D /dev/loop0

2) 设置卷标签(11个字符有效),默认没有设置
# mkdosfs -n wei-test---hello /dev/loop0

3) 使用例子中/tmp/dos-fs.img 软盘镜像文件,启动机器,则打印以下警告信息:
This is not a bootable disk. Please insert a bootable floppy and
press any key to try again ...

格式化时指定警告信息(418字节限制)
# echo No boodisk > /tmp/test-file
# mkdosfs -m /tmp/test-file /dev/loop0

或交互输入文本
# mkdosfs -m - /dev/loop0
Hello !
[Tab键]No bootdisk
Ctrl+D 组合键结束输入

-----
-----
回复 支持 反对

使用道具 举报

发表于 2007-6-27 21:00:07 | 显示全部楼层

hexdump程式操作笔记:

==
前提:使用hexedit笔记中 /tmp/dos-fs.img 镜像文件
==

hexdump 命令查看特殊格式的文件,配合不同选项可以十进制、八进制、十六进制和ASCII码来显示文件。
[ 注: 多数操作系统用 hexdump 取代od(octal dump)命令 ]

1.操作:
$ man hexdump
[ 摸索过程最好配合帮助文档。my在以下操作尝试‘-e’选项(网上很少提及) ]

$ echo 'A' | hexdump
0000000 0a41
0000002
[ 默认使用十六进制显示格式(Two-byte 双字节),以上配合‘-x’选项效果一样 ]

$ echo 'A' | hexdump -bc
0000000 101 012
0000000 A \n
0000002
[ 同属 One-byte 显示格式,分别 八进制(-b) 和 ASCII码(-c) ]

$ echo 'A' | hexdump -bcxd

配合‘-e’选项,显示转换内容
$ echo -n 'M' | hexdump -e "16/1 \"%2x\" \"\\n\""
4d

指定不同的转换格式 ( %d, %i, %o, %u, %X, %x )
$ echo -n 'M' | hexdump -e "16/1 \"%2X\" \"\\n\""
$ echo -n 'M' | hexdump -e "\"%X\" \"\\n\""
4D
$ echo -n 'M' | hexdump -e "\"%o\" \"\\n\""
115
$ echo -n 'M' | hexdump -e "\"%u\" \"\\n\""
$ echo -n 'M' | hexdump -e "\"%i\" \"\\n\""
77

2.操作:
$ hexdump /tmp/dos-fs.img
[ 注: 跟hexedit显示的字节内容,理解上有出入,这跟hexdump默认选项有关 ]

对比例子 hexedit程式显示DBR(512),0x13,2个字节,内容‘40 0B’表示总扇区数
$ hexdump /tmp/dos-fs.img -s 0x13 -n 2
0000013 0b40
0000015
[ 内容是‘0b40’,跟hexedit显示不同。(0B40)16=(2880)10,磁盘有2880个扇区,但结果一样 ]

显示厂商标识和DOS版本号( 0x3~0xA 8个字节 )
$ hexdump /tmp/dos-fs.img -s 0x3 -n 8 -c
0000003 m k d o s f s \0
000000b

3.操作:
hexdump程式跟hexedit显示的字节内容有出入,需要还原默认选项,再理解各部分的意思
$ hexdump /tmp/dos-fs.img
$ hexdump -e "\"%07.7_ax \" 8/2 \"%04x \"\"\\n\"" /tmp/dos-fs.img
[ 显示效果一样 ]

4.尝试设置成‘hexedit -s /tmp/dos-fs.img ’ 的显示效果
$ hexdump -e "\"%08.8_ax \" 16/1 \"%02X \"\"\\n\"" /tmp/dos-fs.img
$ hexdump -e "\"%.8_ax \" 16/1 \"%02X \"\"\\n\"" /tmp/dos-fs.img
$ hexdump -e "\"%.8_ax \" 16/1 \"%02X \"\"\\n\"" /tmp/dos-fs.img -s 0x13 -n 2
00000013 40 0B

设置ASCII显示区,使用format_file 方便
$ vi /tmp/hex-format.file
----------------------------------
"%08.8_Ax\n"
"%08.8_ax " " " 16/1 "%02X " " "
16/1 "%_p" "\n"
#" |" 16/1 "%_p" "|\n"
----------------------------------
[ ‘#’起屏蔽作用 ]

$ hexdump -f /tmp/hex-format.file /tmp/dos-fs.img
[ 显示效果一样 ]

注:笔记中hexdump程式属于util-linux-2.11n-12套件包(RH7.3),util-linux-2.12q套件包(例如LFS系统)的hexdump程式,新增的‘-C’选项作用类似上例‘设置ASCII显示区’。

====
====

====
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表