新手請進~~~~~SN Calculator v2.2(科學計算器)破解過程~~~~~ (4千字)

看雪資料發表於2001-03-08

初學者看看

軟體名稱:SN Calculator v2.2(功能強大的科學計算器,可惜是E文的)
註冊方式:Name&Key
下載地址:http://61.134.4.193:8080/appsoftware/calculator/sncalc.exe
破解原因:我是一個新手~在論壇扮演了幾次1212~也將看雪主頁裡的教程看了幾次~跟著就是實踐啦~於是先拿我手頭上用著的一些軟體來開刀啦~~雖然有的都已經有註冊碼啦~~現在我已破了Boxman 3.0~~~Win-eXpose-Registry for Windows 95(同regmon功能一樣~~有程式防regmon的用它就行了)~~~Readbook 1.42和其它一些小軟體(我正在破Nktools手機工具箱~~請高手們提點一下)~~這些都是看著教程去破的~~但我在破解過程中都有一些心得~~很想拿出來同大家分享~~也想高手指點一二~~~如果我有時間就將破解過程寫出來吧~~~在破解時我最頭痛的就是程式用我輸入的註冊碼經過一大堆運算後再同記憶體裡的資料比較~~~對於我這種新手來說很難找到比較的地方~~就算找到了也看不到真的註冊碼~~寫序號產生器就更別說啦~~~所以我有了個蠢想法~~找一個功能強大的計算器來~~將註冊碼算一算~~於是上網就找了一大堆~~上面這個就是其一~~安裝後一用~~呵呵~~E文~~~好難明~~刪~~~~~但刪之前當然是先搞它一下啦~~~哈哈~~進去一看~~~太簡單啦~~~所以就寫一寫它咯~~~~~~~~~~~~~~~

開始:
Trw2000                      -------|
Ctrl+N                              |
bpx hmemcpy                        |
輸入Name:Sam Von & Key:67676767    |------看得懂吧????? 
Trw2000彈出                        |
bd                                  |
pmodule                      -------|

好啦我們來到SN Calculator的程式碼中啦~~~第一次除錯當然是一真按F10啦~~因為這個軟體不會有出錯資訊~~所以我沒有用F12~~~一直按下去~~~沒太多call的地方~~一路都是ret~~當程式來到00488F95的時候~~立即留意啦~~看看EAX的值等於7~~~呵呵~~~是我註冊名“Sam Von"的個數~~~繼續~~~00488FA2是我輸入的假註冊碼的個數~~下面就是比較核心啦~~看我的註解吧~~~

:00488F8D 8B45FC                  mov eax, dword ptr [ebp-04]
:00488F90 E8C7ADF7FF              call 00403D5C

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00488F25(C)
|
:00488F95 83F804                  cmp eax, 00000004  <-----註冊名要大於4
:00488F98 7C0D                    jl 00488FA7
:00488F9A 8B45F8                  mov eax, dword ptr [ebp-08]
:00488F9D E8BAADF7FF              call 00403D5C
:00488FA2 83F804                  cmp eax, 00000004  <-----註冊碼要大於4
:00488FA5 7D0C                    jge 00488FB3

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00488F98(C)
|
:00488FA7 8BC3                    mov eax, ebx
:00488FA9 E80A06FCFF              call 004495B8
:00488FAE E9BB000000              jmp 0048906E

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00488FA5(C)
|
:00488FB3 8B45FC                  mov eax, dword ptr [ebp-04]<----註冊名的首地址
:00488FB6 0FB64001                movzx eax, byte ptr [eax+01]<---註冊名的第二個字元a
:00488FBA 8B55F8                  mov edx, dword ptr [ebp-08]<----註冊碼的首地址
:00488FBD 0FB65202                movzx edx, byte ptr [edx+02]<---註冊碼的第三個字元6
:00488FC1 33C2                    xor eax, edx        <-------61 xor 36=57=>eax
:00488FC3 B90A000000              mov ecx, 0000000A
:00488FC8 99                      cdq
:00488FC9 F7F9                    idiv ecx            <-------57除以A餘數7放入edx
:00488FCB 83FA03                  cmp edx, 00000003
:00488FCE 0F859A000000            jne 0048906E        <-------不等於3就跳
:00488FD4 68E9030000              push 000003E9

* Reference To: kernel32.Sleep, Ord:0000h
                                  |
:00488FD9 E862D9F7FF              Call 00406940
:00488FDE 8B45FC                  mov eax, dword ptr [ebp-04]
:00488FE1 0FB64002                movzx eax, byte ptr [eax+02]<---註冊名的第三個字元m
:00488FE5 8B55F8                  mov edx, dword ptr [ebp-08]
:00488FE8 0FB65201                movzx edx, byte ptr [edx+01]<---註冊碼的第二個字元7
:00488FEC 33C2                    xor eax, edx        <-------6D xor 37=5A=>eax
:00488FEE B90A000000              mov ecx, 0000000A
:00488FF3 99                      cdq
:00488FF4 F7F9                    idiv ecx            <-------5A除以A餘數0放入edx
:00488FF6 83FA05                  cmp edx, 00000005
:00488FF9 7573                    jne 0048906E        <-------不等於5就跳
:00488FFB 68E7030000              push 000003E7

好啦~~首先我將edx的值在比較前改為3和5~~~~程式執行下去就Say Ok啦~~~~~就是說程式只將我的註冊名和註冊碼的第二三位運算比較~~~但兩者都要4位以上~~~~那太簡單啦嘛~~~還好程式的運算過程不復雜~~序號產生器都不用寫啦~~就用它本身來算一算吧~~~計算器軟體~~~~真搞笑~~~程式要求兩個數相xor後的值除以A的餘數為3和5~~~上面的是57和5A~~~我就改成53和55吧~~~分別和61和6D相xor得到8和2~~~就是說註冊碼的第二三位是82就行啦~~其它的位就補上任意數吧~~~呵呵~~~以上是我的蠢辦法~~我是新手嘛~~~~~請高手指正啦~~~~多謝~~~~另外註冊成功後要退出程式再進入~~不然在About裡仍然是沒註冊的~~~

我寫得不好~~~~~~大家多多包涵~~~~~~~~

相關文章