瘋狂登錄檔v1.0演算法分析

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

標 題:瘋狂登錄檔v1.0演算法分析

發信人:poppig

時 間: 2004-1-17 週六, 下午2:14

詳細資訊:



《瘋狂登錄檔v1.0 Build 001》,是一款能夠對登錄檔操作的軟體,更體貼人的地方
是它可以告訴你如何操作,而且還可以生成修改項安裝包,讓你可以更加方便的使
用,而且它還提供了手工的修改,不僅包括Reg檔案還包括INI檔案.當然如果你感
興趣的話可以到以下地址去下載(好像說明中沒有提到主頁哦):
http://www.softreg.com.cn/shareware_view.asp?id=/4D4FF8C0-471D-429C-AB17-116E06DC2C69/
  首先我們先脫掉它UPx的殼,然後開始行動吧!說起註冊,這個軟體有幾個後門!
所以要注意啊!(不過這是破解完了的後話了^_^)(脫殼以後程式有2006KB)
  Let Begin:
註冊名:dengkeng[DFCG]
註冊碼:1234567890abcdefghijklmno
軟體序列號是:0C342D4FA2A61B2D5C50E838EC

  點選"確定",它會告訴你需要重新啟動以便驗證是否正確,這也是許多人不想破
解重起校驗的軟體的原因.開始我用RegShot備份了一下,然後在掃描,果然註冊信
息生成在HKEY_LOCAL_MACHINESoftwareFolieRegReg下,可是這是你輸入滿足要
求才寫入登錄檔,如果不滿足要求則不寫入.剛開始輸入的註冊碼不滿25位,它就根
本不寫入登錄檔.我開始就上了當,然後用Filemon.exe進行跟蹤,發現它在執行的
時候生成了一個FolieReg.ldb檔案,而關閉程式則刪除它.開始還以為是註冊資訊.
浪費了一些時間,後來才發現它不是什麼註冊資訊.(可能是什麼許可權之類的?)
  所以只好硬著頭皮跟蹤了:


00551095   . 8A12           MOV DL,BYTE PTR DS:[EDX] ;取註冊碼的第1位
00551097   . 8850 01        MOV BYTE PTR DS:[EAX+1],DL
0055109A   . C600 01        MOV BYTE PTR DS:[EAX],1
0055109D   . 8D55 B8        LEA EDX,DWORD PTR SS:[EBP-48]
005510A0   . 8D45 B4        LEA EAX,DWORD PTR SS:[EBP-4C]
005510A3   . E8 D81EEBFF    CALL FOLIEREG.00402F80
005510A8   . 8D45 B0        LEA EAX,DWORD PTR SS:[EBP-50]
005510AB   . 8B55 F8        MOV EDX,DWORD PTR SS:[EBP-8]
005510AE   . 8A52 18        MOV DL,BYTE PTR DS:[EDX+18] ;取註冊碼的25位
005510B1   . 8850 01        MOV BYTE PTR DS:[EAX+1],DL
005510B4   . C600 01        MOV BYTE PTR DS:[EAX],1
005510B7   . 8D55 B0        LEA EDX,DWORD PTR SS:[EBP-50]
005510BA   . 8D45 B4        LEA EAX,DWORD PTR SS:[EBP-4C]
005510BD   . B1 02          MOV CL,2
005510BF   . E8 8C1EEBFF    CALL FOLIEREG.00402F50 ;兩個字元連線起來
005510C4   . 8D45 B4        LEA EAX,DWORD PTR SS:[EBP-4C]
005510C7   . 50             PUSH EAX
005510C8   . 8D45 B0        LEA EAX,DWORD PTR SS:[EBP-50]
005510CB   . 8B55 F4        MOV EDX,DWORD PTR SS:[EBP-C] ;密碼錶為"AAF03FF95FB68665"
005510CE   . 8A52 06        MOV DL,BYTE PTR DS:[EDX+6] ;取密碼錶中的第7個字元
005510D1   . 8850 01        MOV BYTE PTR DS:[EAX+1],DL
005510D4   . C600 01        MOV BYTE PTR DS:[EAX],1
005510D7   . 8D55 B0        LEA EDX,DWORD PTR SS:[EBP-50]
005510DA   . 8D45 AC        LEA EAX,DWORD PTR SS:[EBP-54]
005510DD   . E8 9E1EEBFF    CALL FOLIEREG.00402F80
005510E2   . 8D45 A8        LEA EAX,DWORD PTR SS:[EBP-58]
005510E5   . 8B55 F4        MOV EDX,DWORD PTR SS:[EBP-C]
005510E8   . 8A52 03        MOV DL,BYTE PTR DS:[EDX+3] ;去密碼錶中的第4個字元
005510EB   . 8850 01        MOV BYTE PTR DS:[EAX+1],DL
005510EE   . C600 01        MOV BYTE PTR DS:[EAX],1
005510F1   . 8D55 A8        LEA EDX,DWORD PTR SS:[EBP-58]
005510F4   . 8D45 AC        LEA EAX,DWORD PTR SS:[EBP-54]
005510F7   . B1 02          MOV CL,2
005510F9   . E8 521EEBFF    CALL FOLIEREG.00402F50 ;兩個字元連線起來
005510FE   . 8D55 AC        LEA EDX,DWORD PTR SS:[EBP-54]
00551101   . 58             POP EAX
00551102   . 33C9           XOR ECX,ECX
00551104   . 8A08           MOV CL,BYTE PTR DS:[EAX]
00551106   . 41             INC ECX
00551107   . E8 201FEBFF    CALL FOLIEREG.0040302C ;比較兩個字元是否相等
0055110C   . 0F85 8B000000  JNZ FOLIEREG.0055119D ;相等就寫入登錄檔,不等則不寫入


  我們成功了嗎?看看登錄檔中,已經寫入了我們所輸入的資訊.下面就是關鍵了,
想必重新啟動以後要RegQueryValueExA登錄檔了!用W32Dasm察看資訊,找到了如下
的資訊:
* Referenced by a CALL at Addresses:
|:00464764   , :00474F8E   , :004751EB   
|

* Reference To: advapi32.RegQueryValueExA, Ord:0000h
                                  |
:00406E7C FF255C925600            Jmp dword ptr [0056925C]
:00406E82 8BC0                    mov eaxeax
  有三處呼叫了這個資訊,我們執行程式,顯然是註冊資訊不對,因為程式不會這麼
簡單讓我們25個註冊資訊,只是比較兩個.執行完了以後,在看看登錄檔,裡面的資訊
自己刪除了,這就是我們用RegShot沒有得到資訊的原因了!因為資訊被刪除了,所以
我們得再次輸入資訊:
註冊名:dengkeng[DFCG]
註冊碼:F234567890abcdefghijklmn0
  根據上面已經得出的最後兩位資訊是F0,所以我們替換了1,25位.

1.在00474F8E下斷點,狂按F8,到達下面:
00554742  |. 8D4D F0        LEA ECX,DWORD PTR SS:[EBP-10]
00554745  |. BA 504E5500    MOV EDX,FOLIEREG.00554E50     ;  ASCII "Serial"
0055474A  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
0055474D  |. E8 AE08F2FF    CALL FOLIEREG.00475000
00554752  |. 8D55 EC        LEA EDX,DWORD PTR SS:[EBP-14]
00554755  |. 8BC3           MOV EAX,EBX
00554757  |. E8 88D2FFFF    CALL FOLIEREG.005519E4
0055475C  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
0055475F  |. E8 E801EBFF    CALL FOLIEREG.0040494C
.....
.....從密碼錶中進行取數,取足7位
.....
00554C7E  |. B1 07          MOV CL,7
00554C80  |. E8 CBE2EAFF    CALL FOLIEREG.00402F50
00554C85  |. 8D55 90        LEA EDX,DWORD PTR SS:[EBP-70]
00554C88  |. 8D45 E8        LEA EAX,DWORD PTR SS:[EBP-18] ;一共從密碼錶裡取了7位數
00554C8B  |. E8 60FCEAFF    CALL FOLIEREG.004048F0        ;以便和後面的註冊碼中的比較
00554C90  |. 8D45 BC        LEA EAX,DWORD PTR SS:[EBP-44] 
00554C93  |. 8B55 F0        MOV EDX,DWORD PTR SS:[EBP-10] ;註冊碼的地址
00554C96  |. 8A52 11        MOV DL,BYTE PTR DS:[EDX+11]   ;取其中第12位
00554C99  |. 8850 01        MOV BYTE PTR DS:[EAX+1],DL
.....
.....按照要求從註冊碼中取出7位,即後面的"hijklmn"
.....
00554D82  |. B1 07          MOV CL,7
00554D84  |. E8 C7E1EAFF    CALL FOLIEREG.00402F50
00554D89  |. 8D55 90        LEA EDX,DWORD PTR SS:[EBP-70]
00554D8C  |. 8D45 E0        LEA EAX,DWORD PTR SS:[EBP-20]
00554D8F  |. E8 5CFBEAFF    CALL FOLIEREG.004048F0
00554D94  |. 8D95 58FFFFFF  LEA EDX,DWORD PTR SS:[EBP-A8]
00554D9A  |. 8B45 E8        MOV EAX,DWORD PTR SS:[EBP-18]
00554D9D  |. E8 523EEBFF    CALL FOLIEREG.00408BF4 ;把密碼錶中取出的數字轉換成大寫
00554DA2  |. 8B85 58FFFFFF  MOV EAX,DWORD PTR SS:[EBP-A8]
00554DA8  |. 8B55 E0        MOV EDX,DWORD PTR SS:[EBP-20]
00554DAB  |. E8 E0FCEAFF    CALL FOLIEREG.00404A90 ;比較是否相等
00554DB0  |. 75 07          JNZ SHORT FOLIEREG.00554DB9

  到這裡我們已經得到了第2部分的註冊碼,替換掉原有的hijklmn.
我們再次輸入註冊資訊:
註冊名:dengkeng[DFCG]
註冊碼:F234567890abcdefg7CAC5C50
  在執行軟體看看,看看標題欄(上面寫著已經註冊了),也沒有註冊視窗了!
難道我們已經註冊了??其實不然,這是程式給我們玩的一個花樣!如果你
試著點反鍵,選擇"檢視詳細資訊",它會提示你註冊哦!你在看看標題,又變成
了未註冊的樣子了,我想大家應該聯想到了什麼吧!不錯!應該又重新讀取註冊
表的內容進行判斷,所以我們必須繼續跟蹤登錄檔!
  我們還是輸入上面的註冊資訊,用Ollydbg載入.

2.F9執行程式,bp 00474F8E下斷點,在點反鍵選擇"檢視詳細資訊",被攔截了吧.
下面你所要做的是狂按F8:
.....
.....
.....
005524BB  |. 8B55 A8        MOV EDX,DWORD PTR SS:[EBP-58]
005524BE  |. B9 882A5500    MOV ECX,FOLIEREG.00552A88 ;ASCII "sTOP cRACKINg,Please ^_^"
這是作者給我們的資訊,叫我們不要Cracking,^_^
.....
.....
.....
00552956  |. 8D45 E0        LEA EAX,DWORD PTR SS:[EBP-20]
00552959  |. E8 921FEBFF    CALL FOLIEREG.004048F0
0055295E  |. 8B45 E4        MOV EAX,DWORD PTR SS:[EBP-1C] ;真正的2~5位,是"C2B3"
00552961  |. 8B55 E0        MOV EDX,DWORD PTR SS:[EBP-20] ;註冊碼的2~5位,是"2345"
00552964  |. E8 2721EBFF    CALL FOLIEREG.00404A90 
00552969  |. 75 07          JNZ SHORT FOLIEREG.00552972
  這樣我們又可以得到註冊碼的2~5位了.我們在修改註冊資訊:
註冊名:dengkeng[DFCG]
註冊碼:FC2B367890abcdefg7CAC5C50
  現在我們可以"檢視詳細資訊"了吧!我想接下來的地方應該知道是什麼了吧!
就是剩下的兩個部分:"生成安裝包"和"生成登錄檔檔案"這兩個限制了!方法跟
上面的雷同,我就不在羅嗦了!
  下面兩個你就自己跟蹤吧!第3個資訊得到的是"50DE"替換原來的0abc,第4個資訊
得到的是將"C5AC"替換掉"defg".
  下面總結一下分析過程,首先判斷是否是註冊碼是否25個,不是則退出並不寫進登錄檔.
若是25個則透過取密碼錶,取出密碼錶的7,4位和註冊碼的1,25位比較如果相等則寫進注
冊表等待下次重起驗證,否則不寫進登錄檔.透過載入的時候讀取登錄檔的資訊參加運算
然後在從密碼錶中取出7個字元和註冊資訊的18~24位進行比較.如果成功則會提示你是所
謂"註冊"的註冊版本,否則刪除登錄檔的註冊資訊.下面是有3個功能受到限制,你執行這3
個功能則又恢復成沒有註冊的版本了!你可以透過下斷點,跟蹤得到註冊碼2~5位的資訊,
同理你也可以得到10~13位和14~17位的資訊,顯然6~9位資訊沒有使用!
  跟蹤完了以後似乎和當時跟蹤豪傑一樣的感受,只要你有足夠的耐心,就一定可以跟蹤
出正確的註冊碼,如果哪位高手有時間寫個序號產生器出來,記得Email一個給我啊!!
  所以完整的註冊資訊是:
註冊名:dengkeng[DFCG]
註冊碼:FC2B3678950DEC5AC7CAC5C50
軟體序列號是:0C342D4FA2A61B2D5C50E838EC




Made By dengkeng[DFCG]
E-mail:shellc0de@sohu.com
歡迎轉載,請保持文章的完整性

相關文章