億特代理伺服器簡易版破解手記 (15千字)
軟體:億特代理伺服器簡易版,版本1.5 build0626
工具:ollydbg,w32dasm,peditor
OK,開工。首先習慣性地看看程式有沒有加殼(現在釋出的程式還有不加殼的麼:))
上網找了一個叫peidentifier的外殼檢測程式,檢測之後報告億特
加的外殼是pecompact1.66-1.67。上網看看有沒有專門的pccompact脫殼
工具,真還找著了,叫UnPECompact 1.32。它脫殼的時間好長,可能
有幾分鐘吧,脫出來的程式我一執行就出錯。我是XP下脫的,可能是XP的
原因,於是我切換到98下重新脫殼,經過了同樣漫長時間的等待後,
脫出來的程式執行OK。
再用FI看看程式是用什麼編的,噢,是Delphi。好辦了:)。
執行殼後的程式,進入註冊對話方塊,可是找不到輸入註冊碼的地方,
估計可能是採用註冊檔案的方法來註冊。沒有輸入註冊碼,一時還沒有
合適的切入點,只好追蹤<註冊>選單項的處理函式。對於,Delphi
這比較好辦。在億特的程式檔案yitproxy.exe中搜尋字串“註冊”,
發現<註冊>選單項的ID是Submenu4Item5,那麼可知點選這個選單呼叫
的處理函式是Submenu4Item5Click。在yitproxy.exe中搜尋"Submenu4Item5Click"
,在找到的地方往前移5個位元組,那裡的4個位元組就是函式的地址:5B9E40
在這個地址上下斷點跟蹤,程式碼分析附後。作者使用了blowfish演算法生成註冊資料,
blowfish演算法部分採用了網上可下載的公開原始碼的 Delphi Encryption Compendium
( DEC Part
I)。我寫序號產生器的時候,同樣用了Delphi Encryption Compendium V3.0
,可是我加密過資料在億特程式裡解密時得到的明文與原來的不一樣,不知道
到底是作者改動了Blowfish演算法還是版本的原因。有沒有大蝦能分析一下它的blowfish
演算法:)
沒有辦法,我最後只好在脫殼後的yitproxy.exe裡附加程式碼,利用裡面的blowfish程式碼,
作出了序號產生器,呵呵。
破了簡易版,標準版和完全版是類似的,依葫蘆畫瓢,輕鬆搞定。
0167:005B9E40
PUSH EBP
0167:005B9E41 MOV EBP,ESP
分配區域性變數空間,區域性變數初始化為0,這段程式碼有些意思
0167:005B9E43
MOV ECX,0A
0167:005B9E48 PUSH BYTE
+00
0167:005B9E4A PUSH BYTE +00
0167:005B9E4C
DEC ECX
0167:005B9E4D JNZ 005B9E48
0167:005B9E4F MOV [EBP-04],EAX
0167:005B9E52
XOR EAX,EAX
0167:005B9E54 PUSH EBP
0167:005B9E55 PUSH DWORD 005BA28D
0167:005B9E5A
PUSH DWORD [FS:EAX]
0167:005B9E5D MOV
[FS:EAX],ESP
建立註冊對話方塊物件,不重要,不管它
0167:005B9E60
MOV ECX,[EBP-04]
0167:005B9E63 MOV
DL,01
0167:005B9E65 MOV EAX,[005B0A50]
0167:005B9E6A CALL 0044F654
0167:005B9E6F MOV
[EBP-2C],EAX ;註冊對話方塊物件指標
0167:005B9E72
XOR EAX,EAX
0167:005B9E74 PUSH EBP
0167:005B9E75 PUSH DWORD 005BA25E
0167:005B9E7A
PUSH DWORD [FS:EAX]
0167:005B9E7D MOV
[FS:EAX],ESP
yitproxy的作者還是蠻仁慈的,馬上就直奔主題,開始計算驗證註冊必須的機器碼了
不象有些軟體,裡面亂CALL一氣,搞得你暈頭轉向:)
作者使用了blowfish加密演算法來加密註冊資訊,使用的程式碼是網上可以得到的自由的
Delhpi Encrypt Compendium I。
作者將blowfish演算法需要的資料按一個個位元組拆開放在程式資料段裡,使用的時候
再拼裝起來。下面的這段程式碼就是拼裝資料
0167:005B9E80 LEA EAX,[EBP-08]
0167:005B9E83 MOV EDX,005BA2A0
0167:005B9E88
CALL 00403E18
0167:005B9E8D LEA EAX,[EBP-08]
0167:005B9E90 MOV EDX,005BA2AC
0167:005B9E95
CALL 00404008
0167:005B9E9A LEA EAX,[EBP-08]
0167:005B9E9D MOV EDX,005BA2B8
0167:005B9EA2
CALL 00404008
0167:005B9EA7 LEA EAX,[EBP-08]
0167:005B9EAA MOV EDX,005BA2C4
0167:005B9EAF
CALL 00404008
0167:005B9EB4 LEA EAX,[EBP-08]
0167:005B9EB7 MOV EDX,005BA2D0
0167:005B9EBC
CALL 00404008
0167:005B9EC1 LEA EAX,[EBP-08]
0167:005B9EC4 MOV EDX,005BA2DC
0167:005B9EC9
CALL 00404008
0167:005B9ECE LEA EAX,[EBP-08]
0167:005B9ED1 MOV EDX,005BA2E8
0167:005B9ED6
CALL 00404008
0167:005B9EDB LEA EAX,[EBP-08]
0167:005B9EDE MOV EDX,005BA2F4
0167:005B9EE3
CALL 00404008
0167:005B9EE8 LEA EAX,[EBP-08]
0167:005B9EEB MOV EDX,005BA300
0167:005B9EF0
CALL 00404008
0167:005B9EF5 LEA EAX,[EBP-08]
0167:005B9EF8 MOV EDX,005BA2A0
0167:005B9EFD
CALL 00404008
自此,得到一個長度是10個位元組的string,用十六進位制表示是:
15 0f 79 c7 06 36 12 1c 4d 15
記為Data1
然後開始根據所在的機器的硬體資訊計算與機器有關的機器碼。
yitproxy的硬體資訊包括了網路卡MAC地址,還有其它硬體資訊,
沒仔細跟,無所謂
0167:005B9F02 LEA
EAX,[EBP-0C]
0167:005B9F05 CALL 005B2D40
;取網路卡MAC地址
0167:005B9F0A CMP
DWORD [EBP-0C],BYTE +00 ;取到MAC地址?
0167:005B9F0E JNZ
005B9F18
0167:005B9F10 LEA EAX,[EBP-0C]
0167:005B9F13
CALL 005B2A2C ;再用另外一個演算法得到硬體資料
0167:005B9F18
LEA EAX,[EBP-38]
0167:005B9F1B CALL
005B2EFC ;兩處資料合併到一起?
0167:005B9F20 MOV
EDX,[EBP-38]
0167:005B9F23 LEA EAX,[EBP-0C]
0167:005B9F26 CALL 00404008
0167:005B9F2B CMP
DWORD [EBP-0C],BYTE +00
0167:005B9F2F JZ
005B9FAF
用BlowFish演算法加密以硬體相關資料為金鑰加密Data1
0167:005B9F31 MOV DL,01
;建立TCipher_Blowfish物件
0167:005B9F33 MOV
EAX,[004BCC4C] ;TCipher_Blowfish
0167:005B9F38
CALL 004BCF14
0167:005B9F3D MOV [EBP-30],EAX
;新建立的TCipher_Blowfish物件指標
0167:005B9F40 XOR
EAX,EAX
0167:005B9F42 PUSH EBP
0167:005B9F43
PUSH DWORD 005B9FA8
0167:005B9F48 PUSH DWORD
[FS:EAX]
0167:005B9F4B MOV [FS:EAX],ESP
0167:005B9F4E
MOV EAX,[EBP-30]
0167:005B9F51 MOV
BYTE [EAX+04],00
0167:005B9F55 XOR ECX,ECX
;nil,不附加使用其它加密演算法
0167:005B9F57 MOV
EDX,[EBP-0C] ;硬體相關資料作為演算法金鑰
0167:005B9F5A
MOV EAX,[EBP-30]
0167:005B9F5D CALL
004BD000 ;設定金鑰
加密Data1,[ebp-10]->加密後的字串
0167:005B9F62
LEA ECX,[EBP-10]
0167:005B9F65 MOV
EDX,[EBP-08] ;-->Data1
0167:005B9F68
MOV EAX,[EBP-30]
0167:005B9F6B CALL
004BD5D4 ;加密字串EncodeString方法
再用一個函式將加密後的資料變換得到機器碼
0167:005B9F70 MOV EAX,[EBP-10]
;加密後的字串
0167:005B9F73 CALL 00404000
;length,長度
0167:005B9F78 PUSH
EAX
0167:005B9F79 MOV EAX,[EBP-10]
0167:005B9F7C CALL 004041C4
;pchar()
0167:005B9F81 LEA ECX,[EBP-14]
0167:005B9F84 POP EDX
0167:005B9F85
CALL 004B860C ;變換函式
刪除Tcipher_BlowFish物件
0167:005B9F8A MOV
EAX,[EBP-30]
0167:005B9F8D MOV EDX,[EAX]
0167:005B9F8F CALL NEAR [EDX+28]
0167:005B9F92
XOR EAX,EAX
0167:005B9F94 POP
EDX
0167:005B9F95 POP ECX
0167:005B9F96
POP ECX
0167:005B9F97 MOV [FS:EAX],EDX
0167:005B9F9A PUSH DWORD 005B9FAF
0167:005B9F9F
MOV EAX,[EBP-30]
0167:005B9FA2 CALL
00403034
0167:005B9FA7 RET
0167:005B9FA8 JMP
00403794
0167:005B9FAD JMP SHORT
005B9F9F
下面對對話方塊物件操作,包括把剛剛算到的機器碼傳給裡面的控制元件
0167:005B9FAF MOV
EAX,[EBP-2C]
0167:005B9FB2 MOV EAX,[EAX+02D8]
0167:005B9FB8 MOV EDX,[EBP-14]
0167:005B9FBB
CALL 004CFD78
0167:005B9FC0 LEA EDX,[EBP-3C]
0167:005B9FC3 MOV EAX,[EBP-04]
0167:005B9FC6
MOV EAX,[EAX+0348]
0167:005B9FCC CALL
004CFCE4
0167:005B9FD1 MOV EAX,[EBP-3C]
0167:005B9FD4
XOR EDX,EDX
0167:005B9FD6 CALL 00409BB0
0167:005B9FDB TEST EAX,EAX
0167:005B9FDD JNG
005BA035
0167:005B9FDF LEA EDX,[EBP-40]
0167:005B9FE2 MOV EAX,[EBP-04]
0167:005B9FE5
MOV EAX,[EAX+0348]
0167:005B9FEB CALL
004CFCE4
0167:005B9FF0 MOV EAX,[EBP-40]
0167:005B9FF3
XOR EDX,EDX
0167:005B9FF5 CALL 00409BB0
0167:005B9FFA MOV EDX,EAX
0167:005B9FFC
MOV EAX,[EBP-2C]
0167:005B9FFF MOV
EAX,[EAX+02D0]
0167:005BA005 CALL 004ADE74
0167:005BA00A LEA EDX,[EBP-44]
0167:005BA00D
MOV EAX,[EBP-04]
0167:005BA010 MOV
EAX,[EAX+034C]
0167:005BA016 CALL 004CFCE4
0167:005BA01B MOV EAX,[EBP-44]
0167:005BA01E
XOR EDX,EDX
0167:005BA020 CALL 00409BB0
0167:005BA025 MOV EDX,EAX
0167:005BA027
MOV EAX,[EBP-2C]
0167:005BA02A MOV
EAX,[EAX+02D0]
0167:005BA030 CALL 004ADE80
在記憶體中拼裝字串
0167:005BA035 LEA
EAX,[EBP-18]
0167:005BA038 MOV EDX,005BA30C
0167:005BA03D CALL 00403E18
0167:005BA042 LEA
EAX,[EBP-18]
0167:005BA045 MOV EDX,005BA318
0167:005BA04A CALL 00404008
0167:005BA04F LEA
EAX,[EBP-18]
0167:005BA052 MOV EDX,005BA324
0167:005BA057 CALL 00404008
0167:005BA05C LEA
EAX,[EBP-18]
0167:005BA05F MOV EDX,005BA330
0167:005BA064 CALL 00404008
0167:005BA069 LEA
EAX,[EBP-18]
0167:005BA06C MOV EDX,005BA33C
0167:005BA071 CALL 00404008
0167:005BA076 LEA
EAX,[EBP-18]
0167:005BA079 MOV EDX,005BA348
0167:005BA07E CALL 00404008
0167:005BA083 LEA
EAX,[EBP-18]
0167:005BA086 MOV EDX,005BA354
0167:005BA08B CALL 00404008
0167:005BA090 LEA
EAX,[EBP-18]
0167:005BA093 MOV EDX,005BA360
0167:005BA098 CALL 00404008
0167:005BA09D LEA
EAX,[EBP-18]
0167:005BA0A0 MOV EDX,005BA36C
0167:005BA0A5 CALL 00404008
0167:005BA0AA LEA
EAX,[EBP-18]
0167:005BA0AD MOV EDX,005BA378
0167:005BA0B2 CALL 00404008
得到的字串長度10位元組,用十六進位制表示為:
7d 10 51 0b 18 b3 6f 62 d2 f4
記為Data2
再次計算機器碼,嗯?有必要嗎,不懂
註釋就不寫了,參考上面
0167:005BA0B7 LEA EAX,[EBP-08]
0167:005BA0BA
MOV EDX,005BA2A0
0167:005BA0BF CALL
00403E18
0167:005BA0C4 LEA EAX,[EBP-08]
0167:005BA0C7
MOV EDX,005BA2AC
0167:005BA0CC CALL
00404008
0167:005BA0D1 LEA EAX,[EBP-08]
0167:005BA0D4
MOV EDX,005BA2B8
0167:005BA0D9 CALL
00404008
0167:005BA0DE LEA EAX,[EBP-08]
0167:005BA0E1
MOV EDX,005BA2C4
0167:005BA0E6 CALL
00404008
0167:005BA0EB LEA EAX,[EBP-08]
0167:005BA0EE
MOV EDX,005BA2D0
0167:005BA0F3 CALL
00404008
0167:005BA0F8 LEA EAX,[EBP-08]
0167:005BA0FB
MOV EDX,005BA2DC
0167:005BA100 CALL
00404008
0167:005BA105 LEA EAX,[EBP-08]
0167:005BA108
MOV EDX,005BA2E8
0167:005BA10D CALL
00404008
0167:005BA112 LEA EAX,[EBP-08]
0167:005BA115
MOV EDX,005BA2F4
0167:005BA11A CALL
00404008
0167:005BA11F LEA EAX,[EBP-08]
0167:005BA122
MOV EDX,005BA300
0167:005BA127 CALL
00404008
0167:005BA12C LEA EAX,[EBP-08]
0167:005BA12F
MOV EDX,005BA2A0
0167:005BA134 CALL
00404008
0167:005BA139 LEA EAX,[EBP-0C]
0167:005BA13C CALL 005B2D40
0167:005BA141 CMP
DWORD [EBP-0C],BYTE +00
0167:005BA145 JNZ
005BA14F
0167:005BA147 LEA EAX,[EBP-0C]
0167:005BA14A CALL 005B2A2C
0167:005BA14F LEA
EAX,[EBP-48]
0167:005BA152 CALL 005B2EFC
0167:005BA157 MOV EDX,[EBP-48]
0167:005BA15A
LEA EAX,[EBP-0C]
0167:005BA15D CALL
00404008
0167:005BA162 CMP DWORD [EBP-0C],BYTE
+00
0167:005BA166 JZ NEAR 005BA222
0167:005BA16C
MOV DL,01
0167:005BA16E MOV
EAX,[004BCC4C]
0167:005BA173 CALL 004BCF14
0167:005BA178
MOV [EBP-34],EAX
0167:005BA17B XOR
EAX,EAX
0167:005BA17D PUSH EBP
0167:005BA17E
PUSH DWORD 005BA1E3
0167:005BA183 PUSH DWORD
[FS:EAX]
0167:005BA186 MOV [FS:EAX],ESP
0167:005BA189
MOV EAX,[EBP-34]
0167:005BA18C MOV
BYTE [EAX+04],00
0167:005BA190 XOR ECX,ECX
0167:005BA192 MOV EDX,[EBP-0C]
0167:005BA195
MOV EAX,[EBP-34]
0167:005BA198 CALL
004BD000
0167:005BA19D LEA ECX,[EBP-10]
0167:005BA1A0 MOV EDX,[EBP-08]
0167:005BA1A3
MOV EAX,[EBP-34]
0167:005BA1A6 CALL
004BD5D4
0167:005BA1AB MOV EAX,[EBP-10]
0167:005BA1AE CALL 00404000
0167:005BA1B3 PUSH
EAX
0167:005BA1B4 MOV EAX,[EBP-10]
0167:005BA1B7 CALL 004041C4
0167:005BA1BC LEA
ECX,[EBP-14]
0167:005BA1BF POP EDX
0167:005BA1C0 CALL 004B860C
0167:005BA1C5
MOV EAX,[EBP-34]
0167:005BA1C8 MOV
EDX,[EAX]
0167:005BA1CA CALL NEAR [EDX+28]
0167:005BA1CD XOR EAX,EAX
0167:005BA1CF POP
EDX
0167:005BA1D0 POP ECX
0167:005BA1D1
POP ECX
0167:005BA1D2 MOV [FS:EAX],EDX
0167:005BA1D5 PUSH DWORD 005BA1EA
0167:005BA1DA
MOV EAX,[EBP-34]
0167:005BA1DD CALL
00403034
0167:005BA1E2 RET
0167:005BA1E3 JMP
00403794
0167:005BA1E8 JMP SHORT
005BA1DA
[ebp-14]->機器碼
0167:005BA1EA
LEA EAX,[EBP-1C]
0167:005BA1ED PUSH
EAX
0167:005BA1EE LEA EAX,[EBP-20]
0167:005BA1F1
PUSH EAX
0167:005BA1F2 LEA EAX,[EBP-24]
0167:005BA1F5 PUSH EAX
0167:005BA1F6 LEA
EAX,[EBP-28]
0167:005BA1F9 PUSH EAX
取程式的全路徑和檔名
0167:005BA1FA LEA EDX,[EBP-50]
0167:005BA1FD
MOV EAX,[005C24F4]
0167:005BA202 MOV
EAX,[EAX]
0167:005BA204 CALL 00456CC0
得到yitproxy所在的路徑
0167:005BA209 MOV
EAX,[EBP-50]
0167:005BA20C LEA EDX,[EBP-4C]
0167:005BA20F CALL 00409EBC
註冊驗證,判斷使用者是否已經註冊
0167:005BA214 MOV EAX,[EBP-4C]
-->yitproxy程式所在的路徑
0167:005BA217 MOV ECX,[EBP-18]
-->data2
0167:005BA21A MOV EDX,[EBP-14]
-->機器碼
0167:005BA21D CALL 0059C7D0
-->關鍵的CALL
0167:005BA222 MOV
EAX,[EBP-28]
0167:005BA225 SUB EAX,BYTE +05
;註冊型別5,客戶、連線數均無限制
0167:005BA228 JNZ 005BA23D
修改對話方塊,顯示註冊成功資訊
0167:005BA22A MOV
EAX,[EBP-2C]
0167:005BA22D MOV EAX,[EAX+02EC]
0167:005BA233 MOV EDX,005BA384
0167:005BA238
CALL 0043739C
0167:005BA23D MOV EAX,[EBP-2C]
0167:005BA240 MOV EDX,[EAX]
0167:005BA242
CALL NEAR [EDX+D8]
0167:005BA248 XOR
EAX,EAX
0167:005BA24A POP EDX
0167:005BA24B
POP ECX
0167:005BA24C POP ECX
0167:005BA24D MOV [FS:EAX],EDX
0167:005BA250
PUSH DWORD 005BA265
0167:005BA255 MOV
EAX,[EBP-2C]
0167:005BA258 CALL 00403034
0167:005BA25D
RET
0167:005BA25E JMP 00403794
0167:005BA263 JMP SHORT 005BA255
0167:005BA265
XOR EAX,EAX
0167:005BA267 POP
EDX
0167:005BA268 POP ECX
0167:005BA269
POP ECX
0167:005BA26A MOV [FS:EAX],EDX
0167:005BA26D PUSH DWORD 005BA294
0167:005BA272
LEA EAX,[EBP-50]
0167:005BA275 MOV
EDX,07
0167:005BA27A CALL 00403DA4
0167:005BA27F
LEA EAX,[EBP-18]
0167:005BA282 MOV
EDX,05
0167:005BA287 CALL 00403DA4
0167:005BA28C
RET
0167:005BA28D JMP 00403794
0167:005BA292 JMP SHORT 005BA272
0167:005BA294
MOV ESP,EBP
0167:005BA296 POP
EBP
0167:005BA297 RET
註冊驗證的關鍵函式!!!
0167:0059C7D0
PUSH EBP
0167:0059C7D1 MOV EBP,ESP
0167:0059C7D3 ADD ESP,BYTE -48
0167:0059C7D6
PUSH EBX
0167:0059C7D7 PUSH ESI
0167:0059C7D8
PUSH EDI
0167:0059C7D9 XOR EBX,EBX
0167:0059C7DB MOV [EBP-48],EBX
0167:0059C7DE
MOV [EBP-44],EBX
0167:0059C7E1 MOV
[EBP-24],EBX
0167:0059C7E4 MOV [EBP-28],EBX
0167:0059C7E7 MOV [EBP-2C],EBX
0167:0059C7EA
MOV [EBP-30],EBX
0167:0059C7ED MOV
[EBP-34],EBX
0167:0059C7F0 MOV [EBP-0C],ECX
--> Data2
0167:0059C7F3 MOV
[EBP-08],EDX --> 機器碼
0167:0059C7F6 MOV
[EBP-04],EAX --> yitproxy路徑
0167:0059C7F9 MOV EAX,[EBP-04]
0167:0059C7FC
CALL 004041B4
0167:0059C801 MOV EAX,[EBP-08]
0167:0059C804 CALL 004041B4
0167:0059C809 MOV
EAX,[EBP-0C]
0167:0059C80C CALL 004041B4
0167:0059C811 XOR EAX,EAX
0167:0059C813
PUSH EBP
0167:0059C814 PUSH DWORD 0059CAFE
0167:0059C819 PUSH DWORD [FS:EAX]
0167:0059C81C
MOV [FS:EAX],ESP
先填寫返回資訊,表示未註冊
0167:0059C81F MOV
EAX,[EBP+14]
0167:0059C822 XOR EDX,EDX
0167:0059C824 MOV [EAX],EDX
0167:0059C826
MOV EAX,[EBP+10]
0167:0059C829 XOR
EDX,EDX
0167:0059C82B MOV [EAX],EDX
0167:0059C82D MOV EAX,[EBP+0C]
0167:0059C830
XOR EDX,EDX
0167:0059C832 MOV
[EAX],EDX
0167:0059C834 MOV EAX,[EBP+08]
0167:0059C837
XOR EDX,EDX
0167:0059C839 MOV
[EAX],EDX
看看有沒有註冊檔案?
0167:0059C83B LEA EAX,[EBP-34]
0167:0059C83E MOV ECX,0059CB18 -->
"yitproxy.exp",註冊檔名
0167:0059C843 MOV EDX,[EBP-04]
0167:0059C846 CALL 0040404C
0167:0059C84B
MOV EAX,[EBP-34]
0167:0059C84E CALL
00409D80
0167:0059C853 TEST AL,AL
;註冊檔案不存在,註冊當然不成功
0167:0059C855 JZ
NEAR 0059CAC9
用TMemoryStream來訪問註冊檔案
0167:0059C85B MOV
DL,01
0167:0059C85D MOV EAX,[004113A8] ;TMemoryStream
0167:0059C862 CALL 00403004
;建立TMemoryStream物件
0167:0059C867 MOV [EBP-10],EAX
;新建立的TMemoryStream物件指標
0167:0059C86A XOR
EDX,EDX
0167:0059C86C PUSH EBP
0167:0059C86D
PUSH DWORD 0059CAC2
0167:0059C872 PUSH DWORD
[FS:EDX]
0167:0059C875 MOV [FS:EDX],ESP
0167:0059C878 MOV EDX,[EBP-34] ;-->註冊檔案
0167:0059C87B MOV EAX,[EBP-10] ;用TMemoryStream開啟註冊檔案
LoadFromFile()
0167:0059C87E CALL 00415130
用BlowFish演算法對註冊檔案的內容解密
0167:0059C883 MOV
DL,01 ;建立TCipher_BlowFish物件
0167:0059C885
MOV EAX,[004BCC4C] ;TCipher_BlowFish
0167:0059C88A
CALL 004BCF14
0167:0059C88F MOV [EBP-3C],EAX
;新建立的TCipher_BlowFish物件指標
0167:0059C892 XOR
EAX,EAX
0167:0059C894 PUSH EBP
0167:0059C895
PUSH DWORD 0059C8E5
0167:0059C89A PUSH DWORD
[FS:EAX]
0167:0059C89D MOV [FS:EAX],ESP
0167:0059C8A0
XOR ECX,ECX
0167:0059C8A2 MOV
EDX,[EBP-0C] ;Data2是金鑰
0167:0059C8A5 MOV
EAX,[EBP-3C]
0167:0059C8A8 CALL 004BD000
0167:0059C8AD XOR EDX,EDX
0167:0059C8AF MOV
EAX,[EBP-10] ;移動流指標到檔案頭
0167:0059C8B2 CALL
00414C88
對註冊檔案解密
0167:0059C8B7 PUSH BYTE -01
0167:0059C8B9 MOV ECX,[EBP-10]
0167:0059C8BC
MOV EDX,[EBP-10] ;解密後的資料仍然放在原來的Stream中
0167:0059C8BF
MOV EAX,[EBP-3C]
0167:0059C8C2 CALL
004BD5C0 ;DecodeStream()
釋放TCipher_BlowFish物件
0167:0059C8C7
MOV EAX,[EBP-3C]
0167:0059C8CA MOV
EDX,[EAX]
0167:0059C8CC CALL NEAR [EDX+28]
0167:0059C8CF XOR EAX,EAX
0167:0059C8D1 POP
EDX
0167:0059C8D2 POP ECX
0167:0059C8D3
POP ECX
0167:0059C8D4 MOV [FS:EAX],EDX
0167:0059C8D7 PUSH DWORD 0059C8EC
0167:0059C8DC
MOV EAX,[EBP-3C]
0167:0059C8DF CALL
00403034
0167:0059C8E4 RET
0167:0059C8E5 JMP
00403794
0167:0059C8EA JMP SHORT
0059C8DC
判斷註冊檔案的長度是否合法,正常的註冊檔案長度應該>=1c00h
0167:0059C8EC MOV
EAX,[EBP-10]
0167:0059C8EF CALL 00414C94
0167:0059C8F4
MOV [EBP-1C],EAX ;註冊檔案長度
0167:0059C8F7
CMP DWORD [EBP-1C],1C00 ;>=1c00h?
0167:0059C8FE
JNL 0059C912
0167:0059C900 MOV
EAX,[EBP-10]
0167:0059C903 CALL 00403034
0167:0059C908
CALL 0040386C
0167:0059C90D JMP 0059CAC9
流指標移到檔案頭
0167:0059C912
XOR EDX,EDX
0167:0059C914 MOV
EAX,[EBP-10]
0167:0059C917 CALL 00414C88
從註冊檔案中讀出10個位元組放到一個字串中 ,[ebp-30]->該字串
0167:0059C91C LEA
EAX,[EBP-30]
0167:0059C91F CALL 00403D80
0167:0059C924 MOV EBX,0A
;10
0167:0059C929 LEA
EDX,[EBP-35]
0167:0059C92C MOV ECX,01
;讀1個位元組
0167:0059C931 MOV
EAX,[EBP-10]
0167:0059C934 MOV ESI,[EAX]
0167:0059C936 CALL NEAR [ESI+04] ;read
0167:0059C939 LEA EAX,[EBP-44]
0167:0059C93C
MOV DL,[EBP-35]
0167:0059C93F CALL
00403F28
0167:0059C944 MOV EDX,[EBP-44]
0167:0059C947
LEA EAX,[EBP-30]
0167:0059C94A CALL
00404008
0167:0059C94F DEC
EBX
0167:0059C950 JNZ 0059C929
[ebp-24] -> 機器碼
0167:0059C952 LEA
EAX,[EBP-24]
0167:0059C955 MOV EDX,[EBP-08]
0167:0059C958 CALL 00403E18
0167:0059C95D
MOV DWORD [EBP-18],01 ; 迴圈計數置初值1,註冊型別
0167:0059C964
LEA EDX,[EBP-48]
0167:0059C967 MOV
EAX,[EBP-18]
0167:0059C96A CALL 00409A90
;IntToStr
0167:0059C96F MOV
EDX,[EBP-48]
0167:0059C972 LEA EAX,[EBP-08]
0167:0059C975 MOV ECX,[EBP-24]
0167:0059C978
CALL 0040404C ;[ebp-8] -> IntToStr([ebp-18])
+ 機器碼
0167:0059C97D MOV DL,01
0167:0059C97F
MOV EAX,[004BCC4C] ;TCipher_BlowFish
0167:0059C984
CALL 004BCF14
0167:0059C989 MOV [EBP-40],EAX
0167:0059C98C XOR EAX,EAX
0167:0059C98E
PUSH EBP
0167:0059C98F PUSH DWORD 0059C9F4
0167:0059C994 PUSH DWORD [FS:EAX]
0167:0059C997
MOV [FS:EAX],ESP
0167:0059C99A MOV
EAX,[EBP-40]
0167:0059C99D MOV BYTE [EAX+04],00
0167:0059C9A1 XOR ECX,ECX
0167:0059C9A3
MOV EDX,[EBP-08] ; IntToStr([ebp-18]) + 機器碼 作為金鑰
0167:0059C9A6 MOV EAX,[EBP-40]
0167:0059C9A9
CALL 004BD000
0167:0059C9AE LEA
ECX,[EBP-28]
0167:0059C9B1 MOV EDX,[EBP-30]
;對檔案頭10個位元組加密
0167:0059C9B4 MOV EAX,[EBP-40]
0167:0059C9B7 CALL 004BD5D4
下面對加密後的10個位元組作變換,但是變換後的資料沒用到
不知道為什麼?無論如何,這方便了序號產生器的編寫:)
0167:0059C9BC MOV EAX,[EBP-28]
;加密後的資料
0167:0059C9BF CALL 00404000
;length
0167:0059C9C4 PUSH EAX
0167:0059C9C5
MOV EAX,[EBP-28] ;pchar()
0167:0059C9C8
CALL 004041C4
0167:0059C9CD LEA ECX,[EBP-2C]
;[ebp-2c]->變換後的資料,不過這些資料沒有用到
0167:0059C9D0 POP
EDX
0167:0059C9D1 CALL 004B860C
;變換函式
釋放TCipher_BlowFish物件
0167:0059C9D6 MOV
EAX,[EBP-40]
0167:0059C9D9 MOV EDX,[EAX]
0167:0059C9DB
CALL NEAR [EDX+28]
0167:0059C9DE XOR
EAX,EAX
0167:0059C9E0 POP EDX
0167:0059C9E1
POP ECX
0167:0059C9E2 POP ECX
0167:0059C9E3 MOV [FS:EAX],EDX
0167:0059C9E6
PUSH DWORD 0059C9FB
0167:0059C9EB MOV
EAX,[EBP-40]
0167:0059C9EE CALL 00403034
0167:0059C9F3
RET
0167:0059C9F4 JMP 00403794
0167:0059C9F9 JMP SHORT 0059C9EB
0167:0059C9FB
XOR EAX,EAX
0167:0059C9FD MOV
[EBP-20],EAX
0167:0059CA00 XOR EAX,EAX
0167:0059CA02
MOV [EBP-14],EAX
0167:0059CA05 MOV
EAX,[EBP-28]
0167:0059CA08 CALL 00404000
0167:0059CA0D
MOV ESI,EAX
0167:0059CA0F DEC
ESI
0167:0059CA10 TEST ESI,ESI
0167:0059CA12
JL 0059CA5E
0167:0059CA14 INC
ESI
0167:0059CA15 XOR EBX,EBX
0167:0059CA17
ADD [EBP-20],EBX
移動流指標
0167:0059CA1A MOV EDX,[EBP-1C] ;檔案長度
0167:0059CA1D SUB EDX,[EBP-20]
0167:0059CA20
DEC EDX
0167:0059CA21 MOV EAX,[EBP-10]
0167:0059CA24 CALL 00414C88
;seek
讀入一個位元組
0167:0059CA29 LEA EDX,[EBP-35]
0167:0059CA2C
MOV ECX,01 ;1個位元組
0167:0059CA31
MOV EAX,[EBP-10]
0167:0059CA34 MOV
EDI,[EAX]
0167:0059CA36 CALL NEAR [EDI+04]
;read
0167:0059CA39 MOV EAX,[EBP-28]
0167:0059CA3C CALL 004041C4
0167:0059CA41 MOV
AL,[EAX+EBX]
0167:0059CA44 CMP AL,[EBP-35]
;相等?
0167:0059CA47 JNZ 0059CA5E
;不等,註冊不成功
0167:0059CA49 INC
DWORD [EBP-14]
0167:0059CA4C MOV EAX,[EBP-28]
0167:0059CA4F CALL 00404000 ;length
0167:0059CA54 DEC EAX
0167:0059CA55
CMP EAX,[EBP-14]
0167:0059CA58 JZ
0059CA5E
0167:0059CA5A INC EBX
0167:0059CA5B DEC ESI
0167:0059CA5C JNZ
0059CA17
0167:0059CA5E MOV EAX,[EBP-28]
0167:0059CA61 CALL 00404000
0167:0059CA66 DEC
EAX
0167:0059CA67 CMP EAX,[EBP-14]
0167:0059CA6A JNZ 0059CA7C
0167:0059CA6C
CMP DWORD [EBP-14],BYTE +00
0167:0059CA70 JNG
0059CA7C
0167:0059CA72 MOV EAX,[EBP+08]
0167:0059CA75 MOV EDX,[EBP-18]
0167:0059CA78
MOV [EAX],EDX ;返回註冊型別
0167:0059CA7A
JMP SHORT 0059CA89
0167:0059CA7C INC
DWORD [EBP-18]
0167:0059CA7F CMP DWORD [EBP-18],BYTE
+06
0167:0059CA83 JNZ NEAR 0059C964
0167:0059CA89
MOV EAX,[EBP+08]
0167:0059CA8C CMP
DWORD [EAX],BYTE +00
0167:0059CA8F JNG 0059CAAC
0167:0059CA91 MOV EAX,[EBP+14]
0167:0059CA94
MOV DWORD [EAX],33
0167:0059CA9A MOV
EAX,[EBP+10]
0167:0059CA9D MOV DWORD [EAX],02
0167:0059CAA3 MOV EAX,[EBP+0C]
0167:0059CAA6
MOV DWORD [EAX],64
0167:0059CAAC XOR
EAX,EAX
0167:0059CAAE POP EDX
0167:0059CAAF
POP ECX
0167:0059CAB0 POP ECX
0167:0059CAB1 MOV [FS:EAX],EDX
0167:0059CAB4
PUSH DWORD 0059CAC9
0167:0059CAB9 MOV
EAX,[EBP-10]
0167:0059CABC CALL 00403034
0167:0059CAC1
RET
0167:0059CAC2 JMP 00403794
0167:0059CAC7 JMP SHORT 0059CAB9
0167:0059CAC9
XOR EAX,EAX
0167:0059CACB POP
EDX
0167:0059CACC POP ECX
0167:0059CACD
POP ECX
0167:0059CACE MOV [FS:EAX],EDX
0167:0059CAD1 PUSH DWORD 0059CB05
0167:0059CAD6
LEA EAX,[EBP-48]
0167:0059CAD9 MOV
EDX,02
0167:0059CADE CALL 00403DA4
0167:0059CAE3
LEA EAX,[EBP-34]
0167:0059CAE6 MOV
EDX,05
0167:0059CAEB CALL 00403DA4
0167:0059CAF0
LEA EAX,[EBP-0C]
0167:0059CAF3 MOV
EDX,03
0167:0059CAF8 CALL 00403DA4
0167:0059CAFD
RET
0167:0059CAFE JMP 00403794
0167:0059CB03 JMP SHORT 0059CAD6
0167:0059CB05
POP EDI
0167:0059CB06 POP ESI
0167:0059CB07 POP EBX
0167:0059CB08
MOV ESP,EBP
0167:0059CB0A POP
EBP
相關文章
- 瑞星個人防火牆1.1版破解手記 (3千字)2001-11-25防火牆
- 電子小說閱讀器黃金版破解手記 (5千字)2001-11-14
- Turbo Note+ 破解手記 (4千字)2001-05-13
- Trojan Remover 4.3.0破解手記 (8千字)2001-08-31REM
- 漢字通破解手記 (19千字)2000-09-06
- SolSuite v8.0破解手記 (3千字)2001-09-08UI
- ACDSEE4.0的破解手記 (1千字)2002-01-20
- ReGet Junior 2.0破解手記(一) (3千字)2002-02-23
- 轉載:“亂刀”破解手記 (1千字)2000-09-03
- SeaMoon Pic Hunter 1.2破解手記 (8千字)2015-11-15
- ReGet Junior 2.0破解手記(二) (4千字)2015-11-15
- ReGet Junior 2.0破解手記(三) (1千字)2015-11-15
- MagicWin 98 Release
1.20 破解手記 (20千字)2002-06-01
- LogoManager 1.18破解手記 (1千字)2001-02-18Go
- 加密MP3光碟破解手記 (1千字)2000-08-02加密
- 網咖管理專家9.5破解手記 (6千字)2001-01-26
- MP3 to EXE v 2.6破解手記 (8千字)2001-09-08
- Lockdown2000_7.0.0.1破解手記 (3千字)2000-05-26
- 乾涸的(Asp maker version 2.2 破解手記) (8千字)2015-11-15
- 簡易版管道模式2020-01-20模式
- 《學生體質健康標準管理系統》中、小學版破解手記
(33千字)2015-11-15
- Altomp3maker 2.11破解手記 (1千字)2001-01-29
- 鸚鵡螺網路助手 1.75 破解手記 (1千字)2001-01-30
- freeceltool 空當接龍工具破解手記 (1千字)2001-01-31
- 區域網資料庫快易通破解手記 (1千字)2001-02-02資料庫
- SMailserver2.5註冊碼的破解手記 (1千字)2001-03-01AIServer
- 中華壓縮V7.0破解手記 (4千字)2001-11-20
- Audio Compositor v4.4破解手記
(6千字)2015-11-15
- 新倚天屠龍記的光碟破解手記。 (1千字)2001-01-05
- React簡易版老虎機2019-02-22React
- 簡易版 vue實現2022-05-15Vue
- 簡易版“推箱子”遊戲2020-11-16遊戲
- Google日曆簡易版2008-06-19Go
- Git開發筆記——搭建Git簡易高效伺服器2016-06-03Git筆記伺服器
- 一個不錯的雪花屏保破解手記 (1千字)2000-12-29
- 敏思硬碟衛士 v2.2破解手記 (4千字)2001-11-20硬碟
- 股票賬戶管理軟體 1.12(破解手記) (9千字)2002-02-16
- 極簡易node伺服器2018-01-25伺服器