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 ;)