|   
 UID2031431 威望27 点 金钱2 金币 点卡10 点 
 | 
1#
 发表于 2004-10-19 19:19 
 | 只看该作者 
所需阅读权限 1 [转帖]Win98 的屏幕保护密码破解方法
| [color=#FF0000]作者:程式猎人 利用系统的屏幕保护功能可以防止他人在自己不在的情况下偷用自己的计算机,从而起到保护数据安全的作用。不过在不配合其它限制功能的情况下,系统的屏幕保护密码是非常脆弱的。我们在遗忘密码之后只需使用“复位”键强行启动计算机(某些设计不完善的屏幕保护程序甚至可以使用Ctrl+Alt+Del强行关闭,其操作就更简单了),然后右击桌面空白处并从弹出的快捷菜单中执行“属性”命令,打开“显示属性”设置框并单击“屏幕保护”选项卡,最后取消“密码保护”选项即可(取消该选项时无需确认密码)。另外,据说目前市面上还出现了一种专门用于破解屏幕保护密码的光盘。插入该光盘之后,它就会利用Windows 98的自动运行功能启动保存在光盘上的屏幕保护密码破解程序,对屏幕保护功能的密码进行分析、破译,最后再将密码显示在屏幕上或写到软盘上,这就更方便了(对不起,该功能只是道听途说,本人并没有亲眼见到这样的光盘)。
 上面就是这个文章的作者提供的破解方法,但是我个人认为可以对win98的屏幕保护密码进行研究一下,这样就可以知道win98是使用什么文件来验证密码的。
 现在先使用Regsnap来对注册表进行拍照,然后将屏幕保护密码设为有,这样就可以分析到win98是如何将屏保密码放在注册表的哪个地方了。这样分析后得到了这样的结果。
 HKEY_USERS\.DEFAULT\Control Panel\desktop\ScreenSaveUsePassword=0x00000001(1)
 这里就是win将密码项打开的选项,如果你将这个0x00000001(1)变为0x00000000(0)后就没有屏保密码了。也就是这个屏保密码不再起作用了。
 这个对屏保密码的研究是最开始阶段,下一步是将研究win是使用哪个程序来验证屏保密码的。
 这里依然还得借住工具来分析,先使用TRW2000来分析,将屏保启动,出现验证密码的地方,在这里先输入任意的密码后,设bpx hmemcpy后点击OK,被拦下来,它这时在系统中keneal中,按F12几次就可以到达下面显示为password!……字样的地方,这里就是我们想要得到的地方。
 * Reference To: USER32.GetDlgItemTextA, Ord:00FDh
 |
 :78054201 FF15DC720578            Call dword ptr [780572DC]
 :78054207 85FF                    test edi, edi  <-出来
 :78054209 751B                    jne 78054226
 :7805420B 8D45FC                  lea eax, dword ptr [ebp-04]
 :7805420E 8D8D78FFFFFF            lea ecx, dword ptr [ebp+FFFFFF78]
 :78054214 50                      push eax
 :78054215 51                      push ecx
 * Reference To: MPR.WNetVerifyPasswordA, Ord:004Eh
 |
 :78054216 E87F020000              Call 7805449A
 :7805421B 85C0                    test eax, eax
 :7805421D 7440                    je 7805425F
 :7805421F B801000000              mov eax, 00000001
 :78054224 EB79                    jmp 7805429F
 * Referenced by a (U)nconditional or (C)onditional Jump at Address:
 |:78054209(C)
 |
 :78054226 8D8574FEFFFF            lea eax, dword ptr [ebp+FFFFFE74]
 :7805422C 8D8D78FFFFFF            lea ecx, dword ptr [ebp+FFFFFF78]
 :78054232 50                      push eax
 :78054233 51                      push ecx
 * Reference To: KERNEL32.lstrlenA, Ord:02E7h
 |
 :78054234 FF1558720578            Call dword ptr [78057258]
 :7805423A 50                      push eax
 :7805423B 8D8D78FFFFFF            lea ecx, dword ptr [ebp+FFFFFF78]
 :78054241 51                      push ecx
 :78054242 E89A010000              call 780543E1
 :78054247 57                      push edi    加密后你输入的密码
 :78054248 8D8D74FEFFFF            lea ecx, dword ptr [ebp+FFFFFE74]
 :7805424E 51                      push ecx  加密后真正的密码
 * Reference To: KERNEL32.lstrcmpiA, Ord:02DEh
 |
 :7805424F FF1554720578            Call dword ptr [78057254]
 :78054255 83F801                  cmp eax, 00000001
 :78054258 1BC0                    sbb eax, eax
 :7805425A F7D8                    neg eax
 :7805425C 8945FC                  mov dword ptr [ebp-04], eax
 * Referenced by a (U)nconditional or (C)onditional Jump at Address:
 |:7805421D(C)
 |
 :7805425F 33FF                    xor edi, edi
 :78054261 B801000000              mov eax, 00000001
 :78054266 397DFC                  cmp dword ptr [ebp-04], edi
 :78054269 7534                    jne 7805429F    ***关键跳跃的地方
 上面就是程序比较屏保密码过程,上面是加密后再进行比较的过程,所以无法看到真正的密码,但是你可以在***处强行跳跃的就可以了。这样就可以回到win中了。
 现在使用TRW就可以解决掉屏保密码了。但是还是不行的,我们得找到win使用哪个程序来调用验证密码的过程。
 现在使用File monitor来查看win调用了什么程序。
 经过监视,发现win调用c:\windows\system\password.cpl程序来验证密码的过程。其实也用到了其它程序,但是这个就是我们要找的程序。
 使用W32DASM来反汇编这个程序,发现就是我们要找的程序,于是我将
 :78054266 397DFC                  cmp dword ptr [ebp-04], edi
 :78054269 7534                    jne 7805429F    ***关键跳跃的地方
 这里改为
 :78054266 397DFC                  cmp dword ptr [ebp-04], edi
 :78054269 EB34                    jmp 7805429F    ***关键跳跃的地方
 存盘,再进行屏保密码验证过程,你只要点击OK就可以了。win已经没有了屏保密码保护的功能。
 好了,现在总结一下吧,如果你想打开屏保保护的密码,使用最后一种方法比较好,可以在另一台电脑中将password.cpl修改为上面的那样,重新启动电脑就可以将它拷贝到相应的目录下就可以了。这样进行win中就是开始还有密码保护也能点击OK回到win中来。
 现在win98的屏保密码加密过程再研究一下了,win的屏保密码加密过程其实是一个很简单的过程,它的具体算法很简单的。如下:
 :780510AF 0FB6442413              movzx eax, byte ptr [esp+13]  初始值为0,以后每次加1,就为得到下面的cl值,所以cl值只同位数值有关,不同密码有关。
 :780510B4 40                      inc eax
 :780510B5 99                      cdq
 :780510B6 33C2                    xor eax, edx
 :780510B8 2BC2                    sub eax, edx
 :780510BA 25FF000000              and eax, 000000FF
 :780510BF 33C2                    xor eax, edx
 :780510C1 2BC2                    sub eax, edx
 :780510C3 88442413                mov byte ptr [esp+13], al
 :780510C7 0FB6C0                  movzx eax, al
 :780510CA 8D0C38                  lea ecx, dword ptr [eax+edi]
 :780510CD 8A19                    mov bl, byte ptr [ecx]
 :780510CF 0FB6442412              movzx eax, byte ptr [esp+12]
 :780510D4 0FB6F3                  movzx esi, bl
 :780510D7 03C6                    add eax, esi
 :780510D9 99                      cdq
 :780510DA 33C2                    xor eax, edx
 :780510DC 2BC2                    sub eax, edx
 :780510DE 25FF000000              and eax, 000000FF
 :780510E3 33C2                    xor eax, edx
 :780510E5 2BC2                    sub eax, edx
 :780510E7 88442412                mov byte ptr [esp+12], al
 :780510EB 0FB6C0                  movzx eax, al
 :780510EE 8D1438                  lea edx, dword ptr [eax+edi]
 :780510F1 8A02                    mov al, byte ptr [edx]
 :780510F3 8801                    mov byte ptr [ecx], al
 :780510F5 881A                    mov byte ptr [edx], bl
 :780510F7 0FB601                  movzx eax, byte ptr [ecx]
 :780510FA 03C6                    add eax, esi
 :780510FC 99                      cdq
 :780510FD 33C2                    xor eax, edx
 :780510FF 2BC2                    sub eax, edx
 :78051101 25FF000000              and eax, 000000FF
 :78051106 33C2                    xor eax, edx
 :78051108 2BC2                    sub eax, edx
 :7805110A 8A0C07                  mov cl, byte ptr [edi+eax]
 :7805110D 8B442420                mov eax, dword ptr [esp+20]
 :78051111 300C28                  xor byte ptr [eax+ebp], cl
 :78051114 45                      inc ebp
 :78051115 3B6C241C                cmp ebp, dword ptr [esp+1C]
 :78051119 7C94                    jl 780510AF
 win的加密过程是先使用从0开始将从780510AF开始计算一直到7805110A计算结束,得到cl值这个值不于正确的密码有关,所以它只同密码的位数有关的,具体关系如下:
 位数: 1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 ……
 密文: 48 EE 76 1D 67 69 A1 1B 7A 8C 47 F8 54 95 97 5F ……
 win的加密过程就是将上面的密文同你输入的密码进行xor运算,得到的加密密文后再同以前保存的密码比较,如果……。正在就不用说了。
 win将密码的加密密文放在这里
 HKEY_USERS\.DEFAULT\Control Panel\desktop\ScreenSave_Data
 它当然是最后的密文了。你在这里可以得到十六位的密文。如果你设的密码为:????(这个是演示使用的),在这里你将得到如下的数据:
 0000  37 38 44 46 34 34 32 45  78DF442E
 0001  00
 这里最后的00就是密码的结束标志,上面才是密文的。它将是你输入密码的两倍,这个很容易理解,现在大家就可以使用从位数得到的密文来对这个加密的密码进行解密处理。
 具体操作为:屏保加密密码=屏保位数密文XOR屏保明文
 屏保位数密文:  48  EE  76  1D
 XOR  屏保明文:
 =  屏保加密密码:  78  DF  44  2E
 通过上面的反xor运算可以得到屏保密码的明文了。运算结果为:30 31 32 33,则明文就为:0123。这下屏保的密码破解过程就完全研究成功了。
 现在可以很简单的制作出win98的屏保密码破解软件了。当然你得输入加密后的密文了。这样就可以得到明文了。具体制作过程很简单的,大家使用C就可以解决了
 | 
 
| 哈哈哈!!!!你的IP是不是  ?我都知道了!!! |  |