用ollydbg找eBook Edit Pro v3.21的註冊碼

看雪資料發表於2003-02-12

用ollydbg找eBook Edit Pro v3.21的註冊碼

今日股市大漲,可惜俺的股票沒有漲:(    坐莊俺股票的機構,你們是不是都“死”了,沒看見人家都漲停板了嗎?你們…………唉,不說了,太傷心了:(鬱悶之際,就拿它開刀,以解我心中的怨氣(要是破解不了,我可真成了衰人,呵呵)

進入正題,用ollydbg下斷點bpx getwindowtxeta ,然後執行軟體輸入名:ol 碼:123456 ,按確定…………我靠,真給我添堵,居然沒有攔住,而且程式也不顯示任何資訊。我日!@#$%^&*……(罵了N小時,嘻嘻)唉,現在破個軟體怎麼這麼費勁啊,那些個程式設計師怎麼不編個“真正”的共享版啊,那樣不就不用“麻煩”我們了嗎?想個辦法吧,對了,執行登錄檔監測程式看看能不能發現什麼……………………YES!它把我輸入的註冊資訊都寫在了登錄檔裡,如下

[HKEY_CURRENT_USER\Software\Cybershare\Registration]
"USER"="ol"  ---------------我的名字
"KEY"="123456"--------------我輸入的假註冊碼
"URL"=""
"AFFID"=""

原來俺還有機會啊:)看來,程式是在比較完註冊碼後,才把我輸入的資訊寫到登錄檔的(你問我為什麼會知道?我有靈感嘛,看雪老大就說過,cracker需要靈感加幸運,看來我是有的,你沒有嗎?那我可給不了你了…………)既然如此,LET’GO:

下斷點bpx advapi32.RegCreateKeyExA,重新載入程式填寫註冊資訊,按確定,ok,斷下來了,由於上面的原因,所以要想找到比較註冊碼的核心,就要向上尋找突破口,先跳出向登錄檔寫資訊這段程式,然後再一步步確定核心的位置,具體如下:

00495F46  |. E8 F515F7FF    CALL <JMP.&advapi32.RegCreateKeyExA>     ; \RegCreateKeyExA←------------------首次在這裡中斷
00495F4B  |. 85C0           TEST EAX,EAX
                      ・
                      ・
                      ・
                      ・
00495FA4   . 8A45 FE        MOV AL,BYTE PTR SS:[EBP-2]
00495FA7   . 5E             POP ESI
00495FA8   . 5B             POP EBX
00495FA9   . 8BE5           MOV ESP,EBP
00495FAB   . 5D             POP EBP
00495FAC   . C3             RETN        ←------------------執行到這裡返回到呼叫處


004D223F  |. 8BCB           MOV ECX,EBX   ←------------------出來後我們在這裡,現在還沒有跳出去,所以繼續GO
004D2241  |. 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]
004D2244  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
                      ・
                      ・
                      ・
004D2286   . 5B             POP EBX
004D2287   . 59             POP ECX
004D2288   . 59             POP ECX
004D2289   . 5D             POP EBP
004D228A   . C3             RETN                      ←------------------執行到這裡返回到呼叫處

004D9DE8  /. 55             PUSH EBP                 ←------------------在這裡下斷點,然後一步步小心跟蹤
004D9DE9  |. 8BEC           MOV EBP,ESP
004D9DEB  |. 33C9           XOR ECX,ECX
004D9DED  |. 51             PUSH ECX
004D9DEE  |. 51             PUSH ECX
004D9DEF  |. 51             PUSH ECX
004D9DF0  |. 51             PUSH ECX
004D9DF1  |. 53             PUSH EBX
004D9DF2  |. 8BD8           MOV EBX,EAX
004D9DF4  |. 33C0           XOR EAX,EAX
004D9DF6  |. 55             PUSH EBP
004D9DF7  |. 68 8A9E4D00    PUSH UNPACKED.004D9E8A
004D9DFC  |. 64:FF30        PUSH DWORD PTR FS:[EAX]
004D9DFF  |. 64:8920        MOV DWORD PTR FS:[EAX],ESP
004D9E02  |. 8D55 FC        LEA EDX,DWORD PTR SS:[EBP-4]
004D9E05  |. 8B83 F8020000  MOV EAX,DWORD PTR DS:[EBX+2F8]
004D9E0B  |. E8 D8F4F9FF    CALL UNPACKED.004792E8 ←------------------進入這個call後,發現它是用函式GetKeyboardState來獲得資訊                                                      難怪我斷不下來,真狡猾………………(不敢確定,請高手指教)
004D9E10  |. 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]  ←------------------這裡出現我的名字
004D9E13  |. 8BC3           MOV EAX,EBX
004D9E15  |. E8 AAFFFFFF    CALL UNPACKED.004D9DC4
004D9E1A  |. 8D55 F8        LEA EDX,DWORD PTR SS:[EBP-8]
004D9E1D  |. 8B83 FC020000  MOV EAX,DWORD PTR DS:[EBX+2FC]
004D9E23  |. E8 C0F4F9FF    CALL UNPACKED.004792E8
004D9E28  |. 8B55 F8        MOV EDX,DWORD PTR SS:[EBP-8]  ←------------------這裡出現我輸入的假註冊碼
004D9E2B  |. 8BC3           MOV EAX,EBX
004D9E2D  |. E8 AEFEFFFF    CALL UNPACKED.004D9CE0
004D9E32  |. 8BC3           MOV EAX,EBX
004D9E34  |. E8 CBFEFFFF    CALL UNPACKED.004D9D04       ←---------------------關鍵call,切入進去
004D9E39  |. 8D55 F4        LEA EDX,DWORD PTR SS:[EBP-C]
004D9E3C  |. 8B83 14030000  MOV EAX,DWORD PTR DS:[EBX+314]
004D9E42  |. E8 A1F4F9FF    CALL UNPACKED.004792E8
004D9E47  |. 8B55 F4        MOV EDX,DWORD PTR SS:[EBP-C]
004D9E4A  |. A1 F48C5000    MOV EAX,DWORD PTR DS:[508CF4]
004D9E4F  |. E8 98A0F2FF    CALL UNPACKED.00403EEC
004D9E54  |. 8D55 F0        LEA EDX,DWORD PTR SS:[EBP-10]
004D9E57  |. 8BC3           MOV EAX,EBX
004D9E59  |. E8 226B0000    CALL UNPACKED.004E0980
004D9E5E  |. 8B55 F0        MOV EDX,DWORD PTR SS:[EBP-10]
004D9E61  |. 8BC3           MOV EAX,EBX
004D9E63  |. E8 306B0000    CALL UNPACKED.004E0998
004D9E68  |. 8BC3           MOV EAX,EBX
004D9E6A  |. E8 3D080000    CALL UNPACKED.004DA6AC←------------------在這裡呼叫寫登錄檔程式
004D9E6F  |. 33C0           XOR EAX,EAX ←------------------在004D228A出來後在這裡,現在終於跳出來了,向上看,乖乖,這麼多call啊
004D9E71  |. 5A             POP EDX                   ,看來核心很可能就在這些call當中了,關掉第一個斷點,下第二個斷點在004D9DE8
004D9E72  |. 59             POP ECX                         重新載入程式再次輸入註冊資訊,按確定,現在中斷在004D9DE8了
004D9E73  |. 59             POP ECX
004D9E74  |. 64:8910        MOV DWORD PTR FS:[EAX],EDX
004D9E77  |. 68 919E4D00    PUSH UNPACKED.004D9E91
004D9E7C  |> 8D45 F0        LEA EAX,DWORD PTR SS:[EBP-10]
004D9E7F  |. BA 04000000    MOV EDX,4
004D9E84  |. E8 33A0F2FF    CALL UNPACKED.00403EBC
004D9E89  \. C3             RETN


進入關鍵call  CALL 004D9D04後,來到:

004D9D04  /$ 55             PUSH EBP
004D9D05  |. 8BEC           MOV EBP,ESP
004D9D07  |. 6A 00          PUSH 0
004D9D09  |. 6A 00          PUSH 0
004D9D0B  |. 53             PUSH EBX
004D9D0C  |. 8BD8           MOV EBX,EAX
004D9D0E  |. 33C0           XOR EAX,EAX
004D9D10  |. 55             PUSH EBP
004D9D11  |. 68 679D4D00    PUSH UNPACKED.004D9D67
004D9D16  |. 64:FF30        PUSH DWORD PTR FS:[EAX]
004D9D19  |. 64:8920        MOV DWORD PTR FS:[EAX],ESP
004D9D1C  |. 6A 00          PUSH 0
004D9D1E  |. 8D55 FC        LEA EDX,DWORD PTR SS:[EBP-4]
004D9D21  |. 8BC3           MOV EAX,EBX
004D9D23  |. E8 A4FFFFFF    CALL UNPACKED.004D9CCC
004D9D28  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
004D9D2B  |. 50             PUSH EAX
004D9D2C  |. 8D55 F8        LEA EDX,DWORD PTR SS:[EBP-8]
004D9D2F  |. 8BC3           MOV EAX,EBX
004D9D31  |. E8 7A000000    CALL UNPACKED.004D9DB0
004D9D36  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
004D9D39  |. B9 7C9D4D00    MOV ECX,UNPACKED.004D9D7C          
004D9D3E  |. 5A             POP EDX
004D9D3F  |. E8 3C81FFFF    CALL UNPACKED.004D1E80         ←------------------從這裡進去
004D9D44  |. 8B15 98875000  MOV EDX,DWORD PTR DS:[508798]        
004D9D4A  |. 8802           MOV BYTE PTR DS:[EDX],AL
004D9D4C  |. 33C0           XOR EAX,EAX
004D9D4E  |. 5A             POP EDX
004D9D4F  |. 59             POP ECX
004D9D50  |. 59             POP ECX
004D9D51  |. 64:8910        MOV DWORD PTR FS:[EAX],EDX
004D9D54  |. 68 6E9D4D00    PUSH UNPACKED.004D9D6E
004D9D59  |> 8D45 F8        LEA EAX,DWORD PTR SS:[EBP-8]
004D9D5C  |. BA 02000000    MOV EDX,2
004D9D61  |. E8 56A1F2FF    CALL UNPACKED.00403EBC
004D9D66  \. C3             RETN


進入CALL UNPACKED.004D1E80後,我們來到:


004D1E80  /$ 55             PUSH EBP
004D1E81  |. 8BEC           MOV EBP,ESP
004D1E83  |. 81C4 FCFEFFFF  ADD ESP,-104
004D1E89  |. 53             PUSH EBX
004D1E8A  |. 56             PUSH ESI
004D1E8B  |. 57             PUSH EDI
004D1E8C  |. 33DB           XOR EBX,EBX
004D1E8E  |. 895D FC        MOV DWORD PTR SS:[EBP-4],EBX
004D1E91  |. 8BF9           MOV EDI,ECX
004D1E93  |. 8BF2           MOV ESI,EDX
004D1E95  |. 8BD8           MOV EBX,EAX
004D1E97  |. 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
004D1E9A  |. E8 2D24F3FF    CALL UNPACKED.004042CC
004D1E9F  |. 33C0           XOR EAX,EAX
004D1EA1  |. 55             PUSH EBP
004D1EA2  |. 68 FB1E4D00    PUSH UNPACKED.004D1EFB
004D1EA7  |. 64:FF30        PUSH DWORD PTR FS:[EAX]
004D1EAA  |. 64:8920        MOV DWORD PTR FS:[EAX],ESP
004D1EAD  |. 8D85 FCFEFFFF  LEA EAX,DWORD PTR SS:[EBP-104]
004D1EB3  |. 50             PUSH EAX
004D1EB4  |. 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
004D1EB7  |. 8BD7           MOV EDX,EDI
004D1EB9  |. 8BC3           MOV EAX,EBX
004D1EBB  |. E8 10FEFFFF    CALL UNPACKED.004D1CD0          ←------------------這裡是計算註冊碼的call,不過我可看不懂:)
004D1EC0  |. 8D95 FCFEFFFF  LEA EDX,DWORD PTR SS:[EBP-104]  ←------------------走到這裡可以看到計算後的註冊碼
004D1EC6  |. 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
004D1EC9  |. E8 EE21F3FF    CALL UNPACKED.004040BC
004D1ECE  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
004D1ED1  |. 8BD6           MOV EDX,ESI
004D1ED3  |. E8 5023F3FF    CALL UNPACKED.00404228           ←------------------在這裡進行比較,想暴力破解的話就進去修改
004D1ED8  |. 0F94C0         SETE AL
004D1EDB  |. 8BD8           MOV EBX,EAX
004D1EDD  |. 33C0           XOR EAX,EAX
004D1EDF  |. 5A             POP EDX
004D1EE0  |. 59             POP ECX
004D1EE1  |. 59             POP ECX
004D1EE2  |. 64:8910        MOV DWORD PTR FS:[EAX],EDX
004D1EE5  |. 68 021F4D00    PUSH UNPACKED.004D1F02
004D1EEA  |> 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
004D1EED  |. E8 A61FF3FF    CALL UNPACKED.00403E98
004D1EF2  |. 8D45 08        LEA EAX,DWORD PTR SS:[EBP+8]
004D1EF5  |. E8 9E1FF3FF    CALL UNPACKED.00403E98
004D1EFA  \. C3             RETN


進入CALL UNPACKED.00404228後,我們來到:

00404228  /$ 53             PUSH EBX
00404229  |. 56             PUSH ESI
0040422A  |. 57             PUSH EDI
0040422B  |. 89C6           MOV ESI,EAX
0040422D  |. 89D7           MOV EDI,EDX
0040422F  |. 39D0           CMP EAX,EDX               ←------------------在這裡進行比較
00404231  |. 0F84 8F000000  JE UNPACKED.004042C6      ←------------------修改這裡程式會出錯,所以要暴力破解還得再找恰當的地方      
至此破解完成,由於俺是初學者,所以不能寫出序號產生器(根本就看不懂演算法,記憶體序號產生器倒是可以的,不過俺就不寫了,有機會再補上吧)
當然,俺也是很謙虛的,希望各位前輩高手能夠給予解答:對於該軟體,如何設定斷點才能快速到達比較核心呢?

另外,本人正學習破解具有反跟蹤功能的程式,可惜俺不會脫殼,請高手給予幫助,要脫殼的程式正好是該軟體的黃金搭檔unEbookEdit,寫unEbookEdit的人據說可是個程式設計高手,他寫的其它軟體也很出名,不過都具有自校驗和反跟蹤功能,所以希望能夠得到前輩們的幫助,或者誰寫一篇unEbookEdit的破文也好教俺學學嘛,就寫到這裡吧,也不知道說明白沒有,呵呵。


                                                                                     ol
                                                                                 2003/02/12


相關文章