■、作者宣告:初學破解,純屬技術交流,無其它目的。
■、工具: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;