如何获取本机的共享目录的口令(100分)

  • 主题发起人 主题发起人 ctk
  • 开始时间 开始时间
C

ctk

Unregistered / Unconfirmed
GUEST, unregistred user!
有谁知道windows共享目录的口令的加密和解密的原理或算法,
能否从注册表中还原出共享目录的口令?
 
应该是不可能的。
 
; 98共享目录密码
袁哥

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Network/LanMan

里面的共享目录名键里面的PARM1ENC,PARM2ENC 与串

“35 9A 4D A6 53 A9 D4 6A”

相同长度异或(都先把字串化成16进制再异或)。就得到密码!

 
假设我在本机设了一个共享目录 kaak .
并设置了只读和完全的口令,那么在注册表的体现就是
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Network/LanMan/KAAK

在此主键下的键值
Parm1enc 和 Parm2enc 就是只读和完全 口令的密文了
加密的算法是 密文=明文 xor 密匙
很明显地,加密和解密的过程是可逆的
具体的密匙我忘了,但是可以试出来的:

如果你的密码是 : abc
那么注册表里的密文就是 74 db 0e
那么第一位的密匙就是 a 的ASC码 xor 77= ?(自己算吧)
第一位的密匙就是 b 的ASC码 xor db
第一位的密匙就是 c 的ASC码 xor oe
...

好象windows的屏保密码也是这种机制的,有谁知道的告诉我好么?
 
; Window9X共享目录口令问题(屏保口令也是同样保存的),
口令(原始为十六进制字符)在注册表位置:
HKEY_LOCAL_MACHINE/SOFTWARE/micorsoft/windows/current_version/network/lanman/共享文件夹名/Parm1enc和Parm2enc两位置,
Parm1enc为对应的是完全共享密码,Parm2enc对应的是只读共享密码。
字符与数列(前八个数是35,9A,4D,A6,53,A9,D4,6A)作异或运算即得密码的二进制ASCII码,转换后可得到密码。
var reg : TRegistry; name : String; //s是在网上邻居里的文件夹名
begin
name := 'DirName';//建立一个只读,无密码共享目录
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('Software/Microsoft/Windows/CurrentVersion/Network/LanMan/'+name,true );
reg.WriteInteger( 'Flags', 401 ) //权限:401代表为访问,258为完全访问,259为密码访问
reg.WriteInteger( 'Parm1enc', 0 ) //参数2,放置完全访问密码,已加密
reg.WriteInteger( 'Parm2enc', 0 ) //参数2,放置只读访问密码,已加密
reg.WriteString( 'Path', 'C:/MYDIR' ) //放置要共享的目录的绝对路径
reg.WriteString( 'Remark', '' )
reg.WriteInteger( 'Type', 0 )
end;
 
多人接受答案了。
 
后退
顶部