UltraEdit32 v10找註冊碼+去暗樁

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

UltraEdit32 v10找註冊碼+去暗樁
【目    標】: UltraEdit32 v10
【工    具】:Olydbg1.1(diy版)
【任    務】:找到註冊碼並去除暗樁
【操作平臺】:WINDOWS 2000 ADV
【作    者】:loveboom[DFCG]
【相關連結】: www.UltraEdit.com
【簡要說明】:近來沒有錢買隨身碟,也沒錢上網,就在單位裡翻了一下舊光碟,也就找到了這東西。.
【詳細過程】:
安裝執行Uedit32,並輸入如下資訊:
假碼資訊:
Name:loveboom[DFCG]
SN: 77585-52013-13520-02514
完畢後,軟體告訴你,要重啟來驗證。那我們就用OD重新載入它.下斷bpx CreateFileA再執行,這樣中斷幾次後看到堆疊:
0012F970   014F61F8  |FileName = "C:Program FilesUltraEditUedit32.REG"
0012F974   80000000  |Access = GENERIC_READ
0012F978   00000000  |ShareMode = 0
0012F97C   0012FA9C  |pSecurity = 0012FA9C
0012F980   00000003  |Mode = OPEN_EXISTING
0012F984   00000080  |Attributes = NORMAL
0012F988   00000000  hTemplateFile = NULL
也就是這裡中斷了
0051B162  |.  51            PUSH ECX                                 ; |Access
0051B163  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; |這裡就是檔名:Uedit32.reg
0051B166  |.  FF15 38D45400 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; CreateFileA
0051B16C  |.  83F8 FF       CMP EAX,-1
0051B16F  |.  75 28         JNZ SHORT Uedit32.0051B199               ;  如果CreateFileA成功的話就跳
按一會F8到這裡
00448421   .  68 02010000   PUSH 102                                 ; /Arg2 = 00000102
00448426   .  50            PUSH EAX                                 ; |Arg1
00448427   .  8D4D E4       LEA ECX,DWORD PTR SS:[EBP-1C]            ; |
0044842A   .  E8 792D0D00   CALL Uedit32.0051B1A8          //這裡進去的話就知道是ReadFile了,
0044842F   .  8D4D E4       LEA ECX,DWORD PTR SS:[EBP-1C]
……
00448443   > /8A8C35 79FDFF>MOV CL,BYTE PTR SS:[EBP+ESI-287]
0044844A   . |8A8435 78FDFF>MOV AL,BYTE PTR SS:[EBP+ESI-288]
00448451   . |FEC9          DEC CL
00448453   . |FEC8          DEC AL
00448455   . |888C35 7CFEFF>MOV BYTE PTR SS:[EBP+ESI-184],CL
0044845C   . |888435 7DFEFF>MOV BYTE PTR SS:[EBP+ESI-183],AL
00448463   . |46            INC ESI
00448464   . |46            INC ESI
00448465   . |3BF7          CMP ESI,EDI
00448467   .^7E DA         JLE SHORT Uedit32.00448443    //迴圈解密資料
00448469   .  8D85 7CFEFFFF LEA EAX,DWORD PTR SS:[EBP-184]
現在再下斷bpx CreateWindowExA也就是建立視窗API函式,執行後第一次中斷:
0047A73F   .  53            PUSH EBX                                 ; |Style
0047A740   .  57            PUSH EDI                                 ; |WindowName
0047A741   .  57            PUSH EDI                                 ; |Class
0047A742   .  53            PUSH EBX                                 ; |ExtStyle
0047A743   .  FF15 0CD85400 CALL DWORD PTR DS:[<&USER32.CreateWindow> //CreateWindowExA 中斷在這裡
0047A749   .  A3 74DA5900   MOV DWORD PTR DS:[59DA74],EAX
0047A74E   .  8D86 04050000 LEA EAX,DWORD PTR DS:[ESI+504]                          ;  使用者名稱"loveboom[DFCG]"入EAX
0047A754   .  8858 10       MOV BYTE PTR DS:[EAX+10],BL
0047A757   .  FF35 D8335900 PUSH DWORD PTR DS:[5933D8]                              ;  push假碼所在的地址
0047A75D   .  6A 01         PUSH 1
0047A75F   .  50            PUSH EAX
0047A760   .  FF75 F0       PUSH DWORD PTR SS:[EBP-10]
0047A763   .  E8 50DEF9FF   CALL Uedit32.004185B8                                   ;  關鍵Call跟進
0047A768   .  83C4 10       ADD ESP,10
0047A76B   .  85C0          TEST EAX,EAX
0047A76D   .  0F84 29020000 JE Uedit32.0047A99C
……
跟進後來到這裡:
004185C2  |.  57            PUSH EDI
004185C3  |.  8B7D 08       MOV EDI,DWORD PTR SS:[EBP+8]                            ;  EDI="loveboom[DFCG]"
004185C6  |.  57            PUSH EDI                                                ;  push Name
004185C7  |.  E8 C46F0E00   CALL Uedit32.004FF590
004185CC  |.  33DB          XOR EBX,EBX
004185CE  |.  59            POP ECX
004185CF  |.  395D 14       CMP DWORD PTR SS:[EBP+14],EBX
004185D2  |.  74 0A         JE SHORT Uedit32.004185DE
004185D4  |.  C705 E4335900>MOV DWORD PTR DS:[5933E4],1
004185DE  |>  395D 10       CMP DWORD PTR SS:[EBP+10],EBX
004185E1  |.  0F84 25030000 JE Uedit32.0041890C
004185E7  |.  83F8 06       CMP EAX,6                                               ;  使用者長度和6相比
004185EA  |.  0F8C 1C030000 JL Uedit32.0041890C                                     ;  這裡一跳就over
004185F0  |.  8065 EC 00    AND BYTE PTR SS:[EBP-14],0
……
0041860F  |.  59            POP ECX                                                 ;  pop user name
00418610  |.  6A 3C         PUSH 3C
00418612  |.  5E            POP ESI
00418613  |.  3BC6          CMP EAX,ESI
00418615  |.  77 09         JA SHORT Uedit32.00418620
00418617  |.  57            PUSH EDI
00418618  |.  E8 736F0E00   CALL Uedit32.004FF590
0041861D  |.  59            POP ECX
0041861E  |.  8BF0          MOV ESI,EAX                                             ;  esi=len("loveboom[DFCG]"=0xE(14)
00418620  |>  8975 F4       MOV DWORD PTR SS:[EBP-C],ESI
00418623  |.  33C9          XOR ECX,ECX
00418625  |>  8AC1          /MOV AL,CL
00418627  |.  B2 03         |MOV DL,3
00418629  |.  F6EA          |IMUL DL
0041862B  |.  2AC2          |SUB AL,DL
0041862D  |.  88840D 70FFFF>|MOV BYTE PTR SS:[EBP+ECX-90],AL
00418634  |.  41            |INC ECX
00418635  |.  83F9 3D       |CMP ECX,3D
00418638  |.^ 72 EB         JB SHORT Uedit32.00418625
0041863A  |.  56            PUSH ESI
0041863B  |.  8D85 70FFFFFF LEA EAX,DWORD PTR SS:[EBP-90]
00418641  |.  57            PUSH EDI                                                ;  push 使用者名稱
00418642  |.  50            PUSH EAX
00418643  |.  E8 48730E00   CALL Uedit32.004FF990
00418648  |.  80A435 70FFFF>AND BYTE PTR SS:[EBP+ESI-90],0
00418650  |.  83C4 0C       ADD ESP,0C
00418653  |.  33C9          XOR ECX,ECX
00418655  |.  4E            DEC ESI
00418656  |.  6A 01         PUSH 1
00418658  |.  894D F0       MOV DWORD PTR SS:[EBP-10],ECX
0041865B  |.  5A            POP EDX
0041865C  |.  3BF2          CMP ESI,EDX
0041865E  |.  7E 3A         JLE SHORT Uedit32.0041869A
00418660  |.  C745 10 02000>MOV DWORD PTR SS:[EBP+10],2
00418667  |>  0FBEBC15 6FFF>/MOVSX EDI,BYTE PTR SS:[EBP+EDX-91]                     ;  這裡開始就是一堆演算法了,有興趣的一步一步跟吧
0041866F  |.  0FBE9C15 71FF>|MOVSX EBX,BYTE PTR SS:[EBP+EDX-8F]
……
演算法那麼長的,我沒心去研究所以直接F4到下面:
004188EA  |. /74 26         JE SHORT Uedit32.00418912
004188EC  |. |8D85 30FFFFFF LEA EAX,DWORD PTR SS:[EBP-D0]                           ;  到這裡就可以看到真碼入eax了
004188F2  |. |50            PUSH EAX                                                ;  真碼入棧
004188F3  |. |8D45 B0       LEA EAX,DWORD PTR SS:[EBP-50]                           ;  假碼入eax再同樣入棧
004188F6  |. |50            PUSH EAX                                                ;  假碼入棧
004188F7  |. |E8 E4860E00   CALL Uedit32.00500FE0                                   ;  既然真假碼都入棧,那這個Call就可以猜到它是進行比較的了
004188FC  |. |59            POP ECX
004188FD  |. |85C0          TEST EAX,EAX

這裡就看到真假碼了(堆疊):
0012F9F8   0012FA88  ASCII "70585-52010-03020-02510"
0012F9FC   0012FA08  ASCII "R0D3G-Y6A50-0106M-Y6R40"
……
上面那個比較Call進入後就看到這裡了:
00500FE0  /$  8B5424 04     MOV EDX,DWORD PTR SS:[ESP+4]                            ;  假碼入edx
00500FE4  |.  8B4C24 08     MOV ECX,DWORD PTR SS:[ESP+8]                            ;  真碼入ecx
00500FE8  |.  F7C2 03000000 TEST EDX,3
00500FEE  |.  75 3C         JNZ SHORT Uedit32.0050102C                              ;  比較夠不夠"資格"先,不夠就跳也就over了
00500FF0  |>  8B02          /MOV EAX,DWORD PTR DS:[EDX]                             ;  這一段就是一個一個比較了,
00500FF2  |.  3A01          |CMP AL,BYTE PTR DS:[ECX]
00500FF4  |.  75 2E         |JNZ SHORT Uedit32.00501024                             ;  發現不同就over了
00500FF6  |.  0AC0          |OR AL,AL
現在我們就得到了自己的正確的註冊碼了,其實跟過幾次之後發現有一個更快的方法找到真碼。方法是:在CreateFileA對uedit32.reg檔案操作的下一次CreateFileA也就是操作uedit32.cfg的時候D esp+64就可以看到真碼。註冊碼是找到了,但我們執行一次後就會發現退出時它把註冊檔案給刪除了,也就是說有暗樁。所以我們要把這個”二五仔”給揪出來。既然它要刪除檔案那麼我們就下bpx DeleteFileA來攔住它。註冊成功後再次用OD載入並執行,再下刪除檔案斷,下斷後退出uedit,這樣就可以攔下:
004487BC   .  68 80000000   PUSH 80                                                 ; /FileAttributes = NORMAL
004487C1   .  FF75 F0       PUSH DWORD PTR SS:[EBP-10]                              ; |FileName
004487C4   .  FF15 9CD45400 CALL DWORD PTR DS:[<&KERNEL32.SetFileAttributesA>]      ; SetFileAttributesA
004487CA   .  FF75 F0       PUSH DWORD PTR SS:[EBP-10]                              ; /FileName
004487CD   .  FF15 C0D45400 CALL DWORD PTR DS:[<&KERNEL32.DeleteFileA>]             ; 這裡攔住了
004487D3   .  A1 48D15900   MOV EAX,DWORD PTR DS:[59D148]
找到了就好辦了,從NOP掉4487ca和4487cd兩行。
好了,現在再試試執行沒什麼問題了。

【總    結】
註冊資訊:
Name:loveboom[DFCG]
SN:R0D3G-Y6A50-0106M-Y6R40
去暗樁:
004487CA  FF 75 F0 FF 15 C0 D4 54 00                       u? 澇T.HY
改為
004487CA  90 90 90 90 90 90 90 90 90                       HY.

獻給我親愛的DFCG,願它能夠蒸蒸日上!
Thanks:
Fly 輝仔yock、jingulong、二哥、所有曾經關心支援或幫助過我的朋友!謝謝您們!
                    by  loveboom[DFCG]                           
                    Email:bmd2chen@tom.com                          
2004-3-15

相關文章