• 标 题:转载:InstallShield Password 破解一例 (1千字)
  • 作 者:1212
  • 时 间:2001-2-9 18:49:24
  • 链 接:http://bbs.pediy.com

InstallShield Password 破解一例
软件: StateCAD4.11TE版
运行自解压的安装文件后,显示出一个对话框要求输入password,
按钮[上一步]和[完成]都被禁止,只有[取消]处于允许状态。
密码输入正确后[上一步]和[完成]按钮才能被允许。
随便输入几个数字"12345",Ctrl+D到Soft-ICE环境,设断点 bpx GetWindowText,然后F5继续回到password对话框,再输入一个数字'6'时Soft-ICE截获GetWindowText,软件代码如下:
CALL [USER32!GetWindowTextA]
MOV EDX,[0040FFB0]
PUSH EDX ;d edx观察数据段:
;0040FFB0: 31 32 33 34 35 36 00 00
; 1 2 3 3 5 6
CALL 00401090 ;这个是算密码是否有效的CALL,下面再详细分析
MOV EDX,[0040FAA8] ;[0040FAA8]=00F45147
ADD ESP,04
XOR ECX,ECX
CMP EAX,EDX ;判断EAX=00F45147 ? //EAX=EDX才是正常的流程
SETZ CL ;保存判断结果
MOV EAX,ECX ;EAX返回判断结果
POP EBP
RET
计算密码是否有效的CALL:
015F:00401090 PUSH EBP
MOV EBP,ESP
MOV EDX,EBP+8
MOV EAX,00F143AC ;EAX初始化
MOV CL,[EDX] ;把密码的第一个字符"1"->CL
TEST CL,CL ;判断是否为00H
JZ 004010AE ;为00H则返回
015F:004010A1 MOVSX ECX,CL ;ECX的高位被清零
INC EDX ;EDX加1,指向下一个字符
LEA EAX,[ECX*2+EAX];EAX=ECX*2+EAX
MOV CL,[EDX] ;密码字符->CL
TEST CL,CL ;判断是否为0
JNZ 004011A1 ;不等于00H则跳到004011A1执行
;有点疑惑: 015F:004011A1 NOP
;事实上代码是跳到004010A1运行
;绝非笔记记录有误,难道是Soft-ICE的bug?
015F:004010AE XOR EAX,00051993 ;所有的密码字符都经过运算后,
;再与0051993 XOR一下
POP EBP
RET ;OK,返回
整个密码效验的流程如下:
EAX=00F143AC
每个密码字符都参与循环运算:
{
ECX=密码字符的ASCII码值
EAX=ECX*2+EAX
}
EAX=EAX XOR 0051993
IF EAX==00F45147 则密码正确
所以只要所有密码字符的ASCII值之和等于
294H=( (00F45147 xor 0051993)-00F143AC )/2
即可
编造一个: "abcdef?"
ASCII码值之和=61H+62H+63H+64H+65H+66H+3F=294H

回到password对话框输入试试,ok ;)