盡力搶救win98,苦心分析我的破解入門5聞世了! (7千字)

看雪資料發表於2001-02-26

http://brucez.coolbi.com/soft/YaxinCat25.rar
大客們我上載的雅典最新縮小版!只有1.25mb,功能當然不全了!
不過可以註冊!我小弟試破解懷疑bpx 004c724e,下面有一個call
可能是關鍵!原來我離功能只差這麼一步!都是win98不好!
破解入門5
gave bye 雅信2.5!
作者:PeterChen
一定要解決問題才對,不是為了要註冊碼!
這是本人破解過程出分析的最詳細了!
破解步驟有兩種:
第一種原始方法:
1. bpx hmemcpy
2. F12 14次
3. F10 26次
第二種:
1.bpx hmemcpy
2. pmodule
3. F10 40幾次有多!
想不到原始的方法比新方法還要快!
還有一種方法等一會兒再說!
好不好容易才來到這裡?
.........................................................................
:004C71E4 8D4DEC                  lea ecx, dword ptr [ebp-14] //->d eax=ID
:004C71E7 A1C4E84F00              mov eax, dword ptr [004FE8C4]
:004C71EC 8B00                    mov eax, dword ptr [eax]
:004C71EE 8BD3                    mov edx, ebx
:004C71F0 E88BFEFFFF              call 004C7080
:004C71F5 8B45EC                  mov eax, dword ptr [ebp-14]
:004C71F8 50                      push eax //->才是真出現註冊碼的地方!
:004C71F9 8D55E4                  lea edx, dword ptr [ebp-1C]
:004C71FC 8B86D8020000            mov eax, dword ptr [esi+000002D8]
:004C7202 E89DB5F6FF              call 004327A4
:004C7207 8B45E4                  mov eax, dword ptr [ebp-1C]
:004C720A 8D55E8                  lea edx, dword ptr [ebp-18]//->d eax=假註冊碼
:004C720D E81627F4FF              call 00409928
:004C7212 8B55E8                  mov edx, dword ptr [ebp-18]
:004C7215 58                      pop eax
:004C7216 E8A9CEF3FF              call 004040C4
:004C721B 7517                    jne 004C7234
:004C721D 8D55E0                  lea edx, dword ptr [ebp-20]
:004C7220 8BC3                    mov eax, ebx
:004C7222 E8E929F4FF              call 00409C10
:004C7227 8B45E0                  mov eax, dword ptr [ebp-20]
:004C722A 8D55F8                  lea edx, dword ptr [ebp-08]
:004C722D E8F626F4FF              call 00409928
:004C7232 EB06                    jmp 004C723A

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004C721B(C)
|
:004C7234 43                      inc ebx
:004C7235 83FB0A                  cmp ebx, 0000000A
:004C7238 75AA                    jne 004C71E4 //->迴圈9次?
..................................................................
為什麼?老是才這裡來來回回了?
開始分析一下:
004C7238 75AA jne 004C71E4->:004C71E4 8D4DEC lea ecx, dword ptr [ebp-14]
看到了嗎?jne 004c71e4 見鬼去為啥這樣了? 究竟要反覆多少次了? 不繼的按F10不要怕手軟啊?
***********************************************************************************
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004C7232(U)
|
:004C723A 8B45F8                  mov eax, dword ptr [ebp-08] //-> F10第9次來到這裡!

* Possible StringData Ref from Code Obj ->"100"
                                  |
:004C723D BAD4734C00              mov edx, 004C73D4
:004C7242 E87DCEF3FF              call 004040C4
:004C7247 750F                    jne 004C7258

* Possible StringData Ref from Code Obj ->"您輸入的授權號不正確,請檢查輸入(要確保提供給"
                                        ->"本公司的序列號正確)!"
                                  |
:004C7249 B8E0734C00              mov eax, 004C73E0
:004C724E E82D2DF9FF              call 00459F80//->game over!
:004C7253 E9F6000000              jmp 004C734E

為什麼這樣的了?再分析一下!
:004C7238 75AA  jne 004C71E4 (jump)第8次還有黃色"jump"
第9次就變成 (not jump)
這裡一定有問題?
:004C71E4 8D4DEC                  lea ecx, dword ptr [ebp-14] //->d eax=ID
:004C71E7 A1C4E84F00              mov eax, dword ptr [004FE8C4]
:004C71EC 8B00                    mov eax, dword ptr [eax]
:004C71EE 8BD3                    mov edx, ebx
:004C71F0 E88BFEFFFF              call 004C7080
:004C71F5 8B45EC                  mov eax, dword ptr [ebp-14]
:004C71F8 50                      push eax //->才是真出現註冊碼的地方!
為使初學者容易明白,一次把它們說出來!
假設有一個數值123,把[ebp-14]中123送到ecx中.再把[004FE8C4]中123轉到eax中然後把[eax]
的123再轉到eax中!mov eax, dword ptr [ebp-14]同理!
123是假設不是相等的! 最後輸入123! push eax 是輸入在破解中有push跟暫存器多數是註冊碼或假碼!
D eax 出現數碼不是我的假碼是不是註冊碼? 試一試! 果然是個人版註冊成功!
註冊碼在這裡到了哪為什麼要迴圈了? 再分析一下,
:004C71E4 8D4DEC  lea ecx, dword ptr [ebp-14] //->d eax=ID
:004C71F8 50  push eax //->才是真出現註冊碼的地方!
:004C720A 8D55E8  lea edx, dword ptr [ebp-18]//->d eax=假註冊碼
現在知道了註冊原理了?
:004C71E4 8D4DEC                  lea ecx, dword ptr [ebp-14] //->d eax=ID
:004C71E7 A1C4E84F00              mov eax, dword ptr [004FE8C4]
:004C71EC 8B00                    mov eax, dword ptr [eax]
:004C71EE 8BD3                    mov edx, ebx
:004C71F0 E88BFEFFFF              call 004C7080
:004C71F5 8B45EC                  mov eax, dword ptr [ebp-14]
:004C71F8 50                      push eax //->才是真出現註冊碼的地方!
:004C720A 8D55E8  lea edx, dword ptr [ebp-18]//->d eax=假註冊碼
把id直接換算後輸出真註冊碼才與你輸入的註冊碼進行比較!
:004C71F8 50        push eax //->才是真出現註冊碼的地方!
為什麼我這麼破解定這裡才是註冊碼了?
這裡不但有eax=註冊碼 edx=假碼!現在我明白為什麼在破解過程中要看暫存器變化了?
就如:
:004C71E7 A1C4E84F00              mov eax, dword ptr [004FE8C4] ss:[  ]=?
eax=?
:004C71EC 8B00                    mov eax, dword ptr [eax]
當然我們看到上面有ss:[  ]=?在下面eax發光d一下就是"?"了ds:[ ]也同理!
為什麼要這樣看了? 因為這個看能知道兩句彙編是否有相同的暫存器值?(暫存器發光才要看)
而出現相等的值多數是id 假註冊碼或正註冊碼!
還有:004C71F8 50  push eax //->才是真出現註冊碼的地方!
Ds:[79ee48]=01cbe4ec 與 Stack Prot 32 視窗的
:0079ee48 >01cbe4ec相等! 原來這個視窗也有一點用?
我發現在真註冊碼時才有相等的值!
到上技巧對找到關鍵才有用?
:004C71F8 50  push eax (9次來出這裡註冊碼都不同)
昨晚有一位大客說在:004C7216 E8A9CEF3FF call 004040C4
在這裡下d eax就找到註冊碼! 已經我多次試驗在:004C71F8 50  push eax
"eax="的值都發生變化來到大客所說時它的是相等的,所以真正計算出註冊碼是push eax才對!
說一下最快的方法就是藉助W32dsm89反譯後找到出現錯誤窗的call! 
:004C724E E82D2DF9FF              call 00459F80向上分析!
:004C7247 750F                    jne 004C7258
:004C7238 75AA                    jne 004C71E4
為什麼找不到跳不過些call彙編了? 好分析一下兩個跳過的命!一個是向下跳,另一個是向上跳!
程式執行有須序的都是從上到下才對! 所以第一個執行是jne 004C71E4->004C71E4 8D4DEC
分析一個就知道有迴圈了? 就要著重分析最後就能kill it!這樣是不是更快了,但是要有一定的彙編
功力才行! 如何要暴力就要分析一個不些的! 這個軟體比較奇怪以前暴力不跳多數在不遠的地方而且
這個了看來要暴力比破解註冊碼才要麻煩了! 不過試暴力過但是沒有成功過? 它不要其它的破解一樣
的錯誤提示,而是能告訴你哪裡有修改過? 看來應該是本身有監察功能吧?也許不能暴力或者我暴力
功力不足!
最後發現這個軟體不是想像中的很簡單!
你再破解時eax的值ds:[]、ss:[]都變化也id、假註冊碼、code所出現的地方也變了!
就算好像遊戲一樣用動態方式!
最後整理:
我的ID:1572546
sn: 19003697
    21261621
    18577266
    15892912
    13208557
    10524203
    78398485
    51554940
    24711394
9個註冊碼?
其中有鬼?
123分別是個版、專業版、網路版
456分別是個未註冊版、專未註冊業版、網路未註冊版
789分別又是是個版、專業版、網路版
在登錄檔找到:
REGEDIT4

[HKEY_CURRENT_USER\yaxincat20cec]

[HKEY_CURRENT_USER\yaxincat20cec\addins]
"func1"=""
"func2"=""
"func3"=""
"func4"=""
"func5"=""
"func6"=""
"func7"=""
"func8"=""
"func9"=""
就是這看到有9個註冊碼!
刪除又能註冊了!
有一點不明白id是如何出現的了,要想修改一個這樣就有自己的
id了可惜不在登錄檔和*.ini中請如何改它的id了?

相關文章