那位大虾知道如何获取Win9x/WinMe的登录口令??(300分)

  • 主题发起人 主题发起人 tb
  • 开始时间 开始时间
我也想知道。
 
没有源码,发给你们的程序也是以前下载的。
 
我也在用VC写一个可以解密pwl文件的程序,但没能成功,如果各位大虾有好的方法,<br>还望不吝赐教<br>e-mail:lixmail@sina.com
 
tb:如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。<br>请认真阅读大富翁论坛规则说明 &nbsp;<br><br>http://www.delphibbs.com/delphibbs/rules.htm
 
&lt;font color="#FF0000"&gt;<br>大家帮帮忙,给看一下&lt;/font&gt;&lt;/p&gt;<br><br>&lt;p align="left"&gt;<br>&amp;nbsp;<br>&lt;font color="#FF0000" size="4"&gt;<br>&lt;a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=506445"&gt;<br>“寻找简单的方法,filter消息”&lt;/a&gt;<br>&lt;/font&gt;&lt;/p&gt;<br><br>&lt;p align="left"&gt;如有违反论坛规则,还请版主砍掉并批评指出&lt;/p&gt;
 
看看这篇如何,希望对你有帮助:<br><br><br>&nbsp;<br><br>--------------------------------------------------------------------------------<br>&nbsp;<br>透视Win95的密码档 <br>转载:xundi(xundi) <br>&nbsp;<br>苏俊铭 <br>&nbsp; &nbsp;<br><br>  基本上若您的电脑曾经让别人使用过的话,那很可能的,您的密码已经被他人 <br>所获知了(包括您上Internet 用的 Username &amp; Password),只要Copy您在Win95 <br>目录下的.PWL档即可着手进行解码,然後您的网路费可能就莫名其妙的增加了。 <br><br>  有人就问了:可是我的Win95在登入时需键入密码啊,别入又不知道我的密码! <br>需知道要获得 .PWL 档并不一定非得进入Win95,只要用一片DOS磁片开机 or 按F4 <br>ⅱF8 ... <br><br>在网路上有一支程式叫 Glide.EXE,此程式宣称能解 .PWL 档,的确是如此, <br>不过此程式有某些先天上的限制,以至於所解出来的东东可能只有一小部份。相信 <br>有些人已试过这支程式了,稍後我会说明这支程式的原理以及为什麽在大多数的情 <br>况之下只能解出一小部份的原因。幸运的话这「一小部份」已含有第一组完整的 <br>Username &amp; Password 了。 <br><br>  Win95 是采用 RC4 的编码方法,此演算法是不可逆的,也就是说您无法将 <br>.PWL档解回原来的样子,除非您有 Key(或用暴力法)·小弟先说一下 RC4 <br>大概的流 <br>程: <br><br>你拥有一个 32 Bit 的Key &amp; 待解码的资料(就称为 SData 吧) <br>以下为解码程式所做的事情: <br>1.初始化一个Table, 此Table的资料结构为 <br>{ <br>&nbsp; unsigned char Table[256]; <br>&nbsp; unsigned char char x,y; <br>} <br>它会将Table依序填入0,1,2,.....FFh, 最後将 x,y 设为 00. <br>2.将此256 Bytes 的 Table 根据 Key 做一些Swap的动作, 完成 <br>之後, 此Table看似不规则排列了. <br>到目前为止算是[初始化]的动作吧. <br><br>再在是解码的动作: <br>3. <br>for(counter=0; counter&lt;SData的长度; counter++) <br>{ <br>&nbsp; x=(x+1)%256; <br>&nbsp; y=(Table[x]+y)%256; <br>&nbsp; swap(&amp;Table[x], &amp;Table[y]); <br>&nbsp; XOR_Index=(Table[x]+Table[y]) %256; <br>&nbsp; SData[counter] ^= Table[Xor_Index]; <br>} <br><br>所以在解码期间不仅x,y在变,连Table的内容也在变. <br><br>****重点**** <br>假设SData的大小为 100 Bytes, <br>如果我要先解开 20 Byte, 则流程为 1 -&gt; 2 -&gt; 3 <br>再来我会判断此20个Byte是否为正确的资料,if 正确的话我再 <br>解开剩下的 90个Byte 流程为 2 -&gt; 3 ,若分成多的片断的话,则 <br>统程应还是这样的: <br>1 -&gt; 2 -&gt; 3 解最前面的 20 Byte <br>2 -&gt; 3 再解 20 Byte <br>2 -&gt; 3 再解 20 Byte <br>2 -&gt; 3 再解 20 Byte <br>2 -&gt; 3 再解 20 Byte <br><br>反正第一次就是从 1 开始啦!!! :) <br><br><br>==================================================== <br>PWL的格式是(从0208h开始看): <br>20 byte (Username) <br>2 byte (第一组在档案的 Offset)----------------+ <br>2 byte (第二组在档案的 Offset)--------------+ | <br>....... | | <br>Tag1:长度(2 byte),"连线到"的名称,Password &lt;-+-+ <br>长度(2 byte),"连线到"的名称,Password &lt;-+ <br>==================================================== <br><br><br><br>Win95 大概的流程是: <br>1 -&gt; 2 -&gt; 3 解码到Tag1减1的地方(此时Username现形了) <br>if(Username&lt;&gt;登入95时的Username) <br>{ <br>&nbsp; 拨号网路的密码栏将是空的(即使储存密码有打勾) <br>&nbsp; (跳到Step1也没用,因为Key不对嘛,再解下去也是不对的.) <br>} <br>else{ <br>&nbsp; Step1: 1 -&gt; 2 -&gt; 3 从Tag1的地方开始解码. <br>&nbsp; While(NotEND) <br>&nbsp; { <br>&nbsp; &nbsp; 2 -&gt; 3 解2个byte(得到长度,假设解出後,得到 YY) <br>&nbsp; &nbsp; 2 -&gt; 3 解YY个Byte(得到"连线到"的名称&amp;Password) <br>&nbsp; &nbsp; if(和"连线到"的名称符合的话) <br>&nbsp; &nbsp; { <br>&nbsp; &nbsp; &nbsp; 将Password填入密码栏; <br>&nbsp; &nbsp; &nbsp; Break; <br>&nbsp; &nbsp; } <br>&nbsp; } <br>} <br><br>Win95的问题就出在 Username 一定是大写, 而且不足20个Byte的地方以空白填入, <br>更糟糕的是PWL的档名就是Username, 基於此原理我们已得知前面20Byte每个Byte <br>各是XOR什麽东东了, 我们假设为: <br>12 4F 33 20 7F F6 D9 3C 63 AA 11 40 32 DE 46 55 77 2C 3A AD <br><br>其实从PWL可分析到共有几组帐号,至於怎麽分析的呢? 我也忘了.反正可以就是啦! <br>So, 0108h+几组*2= Tag1 . <br>哈,我已经知道第一组帐号存在那里了.(0108h是固定的) <br>即然知道第一组的位置,常然也就得到了紧接在Username 的那 2 个Byte, <br>现在我们已拥有了 22 个byte了喔! <br><br>怎麽解第一组呢? <br>因为95在Step1的地方又重覆了一次 1 -&gt; 2 -&gt; 3 <br>所以我们可直接使用我们幸苦得 <br>到的 22 Byte 从Tag1的地方将它给XOR下去. <br>如果"连线到"的名称+Password的长度 <br>不会很长的话----&gt; 完全显露无遗(可能还秀出了第二组的一点点喔!) <br><br>以上就是 Glide.EXE 所利用的原理(根本不需要Key就解出一组出来了) <br>如果你要将所有的帐号(Hinet'Seednet'成大'广通...不会吧!帐号那麽多,借一组来用 <br>用可以吗?)全部抓出来, 那很抱歉,你必需知道 Key. <br>/__ 在成大BBS和女生Talk多了,打错了. <br><br><br>至於 Key 是怎麽来的呢? <br>我们在进入Win95时,不是会出现一个输入密码的Dialog吗? <br>对啦,就是利用这密码 <br>换算来的啦!(没有的话,表示你没设定密码, 你的Key=00000000h) <br><br>以下是Win95将登入密码转为Key的程式(最後的eax就是你的Key喔): <br>push esi <br>xor eax,eax <br>mov si,密码长度+1 <br>cmp si,ax <br>jz 7fcb19e7 <br>mov edx,offset 密码 <br>movzx ecx,byte ptr [edx] <br>7fcb19d1: <br>add eax,ecx <br>inc edx <br>mov ecx,eax <br>shl ecx,7 <br>shr eax,19h <br>or ecx,eax <br>dec si <br>mov eax,ecx <br>jnz 7fcb19d1 <br>7fcb19e7: <br>pop esi <br>ret 8 <br><br>嗯,组合语言比较乱, 用 C 来看(结果一样): <br><br>unsigned long result = 0L; <br>for( i = 0; i &lt; passwordLen + 1; i++ ) <br>{ <br>&nbsp; int tmp = ( int ) ( result &gt;&gt; 25 ); <br>&nbsp; result += toupper( password[ i ] ); <br>&nbsp; result = ( result &lt;&lt; 7 ) | tmp; <br>} <br><br>就是一直转来转去再加来加去的啦! <br><br>所以若你知道某人进入Win95的密码,那你就可以算出 Key, 也就可取得某人 <br>所使用的所有帐号了.怎麽做呢? 喔, 这不必写任何程式, 只要用SoftICE就 <br>可以了, 所有的动作都在 Mspwl32.dll中, 设个断点, 一次一组,方便又好用. <br><br>如果你连此人进入Win95的密码都不知道的话, 那只好用暴力法了. <br><br>1.编个密码--&gt;转成Key--&gt;经RC4--&gt;什麽!前20Byte的username不对--再来--+ <br>^/-----------------------------------------------------------+ <br><br>2.指定一个Key--&gt;经RC4--&gt;什麽!前20Byte的username不对--再来--+ <br>^/----------------------------------------------------+ <br><br>那个好用,就得看运气了. :) <br><br><br>Glide.EXE 好像在yhq可取得, 不知道.....忘了???????? <br><br>注: <br>这些Bug後来Microsoft出了一支 Mspwl32.dll 的更新程式, 听说可解决此 <br>问题.我没试过,所以我也不知道. 你可看看你的 .PWL 档的最前面4个Byte <br>是否为 b0h,"MFN", 若是的话, 表示你有危险啦!!! &nbsp;<br>&nbsp;<br>发布时间:2001年03月31日08时 <br>阅读次数:196 <br>&nbsp;<br>关闭窗口 &nbsp;<br><br>--------------------------------------------------------------------------------<br>&nbsp;<br>文章转发到E-mail: &nbsp; &nbsp; <br><br>--------------------------------------------------------------------------------<br>&nbsp;<br>&nbsp;<br>2000版版权归属于网络安全焦点,所有文章版权各属于其作者,如转载请务必注明作者! <br>&nbsp;
 
后退
顶部