标题: 寻一位会GRUB的朋友合作
[打印本页]
作者: oumiga
时间: 2007-3-19 04:53
标题: 寻一位会GRUB的朋友合作
VB做了一个一键备份恢复的工具,可WINDOWS下操作,本人对GRUB不了解,哪位朋友愿意合作,完成GRUB启动时读取密码进入 AUTOGHOST.img
给我PM,在线等
作者: lianjiang2004
时间: 2007-3-19 05:08
请把问题说得明白些,哪些你已掌握,哪些还不很理解。这样别人才好回答。深层次问题可去时空论坛。
作者: oumiga
时间: 2007-3-19 05:21
这个工具VB部分已全部做好,包括:登录,备份/恢复 ,密码设置(读ini)
需要用到的IMG也已基本做好
只差GRUB启动部分
需要部分:
1,GRUB启动时,要求输入密码,核对密码,然后调用IMG
2,GRUB目录改为boots\my\
而不是默认 boot\grub
考虑menu.lst在grub目录内,如果只在menu.lst里改路径,那么grub目录就必需保留了
基本这两个方面没搞定,寻一个朋友合作,将来愿意共享源码
作者: lianjiang2004
时间: 2007-3-19 05:30
先回答第二问。把menu.lst放到根目录,就不需要grub目录了。现版本grub默认先查找根目录menu.lst,以前是先查找boot\grub目录。当然也可通过修改grldr文件来自定义查找路径。本人不会,也不赞成这种随意修改原文件的办法。有人称那种做法是对grub的“强暴”。呵呵。
作者: lianjiang2004
时间: 2007-3-19 05:43
关于第一问,我只讲思路。
1,设置密码,对输入密码字符分别用md5生成校验码(md5_1,此值不变)和生成grub用md5密码(md5_2,此值变),写入(或替换)文件比如pwd.ini。同时把生成的md5_2写入或替换掉menu.lst中就密码。此密码将在启动grub时要就验证。
2,重设密码。输入就密码,生成md5_1,与pwd.ini中md5_1比较,相同则输入新密码。
到此我想你应能自行解决具体问题了。
作者: oumiga
时间: 2007-3-19 06:47
谢楼上朋友回答的第二问,我现在就去试一下
关于第一个问题,你说的太笼统了,思路基本可以这样认为对吗:
对menu.lst中的MD5密码改写,达到更换密码
(此功能在WIN下的EXE程序中,写进密码INI了,DOS下不需要设密码,先解决验证密码)
启动GRUB时验证的是menu.lst里的密码,需要将用户输入的字符串转成MD5,还要将menu.lst里的md5取出来对比,但程序只运行到GRUB还没有运行到IMG,怎么去实现将字符串转MD5呢?还是这一切,GRUB自动的转换MD5并核对?
这个问题,DOS之家的一键GHOST,和矮人都实现了,就是找不到在哪下手
作者: oumiga
时间: 2007-3-19 06:55
查看了DOS之家的一键GHOST,使用WIN下的修改密码程序改密码后
有个gho_pass.ini里多了一行 MD5值的密码
想必,是有什么办法在启动时调用来对比验证这个密码,
menu.lst里的md5值,没有改变
[
Last edited by oumiga on 2007-3-19 at 07:01 AM ]
作者: lianjiang2004
时间: 2007-3-19 07:11
我觉得第一问,我已经把生成密码,密码验证,密码修改的步骤都讲了,就差具体的代码了。
更换密码,首先对输入的密码的MD5校验值与ini中的MD5_1比较,一致通过后,输入新密码,转换成MD5_2,然后替掉menu.lst中的值。grub的密码验证只在运行grub时需要。
作者: oumiga
时间: 2007-3-19 07:22
首先谢谢你的回复
我想可能是我没表达清楚,以至于答非所问,比如:
开机后选择boot.ini时,我选择 XXX备份工具,此时就提示输入密码
那么这个时候,用户输进去123的话,怎么把123转成MD5与menu.lst里的核对呢?
此时还没有进入IMG里的autoexec.bat,没办法运行第三方工具,GRUB有这个功能可以把用户输进的字符串转成md5再与menu.lst里的MD5核对吗?
作者: lianjiang2004
时间: 2007-3-19 07:25
这是自动的,grub会把输入的字符与md5密码进行校验的。
作者: oumiga
时间: 2007-3-19 07:39
毛塞顿开!
我去试下,不过,我刚才装了DOSHOME的一键还原8.3,设置了个密码,发现gho_pass.ini中值变了,但menu.lst中MD5密码值没变 ,我先试下
谢谢lianjiang
作者: lianjiang2004
时间: 2007-3-19 07:41
Quote: |
Originally posted by oumiga at 2007-3-19 07:39:
不过,我刚才装了DOSHOME的一键还原8.3,设置了个密码,发现gho_pass.ini中值变了,但menu.lst中MD5密码值没变 |
|
假如没变的话,就是软件有问题。应该要变。
作者: oumiga
时间: 2007-3-19 11:48
仔细试了下,发现menu.lst中确实会多出一行
password --md5 $1$7$sOtQDrGjIH1WS49S5Tzmd/
根目录里有个md5.exe,想必就是grub-md5-crypt了,现在就差怎么用EXE,结合md5.exe把生成的MD5值 添加到menu.lst固定位置了,实现这个就大功造成了
作者: oumiga
时间: 2007-3-19 11:51
也许我 该想想gho_pass.ini能干点什么...
作者: oumiga
时间: 2007-3-19 13:41
Quote: |
Originally posted by lianjiang2004 at 2007-3-19 07:11 AM:
我觉得第一问,我已经把生成密码,密码验证,密码修改的步骤都讲了,就差具体的代码了。
更换密码,首先对输入的密码的MD5校验值与ini中的MD5_1比 ... |
|
密码同时为999,第一次转成MD5_1保存后,更改密码时输入旧密码,还是999,再转成MD5_2与MD5_1比较时,怎么不一样? 这样旧密码验证是过不去的,请教该如何解决?...
作者: lianjiang2004
时间: 2007-3-19 20:46
Quote: |
Originally posted by oumiga at 2007-3-19 13:41:
密码同时为999,第一次转成MD5_1保存后,更改密码时输入旧密码,还是999,再转成MD5_2与MD5_1比较时,怎么不一样? 这样旧密码验证是过不去的,请教该如何解决?... |
|
md5_2与md5_1是不一样的。不是md5_2与md5_1比。而是输入的旧密码的md5_1与ini中的md5_1比。一样就验证通过。
前面讲了,md5_1是不变值,md5_2是变值。
作者: oumiga
时间: 2007-3-20 00:14
输入999,算出来的MD5_后,替换掉menu.lst中的 密码,然后再写入ini一份MD5_1
当启动时,GRUB就会核对menu.lst中的密码,此时输入999,就过去了,但在WIN下,如果要改密码,首先要核对ini中的md5_1, 这个时候,用户要输入旧密码999,再次转成MD5(此时应该是md5_2),与MD5_1比较,虽然MD5_1与md5_2都是在WIN下设置的密码999,但两次值是不同的,所以,WIN下改密码,此路不通。
我已经找到了解决办法,我用VB生成WIN下的32位或16位 MD5码,这个码是不会变的,我连续转换N次999,其MD5(32位)值还是b706835de79a2b4e80506f582af3676a,MD5(16位)还是e79a2b4e80506f58
因此,我觉得,用WIN下的MD5来核对密码,再修改密码,是比较安全准确的。
在论坛里找了个GRUB MD5的EXE,据说支持SHELL接口(用EXE运行这个MD5得到的MD5值再返回运行它的EXE),但我不会用,我用的是一种笨方法实现的。
现在基本都已搞定,就差测试了
也感谢lianjiang给的思路。让我直接在menu.lst上下手,没去走弯路
[
Last edited by oumiga on 2007-3-20 at 12:17 AM ]
作者: lianjiang2004
时间: 2007-3-20 00:36
当启动时,GRUB就会核对menu.lst中的密码,此时输入999,就过去了,但在WIN下,如果要改密码,首先要核对ini中的md5_1, 这个时候,用户要输入旧密码999,再次转成MD5(此时应该是md5_2),与MD5_1比较,虽然MD5_1与md5_2都是在WIN下设置的密码999,但两次值是不同的,所以,WIN下改密码,此路不通。
--------------
上面讲了:
md5_2与md5_1是不一样的。不是md5_2与md5_1比。而是输入的旧密码的md5_1与ini中的md5_1比。一样就验证通过。
md5_1是不变值,md5_2是变值。
难道我还没说明白? 还是你理解问题?呵呵。
作者: lianjiang2004
时间: 2007-3-20 00:39
这个时候,用户要输入旧密码999,再次转成MD5(此时应该是md5_2),
-------------------
应是MD5_1,不是md5_2。
MD5_1用于win下验证,MD5_2用于grub验证。
作者: oumiga
时间: 2007-3-20 00:56
Quote: |
应是MD5_1,不是md5_2。
MD5_1用于win下验证,MD5_2用于grub验证。 |
|
运行GRUB MD5 将明码“999”加密后,产生的MD5值命名为MD5_1,
MD5_1 替换menu.lst中的旧密码(如果为空,就直接写上去 password --md5 xxxxx),然后再将MD5_1存到ini中(还用MD5_1变量表示),方便下次重设密码,核对旧密码 这步对吧? 问题来了...
当用户在WIN下重设密码时,要求输入旧密码,此时输入明码 “999”,如果再利用GRUB MD5把这次999的MD5值当做md5_2,与ini中的MD5_1比较的话,肯定不会通过了。因为ini中记录的只有一个数据,就是前MD5_1的值,也就是menu.lst中用的MD5密码。
解决办法:
用两个MD5值
首先还是调用GRUB MD5,得到md5_1,替换menu.lst,然后,ini中存的,是MD5_2,MD5_2必需是WIN下的MD5转换值(明码同是“999”,与GRUB MD5产生的MD5值不同),下次用户输入旧密码时,还用WIN下MD5转换为md5_3
再用MD5_3与存在ini中的MD5_2比较,这样就准确定的通过了。
焦点问题:
MD5_1是GRUB MD5产生的MD5值
MD5_2,MD5_3是WIN下MD5产生的32或16位MD5值,这个值是不会变的。
作者: lianjiang2004
时间: 2007-3-20 01:08
假如你仔细看了我的回答,应早就该明白我说的了。
3楼:
“关于第一问,我只讲思路。
1,设置密码,对输入密码字符分别用md5生成校验码(md5_1,此值不变)和生成grub用md5密码(md5_2,此值变),写入(或替换)文件比如pwd.ini。同时把生成的md5_2写入或替换掉menu.lst中旧密码。此密码将在启动grub时要就验证。
2,重设密码。输入就密码,生成md5_1,与pwd.ini中md5_1比较,相同则输入新密码。”
我说的md5_1就是你现在说的MD5_2,我说的md5_2就是你现在说的MD5_1。
看来至今你没明白我说的。
不过,不管如何,你现在自己已解决了,尽管我说了好多废话。呵呵。
作者: oumiga
时间: 2007-3-20 02:21
呵呵,老兄,你要是在3楼时,直接再点一下WIN下的MD5用于修改密码,我就不考虑GRUB MD5的值了,也不用上到22楼了,这么累,呵呵
作者: lianjiang2004
时间: 2007-3-20 05:51
Quote: |
Originally posted by oumiga at 2007-3-20 02:21:
呵呵,老兄,你要是在3楼时,直接再点一下WIN下的MD5用于修改密码,我就不考虑GRUB MD5的值了,也不用上到22楼了,这么累,呵呵 |
|
因为我用的两个工具都叫md5.exe,都能运行与windows,且是命令行方式的。
我只能(会)称之一个是生成grub用md5密码(此值变),一个生成的是校验码(此值不变)。
3楼说l了:“重设密码。输入就密码,生成md5_1,与pwd.ini中md5_1比较,相同则输入新密码。” 难道不是说用与修改密码的吗? 呵呵。
作者: qsj
时间: 2007-3-20 08:59
grldr的内置菜单,可以用ultraedit打开编辑!