ultraedit9.10
小弟學pj已經2,3個禮拜了,還沒正式找過一款軟體的註冊碼,這次就下定決心那ultraedit
v9.10開刀。
以前剛學pj時爆破過它,去掉了時間限制和nag視窗,但是總覺得不爽,這次我參考了看雪精華四上oake寫的文章,找到了他的註冊碼,在此謝謝oake前輩了。
廢話講完正式進入主題:
軟體名稱:ultraedit v9.10
軟體簡介:地球人都知道
下載地址:到處都是
破解目的:找出註冊碼
破解工具:ollydbg v1.09b
破解說明:該軟體採用key檔案保護方式,輸入註冊名:qqj1228,註冊碼:12345-67890-abcde-fghij(該形式是從oake前輩文章裡看到的)後確定,要求重起,然後會在安裝資料夾下生成與主檔案同名的key檔案以reg作為副檔名。重起後會讀取改檔案的內容判斷註冊與否。
於是用redfile下斷,f9執行來到最後一次中斷處,看堆疊的內容可知是讀key檔案的,於是f8跟蹤,可是我跟了半天就是沒找到比較註冊碼的地方,只知道它把key檔案裡的內容讀取後進行解密轉換成輸入的使用者名稱和註冊碼,然後在哪比較楞是沒找到。跟到後面會有一很大的迴圈反覆呼叫peekmessaga,我是新手不知道這個api是幹什麼的,就直接跳出迴圈。但是跳出之後軟體就彈出註冊視窗(已經過了試用期),這下咋辦?
後又看了oake前輩的文章,想到可以CreateWindowExA下斷,於是實行。
程式在redfile key檔案的斷點後中斷於CreateWindowExA處,如下:
00474342 . A1 48C55800 MOV
EAX, DWORD PTR DS:[58C548]
00474347 . 53
PUSH EBX
;
/lParam = NULL
00474348 . FF77 68
PUSH DWORD PTR DS:[EDI+68]
; |hInst = 00400000
0047434B . 895D FC
MOV DWORD PTR SS:[EBP-4], EBX ;
|
0047434E . 53
PUSH EBX
;
|hMenu = NULL
0047434F . FF70 1C
PUSH DWORD PTR DS:[EAX+1C]
; |hParent = 007D027C ('UltraEdit-32 - [Edit1]',class='Afx:400000:8:10011:0:4160323')
00474352 . 53
PUSH EBX
;
|Height = 0
00474353 . 53
PUSH EBX
;
|Width = 0
00474354 . 53
PUSH EBX
;
|Y = 0
00474355 . 53
PUSH EBX
;
|X = 0
00474356 . 53
PUSH EBX
;
|style = WS_OVERLAPPED
00474357 . 56
PUSH ESI
;
|WindowName = "UEAfx:200:0x0008:0:010"
00474358 . 56
PUSH ESI
;
|Class = "UEAfx:200:0x0008:0:010"
00474359 . 53
PUSH EBX
;
|Extstyle = 0
0047435A . FF15 ECF75300 CALL DWORD
PTR DS:[<&USER32.CreateWindo>; \CreateWindowExA
00474360 . A3 74C25800 MOV
DWORD PTR DS:[58C274], EAX
00474365 . 8D87 00050000 LEA
EAX, DWORD PTR DS:[EDI+500]
0047436B . 8858 10
MOV BYTE PTR DS:[EAX+10], BL
0047436E . FF35 64275800 PUSH DWORD
PTR DS:[582764]
00474374 . 6A 01
PUSH 1
00474376 . 50
PUSH EAX
00474377 . FF75 F0
PUSH DWORD PTR SS:[EBP-10]
0047437A . E8 5A2BFAFF CALL
UEDIT32.00416ED9
;F8過這個CALL後即可看到註冊碼
0047437F . 83C4 10
ADD ESP, 10
00474382 . 85C0
TEST EAX, EAX
00474384 . 0F84 89010000 JE
UEDIT32.00474513
0047438A . 391D 18C55800 CMP
DWORD PTR DS:[58C518], EBX
00474390 . 0F85 7D010000 JNZ
UEDIT32.00474513
00474396 . 68 74AE5700 PUSH
UEDIT32.0057AE74
; ASCII "Extension License"
0047439B . B9 68275800 MOV
ECX, UEDIT32.00582768 ;
ASCII "(??
004743A0 . E8 D8FB0800 CALL
UEDIT32.00503F7D
馬上抄下注冊碼。hehe不要高興的太早,若用這個註冊碼的話剛進入程式時確實註冊成功了,但是在你關閉程式時它又會把剛生成的key檔案刪了,又變成未註冊的了。這又難倒我這個菜鳥了,oake前輩的文章裡也沒提到,看來只能自力更生了。
既然它會刪檔案,那一定會呼叫deletefilea等api,我就在此下斷。
用ollydbg重新載入ultraedit,f9執行,返回程式關了它,馬上被OD斷下,向上找是否有指令可跳過它,來到:
004452B3 . A1 80275800
MOV EAX, DWORD PTR DS:[582780]
004452B8 . FF35 64275800 PUSH DWORD
PTR DS:[582764]
004452BE . 8945 E4
MOV DWORD PTR SS:[EBP-1C], EAX
004452C1 . E8 6AC40A00 CALL
UEDIT32.004F1730
004452C6 . 59
POP ECX
;
00E43E38
004452C7 . 83F8 0F
CMP EAX, 0F
;比較註冊碼的位數是否小於15,若小於15則跳走不刪檔案
004452CA . 59
POP ECX
;
00E43E38
004452CB . 0F82 F7000000 JB
UEDIT32.004453C8
004452D1 . 391D 14C55800 CMP
DWORD PTR DS:[58C514], EBX ;ebx=0為註冊標誌,與[58C514]=0比較,不等則跳走不刪檔案
004452D7 . 0F85 EB000000 JNZ
UEDIT32.004453C8
004452DD . 391D 18C55800 CMP
DWORD PTR DS:[58C518], EBX ;同上,與[58C518]=1比較,等則跳走不刪檔案。即若是不正確的註冊碼則不會刪檔案
004452E3 . 0F84 DF000000 JE
UEDIT32.004453C8
004452E9 . 0FB67D E4 MOVZX
EDI, BYTE PTR SS:[EBP-1C] ;取計算係數(d7)
004452ED . 8BC7
MOV EAX, EDI
004452EF . 6A 0D
PUSH 0D
004452F1 . 99
CDQ
004452F2 . 5B
POP EBX
;
00E43E38
004452F3 . 8B0D 64275800 MOV
ECX, DWORD PTR DS:[582764] ;取註冊碼存放地址
004452F9 . F7FB
IDIV EBX
004452FB . 0FBE41 10 MOVSX
EAX, BYTE PTR DS:[ECX+10] ;取註冊碼的第17位(即第3段最後1位)的ascii值
004452FF . 83C2 41
ADD EDX, 41
00445302 . 3BC2
CMP EAX, EDX
;取得的值與(d7%0d+41)的計算結果比較,不等則刪檔案
00445304 . 75 19
JNZ SHORT UEDIT32.0044531F
00445306 . 8BC7
MOV EAX, EDI
00445308 . 6A 18
PUSH 18
0044530A . 99
CDQ
0044530B . 5F
POP EDI
;
00E43E38
0044530C . 8A49 08
MOV CL, BYTE PTR DS:[ECX+8]
;取註冊碼的第9位(即第2段第3位)的ascii值
0044530F . F7FF
IDIV EDI
00445311 . 0FBEC1 MOVSX
EAX, CL
00445314 . 83C2 41
ADD EDX, 41
00445317 . 3BC2
CMP EAX, EDX
;取得的值與(d7%18+41)的計算結果比較,不等則刪檔案
00445319 . 0F84 A7000000 JE
UEDIT32.004453C6
0044531F > 33DB
XOR EBX, EBX
hehe原來它在關閉時還要對註冊碼進行比較,不對就幹掉你的key檔案,總結以下:
註冊名:qqj1228
註冊碼:R2R0Z-A1X7E-02N2H-K503K
這是小弟的處女破文,還望各位前輩高人批評指正。