File Compare Utility 3.0.002
作者:xikug
Email: xikug@163.com
難度:中
目標:File Compare Utility 3.0.002
開發必備的檔案比較工具,很好用。。。
型別:分析演算法,寫出序號產生器
啊。。。這個軟體的作者居然是Walter Oney,我的偶像啊。。。對作業系統底層如此
的瞭解,功力如此的深厚。。。。省略N字。。。
這個軟體比較老了,我想不會給作者造成什麼經濟損失吧。。。(呵呵。。。剛剛看
了他的主頁,上面還有這個軟體了)
http://www.oneysoft.com/
大師不愧為大師啊,跟蹤分析完大師軟體,使我又學到了一點加密演算法知識。。。
大師的註冊碼演算法跟一般的軟體註冊碼演算法不同,一般的軟體比較註冊碼的方法是根
據某一項(如:硬體標識碼或使用者輸入Name),計算出正確的註冊碼,再與
你輸入的註冊碼比較,如果相同就註冊成功,如果不同就不給註冊。。。這種方法又
分明文或密文比較。。。
而這個軟體的註冊碼演算法是不同的。。。我也是追了幾次才追出來。。。,我第一次
遇到這種形式的註冊演算法。。。怎麼個不同法?哦。。。慢慢來,如果你有興趣的話
,我帶你去發現其中的秘密。。。
Cracker的最高境界就是分析演算法,寫出序號產生器
費話少說,拿出工具SoftIce。。。
先註冊看看。。。哦。。。彈出一個訊息框
於是,下斷點messageboxa
向上找。。。找到下面這一段。。。。
00408F8B |> 8D8D 0CFFFFFF /LEA ECX,DWORD PTR SS:[EBP-F4]
00408F91 |. E8 1D800100 |CALL FCOMPARE.00420FB3
00408F96 |. 83F8 01 |CMP EAX,1
00408F99 |. 75 2A |JNZ SHORT FCOMPARE.00408FC5
00408F9B |. 8B45 E8 |MOV EAX,DWORD PTR SS:[EBP-18]
00408F9E |. 8B4D E0 |MOV ECX,DWORD PTR SS:[EBP-20]
00408FA1 |. 50 |PUSH EAX
00408FA2 |. 8B55 E4 |MOV EDX,DWORD PTR SS:[EBP-1C]
00408FA5 |. 51 |PUSH ECX
00408FA6 |. 52 |PUSH EDX
00408FA7 |. E8 54020000 |CALL FCOMPARE.00409200 ; 關
鍵CAll
00408FAC |. 83C4 0C |ADD ESP,0C
00408FAF |. 85C0 |TEST EAX,EAX
00408FB1 |. 75 31 |JNZ SHORT FCOMPARE.00408FE4
00408FB3 |. 6A 11 |PUSH 11 ;
/Arg2 = 00000011
00408FB5 |. A1 DC5D4400 |MOV EAX,DWORD PTR DS:[445DDC] ; |
00408FBA |. 50 |PUSH EAX ;
|Arg1 => 0012F4B4 ASCII "(yC"
00408FBB |. E8 706B0000 |CALL FCOMPARE.0040FB30 ;
FCOMPARE.0040FB30 這裡會彈出註冊失敗的訊息框
00408FC0 |. 83C4 08 |ADD ESP,8
00408FC3 |.^EB C6 JMP SHORT FCOMPARE.00408F8B
看到關鍵Call了嗎了嗎?他就是計算註冊碼,的比較。。。
跟進。。。
00409200 /$ 56 PUSH ESI
00409201 |. 57 PUSH EDI
00409202 |. 33F6 XOR ESI,ESI
00409204 |. 8B7C24 14 MOV EDI,DWORD PTR SS:[ESP+14]
00409208 |. 57 PUSH EDI ;
/String
00409209 |. FF15 48A84400 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>] ;
lstrlenA
0040920F |. 83F8 08 CMP EAX,8
00409212 |. 74 05 JE SHORT FCOMPARE.00409219 ; 注
冊碼位數不等於8,掛
00409214 |. 33C0 XOR EAX,EAX
00409216 |. 5F POP EDI
00409217 |. 5E POP ESI
00409218 |. C3 RETN
00409219 |> 8A07 MOV AL,BYTE PTR DS:[EDI] ; 這一
段把註冊碼轉成數字放在ESI中
0040921B |. 47 INC EDI
0040921C |. 84C0 TEST AL,AL
0040921E |. 74 3A JE SHORT FCOMPARE.0040925A
00409220 |> C1E6 04 /SHL ESI,4
00409223 |. 3C 30 |CMP AL,30
00409225 |. 7C 0C |JL SHORT FCOMPARE.00409233
00409227 |. 3C 39 |CMP AL,39
00409229 |. 7F 08 |JG SHORT FCOMPARE.00409233
0040922B |. 0FBEC0 |MOVSX EAX,AL
0040922E |. 83E8 30 |SUB EAX,30
00409231 |. EB 1E |JMP SHORT FCOMPARE.00409251
00409233 |> 3C 61 |CMP AL,61
00409235 |. 7C 0C |JL SHORT FCOMPARE.00409243
00409237 |. 3C 66 |CMP AL,66
00409239 |. 7F 08 |JG SHORT FCOMPARE.00409243
0040923B |. 0FBEC0 |MOVSX EAX,AL
0040923E |. 83E8 57 |SUB EAX,57
00409241 |. EB 0E |JMP SHORT FCOMPARE.00409251
00409243 |> 3C 41 |CMP AL,41
00409245 |. 7C 3E |JL SHORT FCOMPARE.00409285
00409247 |. 3C 46 |CMP AL,46
00409249 |. 7F 3A |JG SHORT FCOMPARE.00409285
0040924B |. 0FBEC0 |MOVSX EAX,AL
0040924E |. 83E8 37 |SUB EAX,37
00409251 |> 03F0 |ADD ESI,EAX
00409253 |. 8A07 |MOV AL,BYTE PTR DS:[EDI]
00409255 |. 47 |INC EDI
00409256 |. 84C0 |TEST AL,AL
00409258 |.^75 C6 JNZ SHORT FCOMPARE.00409220
0040925A |> 8B4424 10 MOV EAX,DWORD PTR SS:[ESP+10]
0040925E |. 50 PUSH EAX
0040925F |. E8 3CFFFFFF CALL FCOMPARE.004091A0 ;這
裡就是計算公司的關鍵CALL
00409264 |. 83C4 04 ADD ESP,4
00409267 |. 8BF8 MOV EDI,EAX
00409269 |. 8B4424 0C MOV EAX,DWORD PTR SS:[ESP+C]
0040926D |. 50 PUSH EAX
0040926E |. E8 2DFFFFFF CALL FCOMPARE.004091A0 ;這
裡就是計算姓名的關鍵CALL
00409273 |. 83C4 04 ADD ESP,4
00409276 |. 03F8 ADD EDI,EAX
00409278 |. 03FE ADD EDI,ESI
0040927A |. 47 INC EDI
0040927B |. 83FF 01 CMP EDI,1
0040927E |. 5F POP EDI
0040927F |. 1BC0 SBB EAX,EAX
00409281 |. 5E POP ESI
00409282 |. F7D8 NEG EAX
00409284 |. C3 RETN
00409285 |> 33C0 XOR EAX,EAX
00409287 |. 5F POP EDI
00409288 |. 5E POP ESI
00409289 . C3 RETN
分析得出:
如果輸入的註冊碼不是8位,掛。。。這個不重要。。。因為我們寫序號產生器的話不需要
輸入
計算公司和姓名的關鍵CALL是一樣的
再跟進。。。,分析得出:公司+姓名+註冊號+1=0,於是得
註冊碼=-1-F(姓名)-F(公司)
004091A0 /$ 56 PUSH ESI
004091A1 |. 57 PUSH EDI
004091A2 |. 33FF XOR EDI,EDI
004091A4 |. 8B7424 0C MOV ESI,DWORD PTR SS:[ESP+C]
004091A8 |. 56 PUSH ESI ;
/String
004091A9 |. FF15 48A84400 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>] ;
lstrlenA
004091AF |. 83F8 04 CMP EAX,4
004091B2 |. 72 16 JB SHORT FCOMPARE.004091CA
004091B4 |. 8BC8 MOV ECX,EAX
004091B6 |. C1E9 02 SHR ECX,2
004091B9 |. 8D148D 0000000>LEA EDX,DWORD PTR DS:[ECX*4]
004091C0 |. 2BC2 SUB EAX,EDX
004091C2 |> 033E /ADD EDI,DWORD PTR DS:[ESI]
004091C4 |. 83C6 04 |ADD ESI,4
004091C7 |. 49 |DEC ECX
004091C8 |.^75 F8 JNZ SHORT FCOMPARE.004091C2
004091CA |> 83F8 02 CMP EAX,2
004091CD |. 72 1C JB SHORT FCOMPARE.004091EB
004091CF |. 8BD0 MOV EDX,EAX
004091D1 |. C1EA 01 SHR EDX,1
004091D4 |. 8D0C55 0000000>LEA ECX,DWORD PTR DS:[EDX*2]
004091DB |. 2BC1 SUB EAX,ECX
004091DD |> 33C9 /XOR ECX,ECX
004091DF |. 83C6 02 |ADD ESI,2
004091E2 |. 66:8B4E FE |MOV CX,WORD PTR DS:[ESI-2]
004091E6 |. 03F9 |ADD EDI,ECX
004091E8 |. 4A |DEC EDX
004091E9 |.^75 F2 JNZ SHORT FCOMPARE.004091DD
004091EB |> 83F8 01 CMP EAX,1
004091EE |. 72 0A JB SHORT FCOMPARE.004091FA
004091F0 |> 33C9 /XOR ECX,ECX
004091F2 |. 8A0E |MOV CL,BYTE PTR DS:[ESI]
004091F4 |. 46 |INC ESI
004091F5 |. 03F9 |ADD EDI,ECX
004091F7 |. 48 |DEC EAX
004091F8 |.^75 F6 JNZ SHORT FCOMPARE.004091F0
004091FA |> 8BC7 MOV EAX,EDI
004091FC |. 5F POP EDI
004091FD |. 5E POP ESI
004091FE . C3 RETN
把這上面的程式碼翻譯成Delphi程式碼為:
var
I, iLen: Integer;
t: DWORD;
begin
iLen := Length(s);
t := 0;
if iLen <= 4 then
begin
for I := iLen downto 1 do
begin
t := t shl 8 + Ord(S[I]);
end
end
else
begin
for I := 4 downto 1 do
begin
t := t shl 8 + Ord(S[I]);
end;
for I := iLen downto 5 do
begin
t := t + Ord(S[I]);
end
end;
於是我們可以根據這個寫出序號產生器了。。。
寫得如此詳細,不知道你們看懂沒有。。。
我輸入的Name: xikug, Company: weway, 得到的註冊碼是: 291D3030,點OK,哈哈。
。。註冊成功
你們也可以試試。。。
題外話:這種演算法其實是相當好的,還有改進的餘地,如果再改進一點點這個軟體就
不太好破了。。。大師作品果然精良。。
相關文章
- GoldenGate replication using a data definition file and DEFGEN utility2014-05-06Go
- dbverify Utility2012-03-05
- DirectShow Utility2013-02-18
- COM Utility2013-02-18
- Utility Filter2013-02-18Filter
- compare database2012-07-05Database
- PG: Utility queries2023-02-13
- dbms_utility2011-12-26
- DBNEWID Utility2007-11-12
- Java Date Compare2016-05-16Java
- mutex compare latch2009-06-05Mutex
- DBVERIFY utility的使用2012-05-07
- A Facial Recognition utility in a dozen of LOC2016-12-11
- ASM Metadata Dump Utility2018-05-13ASM
- DBMS_Utility學習2013-12-04
- DBMS_UTILITY.ANALYZE_SCHEMA2007-07-03
- dbms_utility.get_time2012-05-17
- 中文Beyond Compare 4啟用安裝包+Beyond Compare 4金鑰2023-12-11
- ABAP 程式比對(Compare)2011-01-14
- Beyond Compare 5 記錄2024-07-20
- Partition|Disk Utility 如何分割磁碟2022-01-05
- SMART Utility for mac (硬碟檢測)2023-11-30Mac硬碟
- DBMS_UTILITY.COMPILE_SCHEMA2008-03-28Compile
- enable run glance utility in windows CMD2010-01-04Windows
- CAS 演算法 —— Compare and Swap2019-01-19演算法
- compare用法示例•選項摘要2020-11-10
- ubuntu 命令安裝 beyond compare2017-07-06Ubuntu
- How does Guice compare to Spring ?2007-11-21GUISpring
- 硬碟檢測工具:SMART Utility for mac2024-01-28硬碟Mac
- SMART Utility for Mac:硬碟健康的守護者2024-01-29Mac硬碟
- ASMCMD - ASM command line utility .2012-07-12ASM
- Tracing the LSNRCTL Control Utility2011-12-19
- 中文Beyond Compare 4安裝包+Beyond Compare 4序號產生器金鑰2023-11-22
- Beyond Compare 4過期怎麼辦?Beyond Compare 4 Mac永 久金鑰分享2023-11-27Mac
- centos 使用 beyond compare 對比工具2017-12-07CentOS
- LintCode-Compare Strings2014-12-31
- string.Compare使用筆記2009-11-30筆記
- macOS Developer Beta Access Utility(蘋果開發者工具)2022-10-20MacDeveloper蘋果