網路精確時鐘 2.25註冊演算法分析
[破解過程]
詳細過程:
1、用FI2.5查殼,無殼,爽!用w32dasm反彙編,查有用資訊:"註冊成功,感謝使用!",雙擊我們來到
這裡:
00405288 51
push ecx
:00405289 E8C6130000 call
00406654
:0040528E 83C404 add
esp, 00000004
:00405291 8D95D4FBFFFF lea edx, dword
ptr [ebp+FFFFFBD4]
:00405297 52
push edx
:00405298 B970B84100 mov ecx,
0041B870
:0040529D E88BDFFFFF call
0040322D--------在此CALL設斷!
:004052A2 85C0
test eax, eax----------這是經典比較!
:004052A4 7458
je 004052FE
:004052A6 8D85D4FBFFFF lea eax, dword
ptr [ebp+FFFFFBD4]
:004052AC 50
push eax
:004052AD B970B84100 mov ecx,
0041B870
:004052B2 E8DCE2FFFF call
00403593
:004052B7 85C0
test eax, eax
:004052B9 7418
je 004052D3
:004052BB 6A00
push 00000000
:004052BD 6860DB4100 push
0041DB60
* Possible StringData Ref from Data Obj ->"註冊成功,感謝使用!"
|
:004052C2 6898664100 push
00416698-------停在此!往上找!第一個跳轉!
2、用0llydbg動態除錯,設斷在::0040529D E88BDFFFFF call 0040322D,以下是程式程式碼:
00405289 |. E8 C6130000 CALL STANDARD.00406654
; \STANDARD.00406654
0040528E |. 83C4 04 ADD ESP,
4
00405291 |. 8D95 D4FBFFFF LEA EDX, [LOCAL.267]
00405297 |. 52 PUSH
EDX ;
/Arg1 = 0068EBE4 ASCII "1234567
89"
00405298 |. B9 70B84100 MOV ECX, STANDARD.0041B870
; |
0040529D |. E8 8BDFFFFF CALL STANDARD.0040322D
; \STANDARD.0040322D--------在此CALL設斷!按F7
追進此CALL!
004052A2 |. 85C0 TEST
EAX, EAX---------------------------這是經典比較句式,所
以上面的CALL我們要追進!
004052A4 |. 74 58 JE
SHORT STANDARD.004052FE
004052A6 |. 8D85 D4FBFFFF LEA EAX, [LOCAL.267]
004052AC |. 50 PUSH
EAX
; /Arg1 = 0068EBE4 ASCI
I "123456789"
004052AD |. B9 70B84100 MOV ECX, STANDARD.0041B870
; |
004052B2 |. E8 DCE2FFFF CALL STANDARD.00403593
; \STANDARD.00403593
004052B7 |. 85C0 TEST
EAX, EAX
004052B9 |. 74 18 JE
SHORT STANDARD.004052D3
004052BB |. 6A 00 PUSH 0
; /style = MB_OK|MB_APP
LMODAL
004052BD |. 68 60DB4100 PUSH STANDARD.0041DB60
; |Title = "網路\xAB\
xB7時鐘"60
004052C2 |. 68 98664100 PUSH STANDARD.00416698
; |Text = "\xD7\xA2\xB2岢
曬\xA6\xAC\xB8行\xBB使用\xA1"
004052C7 |. 8B4D 08 MOV ECX,
[ARG.1]
; |
004052CA |. 51 PUSH
ECX
; |hOwner = 0041B870
004052CB |. FF15 80424100 CALL DWORD PTR DS:[<&USER32.MessageBo>;
\MessageBoxA
004052D1 |. EB 16 JMP
SHORT STANDARD.
以下是這個CALL的程式碼,追進後:
0040322D /$ 55 PUSH
EBP----停在此!
0040322E |. 8BEC MOV
EBP, ESP
00403230 |. 81EC DC000000 SUB ESP, 0DC
00403236 |. 898D 24FFFFFF MOV [LOCAL.55],
ECX ; STANDARD.0041B870
0040323C |. 6A 29 PUSH
29
; /Arg2 = 00000029
0040323E |. 8D85 28FFFFFF LEA EAX, [LOCAL.54]
; |
00403244 |. 50 PUSH
EAX
; |Arg1 = 0068EBE4 ASCII "123456789"
00403245 |. 8B8D 24FFFFFF MOV ECX, [LOCAL.55]
; |
0040324B |. E8 6EFDFFFF CALL STANDARD.00402FBE
; \STANDARD.00402FBE
00403250 |. 85C0 TEST
EAX, EAX
00403252 |. 75 04 JNZ
SHORT STANDARD.00403258
00403254 |. 33C0 XOR
EAX, EAX
00403256 |. EB 43 JMP
SHORT STANDARD.0040329B
00403258 |> 8D8D 54FFFFFF LEA ECX, [LOCAL.43]
0040325E |. 51 PUSH
ECX
; /Arg2 = 0041B870 ASC
II "`CA"
0040325F |. 8D95 28FFFFFF LEA EDX, [LOCAL.54]
; |
00403265 |. 52 PUSH
EDX
; |Arg1 = 0068EBE4 ASCI
I "123456789"
00403266 |. 8B8D 24FFFFFF MOV ECX, [LOCAL.55]
; |
0040326C |. E8 CA010000 CALL STANDARD.0040343B
; \STANDARD.0040343B---演算法CALL1,按F7追進此CALL!
00403271 |. 8B45 08 MOV
EAX, [ARG.1]
00403274 |. 50 PUSH
EAX
; /Arg1 = 0068EBE4 ASC
II "123456789"
00403275 |. E8 DA330000 CALL STANDARD.00406654
; \STANDARD.00406654
0040327A |. 83C4 04 ADD
ESP, 4
0040327D |. 8D8D 54FFFFFF LEA ECX, [LOCAL.43]
00403283 |. 51 PUSH
ECX
; /String2 = "`CA"
00403284 |. 8B55 08 MOV
EDX, [ARG.1]
; |
00403287 |. 52 PUSH
EDX
; |String1 = "12345678
9"
00403288 |. FF15 B8404100 CALL DWORD PTR DS:[<&KERNEL32.lstrcmp>;
\lstrcmpA
0040328E |. 85C0 TEST
EAX, EAX
00403290 |. 75 07 JNZ
SHORT STANDARD.00403299
以下是演算法CALL1的程式碼,追進後:
0040343B /$ 55 PUSH
EBP--追進後,停在此!
0040343C |. 8BEC MOV
EBP, ESP
0040343E |. 81EC E8000000 SUB ESP, 0E8
00403444 |. 56 PUSH
ESI
00403445 |. 57 PUSH
EDI
00403446 |. 898D 18FFFFFF MOV [LOCAL.58],
ECX
0040344C |. A1 94624100 MOV EAX, DWORD
PTR DS:[416294]
00403451 |. 8985 1CFFFFFF MOV [LOCAL.57],
EAX
00403457 |. 8B0D 98624100 MOV ECX, DWORD PTR
DS:[416298]
0040345D |. 898D 20FFFFFF MOV [LOCAL.56],
ECX
00403463 |. 8A15 9C624100 MOV DL, BYTE PTR
DS:[41629C]
00403469 |. 8895 24FFFFFF MOV BYTE PTR SS:[EBP-DC],
DL
0040346F |. 8B85 1CFFFFFF MOV EAX, [LOCAL.57]
00403475 |. 8985 40FFFFFF MOV [LOCAL.48],
EAX
0040347B |. 8B8D 20FFFFFF MOV ECX, [LOCAL.56]
00403481 |. 898D 44FFFFFF MOV [LOCAL.47],
ECX
00403487 |. C745 FC 000000>MOV [LOCAL.1], 0
0040348E |. 837D 08 00 CMP [ARG.1],
0
00403492 |. 75 07 JNZ
SHORT STANDARD.0040349B
00403494 |. 33C0 XOR
EAX, EAX
00403496 |. E9 F0000000 JMP STANDARD.0040358B
0040349B |> 68 AB000000 PUSH 0AB
004034A0 |. 6A 00 PUSH
0
004034A2 |. 8D95 50FFFFFF LEA EDX, [LOCAL.44]
004034A8 |. 52 PUSH
EDX
004034A9 |. E8 22730000 CALL STANDARD.0040A7D0
004034AE |. 83C4 0C ADD
ESP, 0C
004034B1 |. C785 3CFFFFFF >MOV [LOCAL.49], 0
004034BB |. EB 0F JMP
SHORT STANDARD.004034CC
004034BD |> 8B85 3CFFFFFF /MOV EAX, [LOCAL.49]------這裡開始計算註冊碼!
004034C3 |. 83C0 04 |ADD
EAX, 4--------------- EAX=EAX+4,這說明每次取四位機器碼進行計算!
004034C6 |. 8985 3CFFFFFF |MOV [LOCAL.49],
EAX
004034CC |> 83BD 3CFFFFFF > CMP [LOCAL.49],
28-------與40比較,28的十進位制值就是40,因
為機器碼是40位!
004034D3 |. 0F8D 82000000 |JGE STANDARD.0040355B----大於等於就轉移!當然沒取完就得繼續
!
004034D9 |. 8B4D 08 |MOV
ECX, [ARG.1]---------把機器碼送ECX!我的機器碼是:"{2181
533-91212-94319-592381135-11335993}"
004034DC |. 038D 3CFFFFFF |ADD ECX, [LOCAL.49]
004034E2 |. 8B11 |MOV
EDX, DWORD PTR DS:[ECX]----取機器碼計算!並經過轉換!
004034E4 |. 8955 FC |MOV
[LOCAL.1], EDX--------取機器碼的第一組前四位:{218,經
過轉換為:3831327B!轉換是這樣的:取各位的ASCII碼,{為7B,2為32,1為31,8為38,然後從最後一位開始
,把它們組合起來就是:3831327B!
004034E7 |. 8B45 FC |MOV
EAX, [LOCAL.1]--------把機器碼送EAX!EAX為3831327B
004034EA |. 33C9 |XOR
ECX, ECX--------------ECX清零!
004034EC |. 8B95 44FFFFFF |MOV EDX, [LOCAL.47]-------把常數:6B636F6C送EDX!這個常數是
參與計算註冊碼的!
004034F2 |. 52 |PUSH
EDX-------------------EDX入棧!
004034F3 |. 8B95 40FFFFFF |MOV EDX, [LOCAL.48]-------把常數:6374656E送EDX!這個常數也
是參與計算註冊碼的!
004034F9 |. 52 |PUSH
EDX-------------------常數:6374656E也入棧!
004034FA |. 51 |PUSH
ECX
004034FB |. 50 |PUSH
EAX
004034FC |. E8 8F770000 |CALL STANDARD.0040AC90----演算法CALL2,要追進!
00403501 |. 81CA 00000040 |OR EDX, 40000000--------EDX或40000000=0E0A33F7
OR 4000000
0=4E0A33F7,這一步我們設為演算法3
00403507 |. 8985 48FFFFFF |MOV [LOCAL.46],
EAX------把EAX送入[LOCAL.46]=FECA37DA
0040350D |. 8995 4CFFFFFF |MOV [LOCAL.45],
EDX------把EDX送入[LOCAL.45]=4E0A33F7
00403513 |. 8D85 28FFFFFF |LEA EAX, [LOCAL.54]
00403519 |. 50 |PUSH
EAX
; /Arg3 = 0068EA34
0040351A |. 8B8D 4CFFFFFF |MOV ECX, [LOCAL.45]
; |
00403520 |. 51 |PUSH
ECX
; |Arg2 = 00000000
00403521 |. 8B95 48FFFFFF |MOV EDX, [LOCAL.46]
; |
00403527 |. 52 |PUSH
EDX
; |Arg1 = 00000000
00403528 |. E8 74FDFFFF |CALL STANDARD.004032A1
; \STANDARD.004032A1--
-此CALL把[LOCAL.45]和[LOCAL.46]的值連線起來組成第一組註冊碼,注意字母大寫轉換成小寫:4e0a33f
7feca37da
0040352D |. 83C4 0C |ADD
ESP, 0C
00403530 |. 8D85 28FFFFFF |LEA EAX, [LOCAL.54]
00403536 |. 50 |PUSH
EAX
; /StringToAdd = ""
00403537 |. 8D8D 50FFFFFF |LEA ECX, [LOCAL.44]
; |
0040353D |. 51 |PUSH
ECX
; |ConcatString = NULL
0040353E |. FF15 9C404100 |CALL DWORD PTR DS:[<&KERNEL32.lstrca>;
\lstrcatA
00403544 |. 68 A0624100 |PUSH STANDARD.004162A0
; /StringToAdd = "
"
00403549 |. 8D95 50FFFFFF |LEA EDX, [LOCAL.44]
; |
0040354F |. 52 |PUSH
EDX
; |ConcatString = NULL
00403550 |. FF15 9C404100 |CALL DWORD PTR DS:[<&KERNEL32.lstrca>;
\lstrcatA
00403556 |.^ E9 62FFFFFF \JMP STANDARD.004034BD------跳回繼續!直至機器碼取完為止!
0040355B |> C785 3CFFFFFF >MOV [LOCAL.49],
0A9
00403565 |. 8B85 3CFFFFFF MOV EAX, [LOCAL.49]
0040356B |. C68405 50FFFFF>MOV BYTE PTR SS:[EBP+EAX-B0],
0
00403573 |. B9 2A000000 MOV ECX, 2A
00403578 |. 8DB5 50FFFFFF LEA ESI, [LOCAL.44]
0040357E |. 8B7D 0C MOV
EDI, [ARG.2]
00403581 |. F3:A5 REP
MOVS DWORD PTR ES:[EDI], DWORD P>
00403583 |. 66:A5 MOVS
WORD PTR ES:[EDI], WORD PTR DS:[>
00403585 |. A4 MOVS
BYTE PTR ES:[EDI], BYTE PTR DS:[>
00403586 |. B8 01000000 MOV EAX, 1
0040358B |> 5F POP
EDI
; 0068F018
0040358C |. 5E POP
ESI
; 0068F018
0040358D |. 8BE5 MOV
ESP, EBP
0040358F |. 5D POP
EBP
; 0068F018
00403590 \. C2 0800 RETN 8
以下是演算法CALL2的程式碼,追進後:
0040AC90 /$ 8B4424 08 MOV EAX, DWORD
PTR SS:[ESP+8]---- EAX清零!
0040AC94 |. 8B4C24 10 MOV ECX, DWORD
PTR SS:[ESP+10]---把常數6B636FC送入ECX
0040AC98 |. 0BC8 OR
ECX, EAX----ECX或EAX,ECX為6B636FC!
0040AC9A |. 8B4C24 0C MOV ECX, DWORD
PTR SS:[ESP+C]----把常數6374656E移入ECX
0040AC9E |. 75 09 JNZ
SHORT STANDARD.0040ACA9------不等則跳!
0040ACA0 |. 8B4424 04 MOV EAX, DWORD
PTR SS:[ESP+4] ; STANDARD.00403501
0040ACA4 |. F7E1 MUL
ECX
0040ACA6 |. C2 1000 RETN 10
0040ACA9 |> 53 PUSH
EBX-------跳到此處!
0040ACAA |. F7E1 MUL
ECX----ECX=ECX*1=6374656E*1=6374656E
0040ACAC |. 8BD8 MOV
EBX, EAX---------EBX清零!
0040ACAE |. 8B4424 08 MOV EAX, DWORD
PTR SS:[ESP+8]---把第一組機器碼送入EAX:38313
27B
0040ACB2 |. F76424 14 MUL DWORD PTR
SS:[ESP+14]---6B636FC*3831327B=F835A0E4 r 1792
6394,高位送入EAX,低位送入EDX,故EAX的值為:F835A0E4;EDX的值為:17926394!
0040ACB6 |. 03D8 ADD
EBX, EAX-------EBX=EBX+EAX=F835A0E4+0=F835A0E4
0040ACB8 |. 8B4424 08 MOV EAX, DWORD
PTR SS:[ESP+8]-----把3831327B送入EAX
0040ACBC |. F7E1 MUL
ECX----------ECX=ECX*3831327B=6374656E*3831327B=FECA37DA r 15D49
313,高位送入EAX,低位送入EDX,故EAX的值變為:FECA37DA;EDX的值為:15D49313!
0040ACBE |. 03D3 ADD
EDX, EBX-----EDX=EBX+EDX=F835A0E4+15D49313=0E0A33F7,EDX的值參與第3步的運算!
0040ACC0 |. 5B POP
EBX
; 0068F064
----------------------------------------------------------
演算法基本搞清楚,下面進行總結:
1、每次取機器碼的四位進行計算,如我的機器碼是:{2181533-91212-94319-592381135-11335993}
第1次四位是:{218;第2次四位是:1533;第3次四位是:-912;第4次四位是:12-9
第5次四位是:4319;第6次四位是:-592;第7次四位是:3811;第8次四位是:35-1
第9次四位是:1335 第10次四位是:993}。然後對取出的四位機器碼進行轉換,轉換是這樣的:先取每位機器碼的ASCII碼,然後從最
後一位開始把它組合起來形成一組新值,這組新值參與計算註冊碼!如:第1次四位是:{218,取各位的ASCII碼為:{為7B,2為32,1為
31,8為38,把它們組合起來是:3831327B!第10次四位是:993},取各位的ASCII碼為:9為39,9為39,3為33,}為7D,把它們組合起來就
是:7D333939。
2、第二步運算是:把四位機器碼的新值與兩個常數:6B636F6C和6374656E進行計算形成16位一組的註冊碼,故註冊碼是160位,又長又
臭。前8位的註冊碼(我們假定是A,機器碼的轉換值我們假定為C),它的計算是這樣的:A=(6B636F6C*C的高8位+6374656E*C的低8位)
OR
40000000,如第一組的前8位計算是:A=(6B636F6C*3831327B的高8位+6374656E*3831327B的低8位) OR 40000000=(F835A0E4+15D49313)
OR 40000000=0E0A33F7 OR 40000000=4E0A33F7,最後一組註冊碼的計算:A=(6B636F6C*7D333939的高8位+6374656E*7D333939的低8位)
OR 40000000=(FB76DB0C+30A3BBF1) OR 40000000=2C1A96FD OR 40000000=6C1A96FD;
後8位的註冊碼(我們假定是B),B=6374656E*C的高8位。如第一組的後8位:B=6374656E*3831327B的高8位=FECA37DA;
最後一組的後8位:B=6374656E*7D333939的高8位=FA6A137E,把A、B組合起來構成一組16位的註冊碼,注意大寫字母轉換成小寫字母;
即每組註冊碼由AB構成,如我的第一組註冊碼就是:4e0a33f7feca37da;我的最後一組註冊碼就是:6c1a96fdfa6a137e.每組註冊碼之間
空一格。
破解小結:
這個軟體破解是非常容易的,是明碼!但研究它的演算法卻費了我不少時間,搞清楚它的演算法,對我等菜鳥來說,很有幫助!
相關文章
- 東晨庫管網路版 6.5註冊演算法分析2003-08-14演算法
- supercleaner註冊演算法分析2015-11-15演算法
- 迷你網路電視5.1註冊演算法2003-07-04演算法
- SpeedFlash註冊演算法分析(VB)2015-11-15演算法
- 財智老闆通3.04註冊版---註冊演算法分析2003-03-16演算法
- Instant Source 註冊演算法分析+註冊器原始碼2015-11-15演算法原始碼
- 易語言------精科電腦算命V3.4版註冊演算法分析2015-11-15演算法
- 新基建如何構造精準時鐘同步(NTP網路授時)體系2022-06-01
- Screen Demo Maker 3.0 註冊演算法分析2003-07-15演算法
- <<Anti-Hack>> 2.0註冊演算法分析2003-06-06演算法
- Personal Antispy 1.14 註冊演算法分析2015-11-15演算法
- 冰盾濾鏡註冊演算法分析2015-11-15演算法
- DLL Show V4.4 註冊演算法分析2015-11-15演算法
- Disk
Chief 1.2 簡單註冊演算法分析2015-11-15演算法
- 人類幾小時,演算法幾分鐘!AI可精確追蹤單個神經元活動2019-04-16演算法AI
- 〖網際營銷〗V2.4 註冊演算法分析 (11千字)2001-11-03演算法
- 一個區域網工具的註冊演算法分析
(5千字)2015-11-15演算法
- E族百變桌面6.0註冊演算法分析2015-11-15演算法
- FolderView 1.7
註冊演算法分析 (14千字)2015-11-15View演算法
- 優軟精靈畫筆之大天使3.0註冊演算法分析及KeyGen (3千字)2001-11-10演算法
- ffmpeg分析系列之一(註冊該註冊的)2010-11-04
- LanSee 註冊演算法2015-11-15演算法
- 5分鐘完成OnlyFans註冊訂閱2024-07-04
- 新狐傳真群發2.0註冊演算法分析2003-06-29演算法
- 重新貼過註冊演算法分析 (16千字)2001-10-23演算法
- 長沙vod點歌系統(註冊演算法分析)2015-11-15演算法
- Netscan pro 3.3 註冊演算法分析全過程2015-11-15演算法
- 中文撥號上網計時計費器 V4.12註冊演算法分析--[OCG] (23千字)2002-03-26演算法
- 研究網路卡地址註冊時的一點思考2019-04-30
- 公務員之路3.0註冊分析2015-11-15
- EffeTech HTTP Sniffer 3.2註冊演算法分析 (5千字)2002-06-24HTTP演算法
- Green Tea 2.60註冊碼演算法分析 (3千字)2000-07-17演算法
- VB控制元件21Hex DockIt註冊演算法分析2015-11-15控制元件演算法
- [原創]Focus
Magic V3.01 註冊演算法分析2015-11-15演算法
- 海嘯錄音機Ver2.1註冊演算法分析2015-11-15演算法
- 向量時鐘演算法2017-10-28演算法
- 【SpringBoot】服務對註冊中心的註冊時機2024-05-25Spring Boot
- 直播app開發搭建,註冊時確定兩次密碼一致2022-12-16APP密碼