时间:2021-01-02 15:12:03 | 栏目: | 点击:次
搜索 → B9 10 00 00 00 2B
替为 → B9 00 00 00 00 2B
|
搜索 → 8A 18 8AD3 3A19 751A 84D2 7412 8A 58 01
替为 → 8A 19 8AD3 3A19 751A 84D2 7412 8A 59 01
|
地址80FD9E2A起
00 00 00 00 00 00 00 00-00 00 3F 03 8C 03 26 01 ..........?...&.
43 68 69 6E 65 73 65 21-31 30 2D 30 31 2D 31 39 Chinese!10-01-19
34 39 00 00 00 00 00 00-00 00 00 00 00 00 00 00 49..............
00 00 67 03 B4 03 22 01-54 65 73 54 00 00 00 00 ..g...".TesT....
|
地址816B55D2起
00 00 B6 0F 00 00 00 40-00 00 E7 02 64 03 2A 01 .......@.
54 65 73 54 54 65 73 54-00 00 00 00 00 00 00 00 TesTTesT.
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .........
00 00 3F 03 8C 03 26 01-00 00 00 00 00 00 00 00 ..?...&..
00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .........
00 00 00 00 00 00 00 00-00 00 67 03 B4 03 22 01 .........
54 65 73 54 00 00 00 00-00 00 00 00 00 00 00 00 TesT.....
地址816B57F2起
00 00 06 00 00 00 00 00-05 00 57 04 74 06 2E 01 .........
21 21 47 6F 54 6F 21 21-00 00 00 00 00 00 00 00 !!GoTo!!.
|
: :
以上进行了多次单向HasH运算并得到长度为128位的HasH串(具体算法分析略)然后与保存在对应PWL文件内的正确值比对,详见以下代码。
: :
7FA71D97 B910000000 mov ecx, 00000010 ;HasH串为128位即16个字节
7FA71D9C 2BC0 sub eax, eax ;初始化EAX寄存器
7FA71D9E F3 repz
7FA71D9F A6 cmpsb ;进行128位HasH串比对
7FA71DA0 7405 je 7FA71DA7 ;相等,系统认为用户密码正确
7FA71DA2 1BC0 sbb eax, eax ;否则置密码比对错误标志
7FA71DA4 83D8FF sbb eax, FFFFFFFF
7FA71DA7 85C0 test eax, eax ;测试密码比对标志位
7FA71DA9 B8261C0000 mov eax, 00001C26 ;预置密码错误消息
7FA71DAE 7502 jne 7FA71DB2 ;密码比对错误,则转
7FA71DB0 33C0 xor eax, eax ;否则置密码比对正确位
7FA71DB2 5F pop edi ;恢复现场
7FA71DB3 5E pop esi ;恢复现场
7FA71DB4 5B pop ebx ;恢复现场
7FA71DB5 8BE5 mov esp, ebp ;恢复现场
7FA71DB7 5D pop ebp ;恢复现场
7FA71DB8 C20400 ret 0004 ;返回
: :
|
将 mov ecx, 00000010
改为 → mov ecx, 00000000
|
: : ┏ ECX、EAX分别指向用户输入密码及正确密码
797972C3 8D4DE8 lea ecx, dword ptr [ebp-18]
797972C6 8D85E8FDFFFF lea eax, dword ptr [ebp+FFFFFDE8]
797972CC 8A18 mov bl, byte ptr [eax] ;获取第一个密码字符
797972CE 8AD3 mov dl, bl ;保存起副本
797972D0 3A19 cmp bl, byte ptr [ecx] ;与正确的密码比对
797972D2 751A jne 797972EE ;第一个密码字符不正确
797972D4 84D2 test dl, dl ;为最后一个密码字符?
797972D6 7412 je 797972EA ;是则转
797972D8 8A5801 mov bl, byte ptr [eax+01] ;获取下一密码字符
797972DB 8AD3 mov dl, bl ;保存其副本
797972DD 3A5901 cmp bl, byte ptr [ecx+01] ;与正确的密码比对
797972E0 750C jne 797972EE ;比对不成功则转
797972E2 40 inc eax ;调整当前密码字符指针
797972E3 40 inc eax ;调整当前密码字符指针
797972E4 41 inc ecx ;调整正确密码字符指针
797972E5 41 inc ecx ;调整正确密码字符指针
797972E6 84D2 test dl, dl ;为最后一个密码字符?
797972E8 75E2 jne 797972CC ;尚未比对完则转
797972EA 33C0 xor eax, eax ;比对结束并且全部正确
797972EC EB05 jmp 797972F3 ;转后续测试标志位
797972EE 1BC0 sbb eax, eax ;比对结束但是不正确
797972F0 83D8FF sbb eax, FFFFFFFF ;置错误标志位
797972F3 85C0 test eax, eax ;测试标志位
797972F5 7434 je 7979732B ;密码比对正确则转
: :
|
将 mov bl, byte ptr [eax]
改为 → mov bl, byte ptr [ecx]
将 mov bl, byte ptr [eax+01]
改为 → mov bl, byte ptr [ecx+01]
|
搜索 → F8 10 0F 84 71 FF FF
替为 → F8 00 0F 84 71 FF FF
|