屏保自己做2.61版演算法分析! (7千字)
屏保自己做2.61版演算法分析:(請按照①②③的順序來看破解過程)
下載地址:http://ln.skycn.net/down/ScreenSaver_DIY261.zip
工具:TRW(雖說高手們都說用SOFTICE好,但我是菜鳥,又懶,湊合湊合吧)
開啟TRW,再右擊桌面,調出屬性對話方塊,選ScrnSaver_DIY,點設定,調出主程式,在註冊處填入註冊名和註冊碼,點“註冊”,??????????沒有提示?好,我用bpx
hmemcpy攔,攔住後,按F10往前走(走了多少路就不說了,直接來到關鍵處):
:0048FC59 8B45F8
mov eax, dword ptr [ebp-08] ①取使用者名稱
:0048FC5C E83343F7FF call 00403F94
取使用者名稱長度
:0048FC61 8BF0
mov esi, eax
ESI=使用者名稱長度
:0048FC63 85F6
test esi, esi
是否為空
:0048FC65 7E3C
jle 0048FCA3
為空跳,不為空繼續走
:0048FC67 BF01000000 mov edi,
00000001 把EDI置為1,關於這一行的作用參見③和⑤
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0048FCA1(C)
|
:0048FC6C 8B45F8
mov eax, dword ptr [ebp-08] ②取使用者名稱
:0048FC6F 33DB
xor ebx, ebx
把EBX清0
:0048FC71 8A5C38FF mov
bl, byte ptr [eax+edi-01] ③取第EDI位使用者名稱的ACDSII十進位制值給EBX(目前EDI為1,則取第1位)
:0048FC75 8BC3
mov eax, ebx
把EBX的值給EAX
:0048FC77 F7EB
imul ebx
EAX=EAX*EBX
:0048FC79 F7EB
imul ebx
再乘一次EBX,這樣,EAX等於EBX的三次方
:0048FC7B 8945EC
mov dword ptr [ebp-14], eax [ebp-14]=EAX
:0048FC7E DB45EC
fild dword ptr [ebp-14] 把[ebp-14]壓棧(其實也就是使用者名稱的三次方)
:0048FC81 D9FA
fsqrt
開平方(也就是使用者名稱某一位的ASCII值的三次方的平方根)
:0048FC83 E80C2FF7FF call 00402B94
取出這個數
:0048FC88 8BD8
mov ebx, eax
:0048FC8A 8D55E8
lea edx, dword ptr [ebp-18]
:0048FC8D 8BC3
mov eax, ebx
:0048FC8F E8588DF7FF call 004089EC
轉換成十進位制,設為CODEA
:0048FC94 8B55E8
mov edx, dword ptr [ebp-18]
:0048FC97 8D45F4
lea eax, dword ptr [ebp-0C] ④把CODEA給EAX
:0048FC9A E8FD42F7FF call 00403F9C
這個CALL的作用是:把註冊名每一位算出來的CODEA一個一個接起來,比如說,註冊名算得的CODEA分別為1000、1001、1002,則接完之後,則變成100010011002,設累加完後的這個字串為CODEB
:0048FC9F 47
inc edi
⑤EDI加1,這樣如果算沒完的話,回到④處取下一位
:0048FCA0 4E
dec esi
ESI減1(ESI為使用者名稱長度)
:0048FCA1 75C9
jne 0048FC6C
如果ESI不為0(沒算完),則跳②回處算下一位,如果ESI為0(算完了),則不跳,往下走。
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0048FC65(C)
|
:0048FCA3 8B45F4
mov eax, dword ptr [ebp-0C] ⑥取CODEB
:0048FCA6 E8E942F7FF call 00403F94
取CODEB的長度
:0048FCAB 83F80A
cmp eax, 0000000A 是不是大於十位
:0048FCAE 7E26
jle 0048FCD6
是的話直接跳到48FCD6處,開始比較註冊碼,不是的話不跳,往下走
:0048FCB0 8D45E4
lea eax, dword ptr [ebp-1C]
:0048FCB3 50
push eax
:0048FCB4 B90A000000 mov ecx,
0000000A
:0048FCB9 BA01000000 mov edx,
00000001
:0048FCBE 8B45F4
mov eax, dword ptr [ebp-0C]
:0048FCC1 E8D644F7FF call 0040419C
把CODEB擷取前十位,設為CODEC,比如前面舉的例子,CODEB為100010011002,則截完後,CODEC為1000100110
:0048FCC6 8B55E4
mov edx, dword ptr [ebp-1C]
:0048FCC9 8D45F4
lea eax, dword ptr [ebp-0C]
* Possible StringData Ref from Code Obj ->"asd"
|
:0048FCCC B970FE4800 mov ecx,
0048FE70
:0048FCD1 E80A43F7FF call 00403FE0
這個CALL的作用是:把CODEC的後面加上asd這三個字母,設為CODED,比如上面的例子,CODEC為1000100110,則過此處CODED為1000100110asd
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0048FCAE(C)
|
:0048FCD6 8D55E0
lea edx, dword ptr [ebp-20]
:0048FCD9 8B45FC
mov eax, dword ptr [ebp-04]
:0048FCDC 8B8074030000 mov eax, dword
ptr [eax+00000374]
:0048FCE2 E871FEF9FF call 0042FB58
⑦取真註冊碼和假註冊碼
:0048FCE7 8B55E0
mov edx, dword ptr [ebp-20] EDX=假碼
:0048FCEA 8B45F4
mov eax, dword ptr [ebp-0C] EAX=真碼
:0048FCED E8B243F7FF call 004040A4
比較,按F8進入
:0048FCF2 0F8528010000 jne 0048FE20
⑨對就不跳,不對則跳
:0048FCF8 8B45FC
mov eax, dword ptr [ebp-04]
:0048FCFB 8B8080030000 mov eax, dword
ptr [eax+00000380]
*************************************************************************************************
48FCED處,進入:
:004040A4 53
push ebx
:004040A5 56
push esi
:004040A6 57
push edi
:004040A7 89C6
mov esi, eax
:004040A9 89D7
mov edi, edx
:004040AB 39D0
cmp eax, edx
⑧比較假碼和真碼
:004040AD 0F848F000000 je 00404142
對就跳,不對不跳
:004040B3 85F6
test esi, esi
:004040B5 7468
je 0040411F
:004040B7 85FF
test edi, edi
:004040B9 746B
je 00404126
:004040BB 8B46FC
mov eax, dword ptr [esi-04]
:004040BE 8B57FC
mov edx, dword ptr [edi-04]
:004040C1 29D0
sub eax, edx
:004040C3 7702
ja 004040C7
:004040C5 01C2
add edx, eax
*************************************************************************************************
總結:由以上分析可知,這個軟體的演算法是:
分別取出使用者名稱的每一位的ASCII十進位制值,三次方後平方根,把每一位的使用者名稱這樣運算之後,一個一個接起來,如果不大於十位的話,直接比較;如果大於十位的話,取前十位,再在後面接上“asd”這個字串,再比較。
舉例:我的使用者名稱是alifriend的話,則a的ASCII十進位制值是97,三次方的平方根是955……依此類推,每一位都這樣算之後,串起來為95511221076103012171086101511541000,因為大於10位,取前十位為9551122107,在後面串上“asd”,所以我的註冊碼為9551122107asd。
*************************************************************************************************
外話:脫殼篇:
破這個東西其實不用脫殼的,但脫了殼抓程式碼比較方便,於是我就開始脫殼。用FI查出它是ASPACK加的殼,可是它是個SCR檔案,我先用PROCDUMP脫,結果PROCDUMP罷工。自動脫殼不行我就用BW+TRW大法,執行它,用BW找到了入口為0049AFA4,我再用TRW載入,結果TRW也罷工。我倒,明明是可執行檔案,裝什麼蒜啊?我把它的副檔名由SCR改成EXE,再用TRW載入,呵呵,OK了,g
0049AFA4,PEDUMP,OK,成功脫殼!
破解:波導終結者[BCG][CNCG]
相關文章
- 演算法分析:
<獻給初學者> 之二 (7千字)2002-06-07演算法
- 屏保設定不生效怎麼做?2020-11-05
- Konvertor 3.03的註冊碼演算法模組的分析
(7千字)2015-11-15演算法
- CDSpace Power+註冊演算法 (7千字)2001-07-27演算法
- 炒股理財演算法分析 (3千字)2001-03-31演算法
- HappyEO演算法分析
(11千字)2015-11-15APP演算法
- Sitman2.1
演算法分析 (5千字)2015-11-15演算法
- 一個不錯的雪花屏保破解手記 (1千字)2000-12-29
- rOYALaCCEZZ Trial Crackme 3.2 演算法分析 (10千字)2002-02-27演算法
- SuperCleaner演算法分析----菜鳥級
(12千字)2015-11-15演算法
- Readbook 1.42版 演算法分析。 (1千字)2015-11-15演算法
- Tray Helper V 3.6演算法分析 (26千字)2015-11-15演算法
- 炒股理財3.1 演算法分析(15千字)2015-11-15演算法
- FolderView 1.7
註冊演算法分析 (14千字)2015-11-15View演算法
- FISH精美屏保暴力破解---WD32ASM893版 (6千字)2001-02-05ASM
- 六月,允許自己做自己,別人做別人2024-06-30
- 重新貼過註冊演算法分析 (16千字)2001-10-23演算法
- PC 安全虎[Beta 1]演算法分析 (6千字)2001-12-05演算法
- eLib2.01演算法分析
(31千字)2015-11-15演算法
- 龍文輸入通演算法分析 (27千字)2015-11-15演算法
- HotkeyMaster演算法分析----菜鳥級
(4千字)2015-11-15AST演算法
- Flash Cam 1.79註冊演算法分析與序號產生器制作以及爆破方法
(7千字)2015-11-15演算法
- 找出Win 7系統隱藏的綵球屏保的方法2016-08-10
- EasyBoot(7千字)2015-11-15boot
- 簡單演算法:迷你網路電視演算法分析 (8千字)2015-11-15演算法
- 演算法分析: <獻給初學者>
之一 (4千字)2002-06-06演算法
- 演算法分析: <獻給初學者>
之四 (9千字)2002-06-06演算法
- EffeTech HTTP Sniffer 3.2註冊演算法分析 (5千字)2002-06-24HTTP演算法
- Green Tea 2.60註冊碼演算法分析 (3千字)2000-07-17演算法
- 一個水族箱屏保,破解不完全,誰幫忙看看? (2千字)2001-04-12
- 加密金剛鎖V3.00註冊演算法----(上集) (7千字)2001-11-09加密演算法
- SuperCleaner 2.31註冊碼演算法分析 - OCG (13千字)2002-04-02演算法
- Registry Crawler 4.0註冊碼演算法分析 - OCG
(20千字)2002-04-07演算法
- UltraEdit-32
10註冊碼演算法分析 (19千字)2003-05-17演算法
- 輕鬆試卷 V4.50 演算法分析 (5千字)2002-01-03演算法
- 完美解除安裝6.0註冊演算法分析 (2千字)2002-02-27演算法
- Directory Scanner v1.5 註冊演算法分析 (6千字)2015-11-15演算法
- MouseStar V3.01註冊演算法分析 (18千字)2015-11-15演算法