印表機監控王 V3.08註冊演算法分析及序號產生器原始碼

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

■、作者宣告:初學破解,純屬技術交流,無其它目的。
■、工具:ollyDBg1.09,W32Dasm10,脫殼工具。
■、基本知識:基礎彙編知識,基本工具使用。
■、註冊形式:使用者名稱+公司名+機器碼+註冊碼
■、軟體介紹:
印表機監控王 V3.08

軟體大小:  673 KB
軟體語言:  簡體中文
軟體類別:  國產軟體 / 共享版 / 列印工具
應用平臺:  Win9x/NT/2000/XP
介面預覽:  無
加入時間:  2003-04-19 16:37:21
下載次數:  557
推薦等級:  

聯 系 人:  newhzlan@163.com  
開 發 商:  http://arms.nease.net/prtmon/

軟體介紹:
   主要功能:能監控到本機和網路上共享的印表機;監控到的資訊包括:印表機名稱,列印人,列印電腦,列印時間,列印檔案名稱,列印檔案大小,列印檔案頁數及列印紙張型別及方向。能將監控到的資訊進行管理,列印,查閱,從而達到節約公司資源的目的。運用多執行緒監控,可對監控到的資訊分部門,分使用者,分日期進行統計查詢及報表。

---------------------------------------------------------------------

一、主要功能
  能監控到本機和網路上共享的印表機;
  監控到的資訊包括:印表機名稱,列印人,列印電腦,列印時間,列印檔案名稱,列印檔案大小,列印檔案頁數及列印紙張型別及方向。
  能將監控到的資訊進行管理,列印,查閱,從而達到節約公司資源的目的。


■、破解過程:

一、脫殼後,用w32Dasm載入分析出錯資訊,如下:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00590414(C)
|

* Possible StringData Ref from Code Obj ->"註冊碼錯誤!"
                                 |
:00590488 B8CC055900              mov eax, 005905CC
:0059048D E8821BEDFF              call 00462014


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:005903C7(C)
|
:005903FB 8D55EC                  lea edx, dword ptr [ebp-14]
:005903FE 8B870C030000            mov eax, dword ptr [edi+0000030C]
:00590404 E88397EAFF              call 00439B8C
:00590409 8B55EC                  mov edx, dword ptr [ebp-14]
:0059040C 8B45F8                  mov eax, dword ptr [ebp-08]
:0059040F E8803EE7FF              call 00404294
:00590414 7572                    jne 00590488====>跳轉出錯

* Possible StringData Ref from Code Obj ->"PrtMonit.ini"
                                 |
:00590416 B964055900              mov ecx, 00590564
:0059041B B201                    mov dl, 01

* Possible StringData Ref from Code Obj ->"?ìG"


二、用ollydbg載入程式,進行註冊過程動態分析。


0059039D  |.  E8 623BE7FF   CALL unpacked.00403F04
005903A2  |.  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]
005903A5  |.  8B87 04030000 MOV EAX,DWORD PTR DS:[EDI+304]
005903AB  |.  E8 DC97EAFF   CALL unpacked.00439B8C                   ;  取機器碼
005903B0  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ;  機器碼入eax
005903B3  |.  8D55 FC       LEA EDX,DWORD PTR SS:[EBP-4]
005903B6  |.  E8 3597E7FF   CALL unpacked.00409AF0                   ;  取機器碼
005903BB  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
005903BE  |.  E8 C13DE7FF   CALL unpacked.00404184                   ;  取機器碼位數
005903C3  |.  8BF0          MOV ESI,EAX
005903C5  |.  85F6          TEST ESI,ESI
005903C7  |.  7E 32         JLE SHORT unpacked.005903FB
005903C9  |.  BB 01000000   MOV EBX,1
005903CE  |>  8D45 F0       /LEA EAX,DWORD PTR SS:[EBP-10]           ;  密碼位入eax
005903D1  |.  8B55 FC       |MOV EDX,DWORD PTR SS:[EBP-4]            ;  機器碼入edx
005903D4  |.  0FB6541A FF   |MOVZX EDX,BYTE PTR DS:[EDX+EBX-1]       ;  機器碼依次入edx
005903D9  |.  83EA 30       |SUB EDX,30                              ;  edx=edx-30,即轉為十進位制
005903DC  |.  03D3          |ADD EDX,EBX                             ;  edx=edx+ebx,ebx為計數器
005903DE  |.  B9 E0045900   |MOV ECX,unpacked.005904E0               ;  密碼串YELK456DFAO-FDI446ZXDPLMGWT-T4548OYXMLYASDF-LK1387DFDFASPZ-PD132LJD-FDM入ecx
005903E3  |.  8A5411 FF     |MOV DL,BYTE PTR DS:[ECX+EDX-1]          ;  取第(EDX=機器碼第N位數*N)密碼串十六進位制,入dl
005903E7  |.  E8 C03CE7FF   |CALL unpacked.004040AC
005903EC  |.  8B55 F0       |MOV EDX,DWORD PTR SS:[EBP-10]
005903EF  |.  8D45 F8       |LEA EAX,DWORD PTR SS:[EBP-8]
005903F2  |.  E8 953DE7FF   |CALL unpacked.0040418C
005903F7  |.  43            |INC EBX
005903F8  |.  4E            |DEC ESI
005903F9  |.^ 75 D3         \JNZ SHORT unpacked.005903CE             ;  以上生成註冊真碼
005903FB  |>  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
005903FE  |.  8B87 0C030000 MOV EAX,DWORD PTR DS:[EDI+30C]
00590404  |.  E8 8397EAFF   CALL unpacked.00439B8C
00590409  |.  8B55 EC       MOV EDX,DWORD PTR SS:[EBP-14]            ;  假碼入edx
0059040C  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]             ;  註冊真碼入eax
0059040F  |.  E8 803EE7FF   CALL unpacked.00404294
00590414  |.  75 72         JNZ SHORT unpacked.00590488===========>不等則出錯
00590416  |.  B9 64055900   MOV ECX,unpacked.00590564                ;  ASCII "PrtMonit.ini"
0059041B  |.  B2 01         MOV DL,1
0059041D  |.  A1 F4C54700   MOV EAX,DWORD PTR DS:[47C5F4]
00590422  |.  E8 75C2EEFF   CALL unpacked.0047C69C
00590427  |.  8BD8          MOV EBX,EAX
00590429  |.  8D55 E8       LEA EDX,DWORD PTR SS:[EBP-18]
0059042C  |.  8B87 0C030000 MOV EAX,DWORD PTR DS:[EDI+30C]
00590432  |.  E8 5597EAFF   CALL unpacked.00439B8C
00590437  |.  8B45 E8       MOV EAX,DWORD PTR SS:[EBP-18]
0059043A  |.  50            PUSH EAX

總結:據機器碼從密碼錶中取出正確的註冊碼,即
第N位註冊碼=第N位機器碼的數+N

密碼錶:
YELK456DFAO-FDI446ZXDPLMGWT-T4548OYXMLYASDF-LK1387DFDFASPZ-PD132LJD-FDM
XCMQI-NDFLDKO-ALCMADOEEILAD-JEISOJKO-KDMCINJFDSWAEW(共:122位)

我的註冊資訊為:
機器碼:04951545366515555705668(共23位)
註冊碼:Y5-F5OOF-444DZXDPGZGT-5
    

註冊碼的資訊儲存在windows目錄下,在PrtMonit.ini的檔案中。

VC6.0中的原始碼(關鍵部分)

char ccode[24];//機器碼
char sn[24];//註冊碼
int temp;
int i;
char code[]={'Y','E','L','K','4','5','6','D','F','A','O','-','F','D','I','4','4','6','Z','X','D','P','L','M','G','W','T','-','T','4','5','4','8','O','Y','X','M','L','Y','A','S','D','F','-','L','K','1','3','8','7','D','F','D','F','A','S','P','Z','-','P','D','1','3','2','L','J','D','-','F','D','M','X','C','M','QI','-','N','D','F','L','D','K','O','-','A','L','C','M','A','D','O','E','E','I','L','A','D','-','J','E','I','S','O','J','K','O','-','K','D','M','C','I','N','J','F','D','S','W','A','E','W'};


case IDC_BUTTON4:
GetDlgItemText(dhWnd,IDC_EDIT1,ccode,24);
for(i=0;i<24;i++ )
{
 temp=ccode[i]-48;//字元轉換為數字
 temp=temp+i;
 sn[i]=scode[temp];
}
SetDlgItemText(dhWnd,IDC_EDIT2,sn);
return 1;

相關文章