檔案加鎖王 8.1演算法分析

看雪資料發表於2015-11-15

檔案加鎖王 8.1演算法分析
 檔案加鎖王 8.1演算法分析
 作者:onlyu[FCG][DFCG]
【軟體名稱】檔案加鎖王 8.1
【下載地址】http://hnpy.onlinedown.net/down/lockFile.rar
【應用平臺】Win9x/NT/2000/XP
【軟體大小】297k
【軟體限制】20次限次版
【破解宣告】破解只是感興趣,無其它目的。失誤之處敬請諸位大俠賜教!
【破解工具】regshot v1.10,trw2000 v1.22
【軟體簡介】檔案保護工具
【分析過程】執行軟體,發現是20次限次版本,先看一下它把使用次數記錄在哪裡,執行regshot ,先進行一次掃描,執行軟體,再關閉,用regshot 進行第二次掃描,比較,得到如下結果:

**Original contents Maybe deleted or modified**H.L.KSoftwareMicrosoftWindowsRuntimes: 
"2"H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerNoLogoff: 
0x00000000H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciessystemDisableTaskMgr: 
0x00000000H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciessystemDisableLockWorkstation: 
0x00000000H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciessystemDisableChangePassword:
 0x00000000**Keys&values Modified | Added in the 
2ndShot**H.L.KSoftwareMicrosoftWindowsRuntimes: "3"H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerNoLogoff: 
0x00000001H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciessystemDisableTaskMgr: 
0x00000001H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciessystemDisableLockWorkstation: 
0x00000001H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciessystemDisableChangePassword: 0x00000001

真是一目瞭然啊!它把使用次數資訊記錄在H.L.KSoftwareMicrosoftWindowsRuntimes鍵值中,怎麼去除使用次數限制不用我說了吧。下面分析一下它的註冊演算法。來到註冊視窗,它會告訴我的電腦ID號碼:659428341。好,輸入我的試練碼:78787878,下萬能斷點:bpx hmemcpy,結果不停地黑頻,**!,沒辦法,只能用其他方法了,按cntl+m,進入TRW,下s 0 l  -1 '78787878',找到了,為30:805c7f32(注:每次都不一樣),下bpm 805c7f32。f5來到程式,點確定輸入,終於截下了,下pmodule,來到: 
0167:0044A7EA  CMP      EAX,EBX
0167:0044A7EC  FNCLEX  
0167:0044A7EE  JNL      0044A808
0167:0044A7F0  MOV      ECX,[EBP+FFFFFF10]
0167:0044A7F6  PUSH     DWORD A0
0167:0044A7FB  PUSH     DWORD 00422F9C
0167:0044A800  PUSH     ECX
0167:0044A801  PUSH     EAX
0167:0044A802  CALL     `MSVBVM60!__vbaHresultCheckObj`
0167:0044A808  MOV      EAX,[EBP-28]
0167:0044A80B  LEA      EDX,[EBP-44]
0167:0044A80E  MOV      [EBP-3C],EAX
0167:0044A811  LEA      EAX,[EBP-54]
0167:0044A814  PUSH     EDX
0167:0044A815  PUSH     EAX
0167:0044A816  MOV      [EBP-28],EBX
0167:0044A819  MOV      DWORD [EBP-44],08
0167:0044A820  CALL     `MSVBVM60!rtcTrimVar`
0167:0044A826  MOV      EAX,00422260
0167:0044A82B  LEA      ECX,[EBP-54]
0167:0044A82E  MOV      [EBP+FFFFFF54],EAX
0167:0044A834  MOV      [EBP+FFFFFF44],EAX
0167:0044A83A  LEA      EDX,[EBP+FFFFFF4C]
0167:0044A840  PUSH     ECX
0167:0044A841  LEA      EAX,[EBP-64]
0167:0044A844  PUSH     EDX
0167:0044A845  PUSH     EAX
呵呵,是VB程式,還好不是Pcode的,按F10繼續往下走,來到:
0167:0044A979 FF1564104000     CALL     `MSVBVM60!__vbaHresultCheckObj`
0167:0044A97F 8B8D18FFFFFF     MOV      ECX,[EBP+FFFFFF18]<------[EBP+FFFFFF18]儲存我的ID號碼
0167:0044A985 FF1580104000     CALL     `MSVBVM60!__vbaI4Abs`<--------求ecx的絕對值
0167:0044A98B 8BC8             MOV      ECX,EAX<-------------EAX=0
0167:0044A98D 81E969FE0B00     SUB      ECX,000BFE69<--------ECX=ECX-BFE69
0167:0044A993 0F80E0050000     JO       NEAR 0044AF79
0167:0044A999 FF1580104000     CALL     `MSVBVM60!__vbaI4Abs`<--------求ecx的絕對值EAX=|ECX|
0167:0044A99F 8BC8             MOV      ECX,EAX<----------------------ECX=EAX
0167:0044A9A1 B8D3200DD2       MOV      EAX,D20D20D3<-----------------EAX=D20D20D3
0167:0044A9A6 F7E9             IMUL     ECX<--------------------------EAX*ECX
0167:0044A9A8 03D1             ADD      EDX,ECX<----------------------EDX=EDX+ECX
0167:0044A9AA C1FA06           SAR      EDX,06<-----------------------EDX=EDX sar 6
0167:0044A9AD 8BCA             MOV      ECX,EDX<----------------------EDX裡儲存的就是註冊碼了
0167:0044A9AF C1E91F           SHR      ECX,1F
0167:0044A9B2 03D1             ADD      EDX,ECX
0167:0044A9B4 52               PUSH     EDX
0167:0044A9B5 FF1514104000     CALL     `MSVBVM60!__vbaStrI4`
0167:0044A9BB 894594           MOV      [EBP-6C],EAX<-----------------[EAX]->"8444132"我的註冊碼
0167:0044A9BE 8D558C           LEA      EDX,[EBP-74]
0167:0044A9C1 8D857CFFFFFF     LEA      EAX,[EBP+FFFFFF7C]
0167:0044A9C7 52               PUSH     EDX
0167:0044A9C8 50               PUSH     EAX
0167:0044A9C9 C7458C08000000   MOV      DWORD [EBP-74],08
0167:0044A9D0 FF15A8104000     CALL     `MSVBVM60!rtcTrimVar`
0167:0044A9D6 8D4DAC           LEA      ECX,[EBP-54]
0167:0044A9D9 8D954CFFFFFF     LEA      EDX,[EBP+FFFFFF4C]
0167:0044A9DF 51               PUSH     ECX
0167:0044A9E0 8D459C           LEA      EAX,[EBP-64]
0167:0044A9E3 52               PUSH     EDX
0167:0044A9E4 50               PUSH     EAX
0167:0044A9E5 C78544FFFFFF6022+MOV      DWORD [EBP+FFFFFF44],00422260
0167:0044A9EF C7853CFFFFFF0800+MOV      DWORD [EBP+FFFFFF3C],08
0167:0044A9F9 FF1540114000     CALL     `MSVBVM60!__vbaVarCat`
可以看出這個軟體的註冊演算法極其簡單,記憶體序號產生器如下:
1、程式名稱:LockFile.exe 
2、新增資料: 
  中斷地址:44A9BB 
    中斷次數:1 
  第一位元組:89 
  指令長度:3
3、選擇記憶體方式暫存器EAX,寬字元,生成。
下面引用BKSY[DFCG]用VC編寫的序號產生器原始碼:
#include <stdio.h>

int abs(int n)
{
if(n<0) n*=(-1);
return n;
}

void main()
{
int id;
printf("input your id:");
scanf("%d",&id);
id=abs(id);
id-=0xBFE69;
id=abs(id);
__asm
{
mov ecx,id
mov eax,0xD20D20D3
imul ecx
add edx,ecx
sar edx,6
mov id,edx
}
printf("
Your code is %d
",id);
}
最後感謝BKSY[DFCG]和laoxuetong[DFCG]的幫助。

相關文章