论坛: 编程破解 标题: 透视Win95的密码档 复制本贴地址    
作者: group [group]    论坛用户   登录
发信人:glacier(人渣),信区:网络编程
标��题:透视Win95的密码档 
发信站:安全焦点(2001-03-22 17:45:47)
透视Win95的密码档 
苏俊铭 
   

  基本上若您的电脑曾经让别人使用过的话,那很可能的,您的密码已经被他人 
所获知了(包括您上Internet 用的 Username & Password),只要Copy您在Win95 
目录下的.PWL档即可着手进行解码,然後您的网路费可能就莫名其妙的增加了。 

  有人就问了:可是我的Win95在登入时需键入密码啊,别入又不知道我的密码! 
需知道要获得 .PWL 档并不一定非得进入Win95,只要用一片DOS磁片开机 or 按F4 
��F8 ... 

在网路上有一支程式叫 Glide.EXE,此程式宣称能解 .PWL 档,的确是如此, 
不过此程式有某些先天上的限制,以至於所解出来的东东可能只有一小部份。相信 
有些人已试过这支程式了,稍後我会说明这支程式的原理以及为什麽在大多数的情 
况之下只能解出一小部份的原因。幸运的话这「一小部份」已含有第一组完整的 
Username & Password 了。 

  Win95 是采用 RC4 的编码方法,此演算法是不可逆的,也就是说您无法将 
.PWL档解回原来的样子,除非您有 Key(或用暴力法)・小弟先说一下 RC4 
大概的流 
程: 

你拥有一个 32 Bit 的Key & 待解码的资料(就称为 SData 吧) 
以下为解码程式所做的事情: 
1.初始化一个Table, 此Table的资料结构为 

  unsigned char Table[256]; 
  unsigned char char x,y; 

它会将Table依序填入0,1,2,.....FFh, 最後将 x,y 设为 00. 
2.将此256 Bytes 的 Table 根据 Key 做一些Swap的动作, 完成 
之後, 此Table看似不规则排列了. 
到目前为止算是[初始化]的动作吧. 

再在是解码的动作: 
3. 
for(counter=0; counter<SData的长度; counter++) 

  x=(x+1)%256; 
  y=(Table[x]+y)%256; 
  swap(&Table[x], &Table[y]); 
  XOR_Index=(Table[x]+Table[y]) %256; 
  SData[counter] ^= Table[Xor_Index]; 


所以在解码期间不仅x,y在变,连Table的内容也在变. 

****重点**** 
假设SData的大小为 100 Bytes, 
如果我要先解开 20 Byte, 则流程为 1 -> 2 -> 3 
再来我会判断此20个Byte是否为正确的资料,if 正确的话我再 
解开剩下的 90个Byte 流程为 2 -> 3 ,若分成多的片断的话,则 
统程应还是这样的: 
1 -> 2 -> 3 解最前面的 20 Byte 
2 -> 3 再解 20 Byte 
2 -> 3 再解 20 Byte 
2 -> 3 再解 20 Byte 
2 -> 3 再解 20 Byte 

反正第一次就是从 1 开始啦!!! :) 


==================================================== 
PWL的格式是(从0208h开始看): 
20 byte (Username) 
2 byte (第一组在档案的 Offset)----------------+ 
2 byte (第二组在档案的 Offset)--------------+ | 
....... | | 
Tag1:长度(2 byte),"连线到"的名称,Password <-+-+ 
长度(2 byte),"连线到"的名称,Password <-+ 
==================================================== 



Win95 大概的流程是: 
1 -> 2 -> 3 解码到Tag1减1的地方(此时Username现形了) 
if(Username<>登入95时的Username) 

  拨号网路的密码栏将是空的(即使储存密码有打勾) 
  (跳到Step1也没用,因为Key不对嘛,再解下去也是不对的.) 

else{ 
  Step1: 1 -> 2 -> 3 从Tag1的地方开始解码. 
  While(NotEND) 
  { 
    2 -> 3 解2个byte(得到长度,假设解出後,得到 YY) 
    2 -> 3 解YY个Byte(得到"连线到"的名称&Password) 
    if(和"连线到"的名称符合的话) 
    { 
      将Password填入密码栏; 
      Break; 
    } 
  } 


Win95的问题就出在 Username 一定是大写, 而且不足20个Byte的地方以空白填入, 
更糟糕的是PWL的档名就是Username, 基於此原理我们已得知前面20Byte每个Byte 
各是XOR什麽东东了, 我们假设为: 
12 4F 33 20 7F F6 D9 3C 63 AA 11 40 32 DE 46 55 77 2C 3A AD 

其实从PWL可分析到共有几组帐号,至於怎麽分析的呢? 我也忘了.反正可以就是啦! 
So, 0108h+几组*2= Tag1 . 
哈,我已经知道第一组帐号存在那里了.(0108h是固定的) 
即然知道第一组的位置,常然也就得到了紧接在Username 的那 2 个Byte, 
现在我们已拥有了 22 个byte了喔! 

怎麽解第一组呢? 
因为95在Step1的地方又重覆了一次 1 -> 2 -> 3 
所以我们可直接使用我们幸苦得 
到的 22 Byte 从Tag1的地方将它给XOR下去. 
如果"连线到"的名称+Password的长度 
不会很长的话----> 完全显露无遗(可能还秀出了第二组的一点点喔!) 

以上就是 Glide.EXE 所利用的原理(根本不需要Key就解出一组出来了) 
如果你要将所有的帐号(Hinet'Seednet'成大'广通...不会吧!帐号那麽多,借一组来用 
用可以吗?)全部抓出来, 那很抱歉,你必需知道 Key. 
\__ 在成大BBS和女生Talk多了,打错了. 


至於 Key 是怎麽来的呢? 
我们在进入Win95时,不是会出现一个输入密码的Dialog吗? 
对啦,就是利用这密码 
换算来的啦!(没有的话,表示你没设定密码, 你的Key=00000000h) 

以下是Win95将登入密码转为Key的程式(最後的eax就是你的Key喔): 
push esi 
xor eax,eax 
mov si,密码长度+1 
cmp si,ax 
jz 7fcb19e7 
mov edx,offset 密码 
movzx ecx,byte ptr [edx] 
7fcb19d1: 
add eax,ecx 
inc edx 
mov ecx,eax 
shl ecx,7 
shr eax,19h 
or ecx,eax 
dec si 
mov eax,ecx 
jnz 7fcb19d1 
7fcb19e7: 
pop esi 
ret 8 

嗯,组合语言比较乱, 用 C 来看(结果一样): 

unsigned long result = 0L; 
for( i = 0; i < passwordLen + 1; i++ ) 

  int tmp = ( int ) ( result >> 25 ); 
  result += toupper( password[ i ] ); 
  result = ( result << 7 ) | tmp; 


就是一直转来转去再加来加去的啦! 

所以若你知道某人进入Win95的密码,那你就可以算出 Key, 也就可取得某人 
所使用的所有帐号了.怎麽做呢? 喔, 这不必写任何程式, 只要用SoftICE就 
可以了, 所有的动作都在 Mspwl32.dll中, 设个断点, 一次一组,方便又好用. 

如果你连此人进入Win95的密码都不知道的话, 那只好用暴力法了. 

1.编个密码-->转成Key-->经RC4-->什麽!前20Byte的username不对--再来--+ 
^\-----------------------------------------------------------+ 

2.指定一个Key-->经RC4-->什麽!前20Byte的username不对--再来--+ 
^\----------------------------------------------------+ 

那个好用,就得看运气了. :) 


Glide.EXE 好像在yhq可取得, 不知道.....忘了???????? 

注: 
这些Bug後来Microsoft出了一支 Mspwl32.dll 的更新程式, 听说可解决此 
问题.我没试过,所以我也不知道. 你可看看你的 .PWL 档的最前面4个Byte 
是否为 b0h,"MFN", 若是的话, 表示你有危险啦!!! 


地主 发表时间: 03/25 06:15

回复: xiaojun [xiaojun]   剑客   登录
哇,不好理解,能不能简单一点啊?

B1层 发表时间: 04/09 19:02

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号