星光之夜 -- Starry Night 共享版演算法分析
【破解宣告】本文純系技術性討論,任何人因使用本文資訊造成的一切後果,作者概不負責。
【軟體名稱】Starry Night Digital Download v4.05-- 星光之夜電子下載最新版
【軟體簡介】這是一款美麗而實用的星圖軟體, 根據實時天文資料計算並顯示指定時間的星空景象,
甚至包括人造衛星的位置和運動情況! 自動識別所有星座, 視野達到20,000光年。包含
約35,000 顆各類星球及170多個深層空間物體,如星系、星雲和星團等的詳細資料。在
功能上相當於Backyard版,可以製作自己的電影和星際圖片,並可從livesky.com
下載
最新的天文資料。但為了減小體積,便於下載,省略了很多星球的資料。可以用backyard
版本的updater進行升級,配備完整的.pdf使用手冊,是廣大天文愛好者的必備工具。
【軟體大小】56.2MB
【下載地址】www.starrynight.com
【應用平臺】Windows 98/ME/2000/XP
【軟體限制】15天時間限制。在網上登記下載時,會要求填寫email
地址,隨後就會給你傳送一個試用
註冊碼,可免費使用15天。
【破解工具】OllyDbg 1.09d
【分析過程】用PEid和FI3.01均顯示沒有殼,但不能確定是何種語言寫成。如果註冊碼失敗,會有訊息框
顯示失敗資訊,如成功則進入主介面。試用註冊碼的形式是:yt4-383b-7669-71c1-5824,
所以試煉碼設定為yr1-2345-6789-abcd-ef00.用OD載入後,現直接執行,利用臨時註冊碼
進入主介面,然後下CreateWindowExA斷點,再從help選單中選擇軟體註冊。在顯示註冊對話
框的時候會被OD攔住,記下編輯框控制元件的控制程式碼。輸入試煉碼後,回OD下GetWindowsTextA斷點,
但沒能攔住(這年頭,用這種方法來獲得輸入的東東好像不多了)。重新來過,這次在我們的
老朋友CallWindowProc函式上下條件斷點([esp+8]==編輯框控制程式碼)
&& ([esp+C]==WM_GETTEXT),
攔截成功,記下存放輸入的記憶體地址,待函式返回後,在該處下記憶體斷點,然後執行程式直至
訪問輸入的資訊,便來到以下程式碼:
入口處:
Arg1 = 00000002
Arg2 = 00C4BB78 ASCII "yr1-2345-6789-abcd-ef00"
Arg3 = 00C4BC78 ASCII "lianzi2000"
Arg4 = 00CB97F8
Arg5 = 00CB97FC
Arg6 = 00000000
Arg7 = 00000079
Arg8 = 00000034
................................................
005B330F |> 8B4D 0C
/MOV ECX,DWORD PTR SS:[EBP+C] ****試煉碼
005B3312 |. 0FBE0431 |MOVSX EAX,BYTE PTR DS:[ECX+ESI]
****esi是索引
005B3316 |. 8945 8C |MOV DWORD PTR SS:[EBP-74],EAX
****取一個字元放入暫存處
005B3319 |. B0 01 |MOV AL,1
005B331B |. 837D 8C 00 |CMP DWORD PTR SS:[EBP-74],0
005B331F |. 7C 0B |JL SHORT starryni.005B332C
005B3321 |. 817D 8C 000100>|CMP DWORD PTR SS:[EBP-74],100
****看是否在0-0x100範圍內
005B3328 |. 7D 02 |JGE SHORT starryni.005B332C
005B332A |. 30C0 |XOR AL,AL
005B332C |> 84C0 |TEST AL,AL
005B332E |. 74 04 |JE SHORT starryni.005B3334
005B3330 |. 31C0 |XOR EAX,EAX
005B3332 |. EB 1B |JMP SHORT starryni.005B334F
005B3334 |> 6A 01 |PUSH 1
005B3336 |. E8 D5690800 |CALL starryni.00639D10
****tls相關
005B333B |. 59 |POP ECX
005B333C |. 8B90 BC010000 |MOV EDX,DWORD PTR DS:[EAX+1BC]
005B3342 |. 8B5A 08 |MOV EBX,DWORD PTR DS:[EDX+8]
****ebx 是個字元型別表
005B3345 |. 8B45 8C |MOV EAX,DWORD PTR SS:[EBP-74]
****暫存處的字元
005B3348 |. 0FB70443 |MOVZX EAX,WORD PTR DS:[EBX+EAX*2]
005B334C |. 83E0 09 |AND EAX,9
****如果字母或數字,
005B334F |> 85C0 |TEST EAX,EAX
****EAX就不會為0
005B3351 |. 75 09 |JNZ SHORT starryni.005B335C
005B3353 |. 8B45 0C |MOV EAX,DWORD PTR SS:[EBP+C]
005B3356 |. 803C30 2D |CMP BYTE PTR DS:[EAX+ESI],2D
****如果是特殊符號,就檢查是否連字號
005B335A |. 75 17 |JNZ SHORT starryni.005B3373
****別的字元一概忽略
005B335C |> 8B45 0C |MOV EAX,DWORD PTR
SS:[EBP+C]
005B335F |. 0FB61430 |MOVZX EDX,BYTE PTR DS:[EAX+ESI]
005B3363 |. 8B45 90 |MOV EAX,DWORD PTR SS:[EBP-70]
005B3366 |. 885405 9C |MOV BYTE PTR SS:[EBP+EAX-64],DL
005B336A |. FF45 90 |INC DWORD PTR SS:[EBP-70]
****[ebp-70] 是長度計數
005B336D |. 837D 90 17 |CMP DWORD PTR SS:[EBP-70],17
****這裡表明正確的長度應該是0x17
005B3371 |. 7D 16 |JGE SHORT starryni.005B3389
005B3373 |> 46 |INC ESI
005B3374 |> 8B7D 0C MOV EDI,DWORD PTR
SS:[EBP+C]
005B3377 |. 31C0 |XOR EAX,EAX
005B3379 |. 83C9 FF |OR ECX,FFFFFFFF
005B337C |. F2:AE |REPNE SCAS BYTE
PTR ES:[EDI]
005B337E |. BA FEFFFFFF |MOV EDX,-2
005B3383 |. 29CA |SUB EDX,ECX
005B3385 |. 39D6 |CMP ESI,EDX
005B3387 |.^72 86 \JB SHORT starryni.005B330F
以上程式碼整理輸入的註冊碼,忽略除數字和字母以及連字號之外的一切字元。
005B3389 |> C645 B3 00
MOV BYTE PTR SS:[EBP-4D],0
005B338D |. 8D45 9C LEA EAX,DWORD PTR SS:[EBP-64]
****整理後的註冊碼
005B3390 |. 50 PUSH EAX
005B3391 |. FF75 0C PUSH DWORD PTR SS:[EBP+C]
005B3394 |. E8 373D0800 CALL starryni.006370D0
****複製覆蓋原註冊碼
005B3399 |. 59 POP ECX
005B339A |. 59 POP ECX
005B339B |. FF75 0C PUSH DWORD PTR SS:[EBP+C]
****註冊碼
005B339E |. E8 A1080000 CALL starryni.005B3C44
****這個函式把註冊碼中的字母全變成小寫
005B33A3 |. 59 POP ECX
005B33A4 |. 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
****註冊碼
005B33A7 |. 0FB641 01 MOVZX EAX,BYTE PTR DS:[ECX+1]
****取第二個字元
005B33AB |. 8945 98 MOV DWORD PTR SS:[EBP-68],EAX
****存入[ebp-68]處
005B33AE |. 807D 08 01 CMP BYTE PTR SS:[EBP+8],1
005B33B2 |. 75 04 JNZ SHORT starryni.005B33B8
005B33B4 |. C645 97 00 MOV BYTE PTR SS:[EBP-69],0
005B33B8 |> 807D 98 63 CMP BYTE PTR SS:[EBP-68],63
005B33BC |. 75 04 JNZ SHORT starryni.005B33C2
005B33BE |. C645 97 00 MOV BYTE PTR SS:[EBP-69],0
005B33C2 |> 8B7D 0C MOV EDI,DWORD PTR
SS:[EBP+C]
005B33C5 |. 31C0 XOR EAX,EAX
005B33C7 |. 83C9 FF OR ECX,FFFFFFFF
005B33CA |. F2:AE REPNE SCAS BYTE
PTR ES:[EDI]
005B33CC |. B8 FEFFFFFF MOV EAX,-2
005B33D1 |. 29C8 SUB EAX,ECX
005B33D3 |. 83F8 17 CMP EAX,17
005B33D6 |. 73 0B JNB SHORT starryni.005B33E3
005B33D8 |. 8B45 18 MOV EAX,DWORD PTR SS:[EBP+18]
005B33DB |. C600 05 MOV BYTE PTR DS:[EAX],5
005B33DE |. E9 FC010000 JMP starryni.005B35DF
005B33E3 |> 8B7D 0C
MOV EDI,DWORD PTR SS:[EBP+C]
****註冊碼
005B33E6 |. 31C0 XOR EAX,EAX
005B33E8 |. 83C9 FF OR ECX,FFFFFFFF
005B33EB |. F2:AE REPNE SCAS BYTE
PTR ES:[EDI]
005B33ED |. B8 FEFFFFFF MOV EAX,-2
005B33F2 |. 29C8 SUB EAX,ECX
005B33F4 |. 83F8 17 CMP EAX,17
****長度檢查
005B33F7 |. 76 07 JBE SHORT starryni.005B3400
005B33F9 |. 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
****如果大於0x17,則在此截斷,只取0x17個字元
005B33FC |. C640 17 00 MOV BYTE PTR DS:[EAX+17],0
005B3400 |> 8B7D 10 MOV EDI,DWORD PTR
SS:[EBP+10] ****名字
005B3403 |. 31C0 XOR EAX,EAX
005B3405 |. 83C9 FF OR ECX,FFFFFFFF
005B3408 |. F2:AE REPNE SCAS BYTE
PTR ES:[EDI] ****長度檢查
005B340A |. B8 FEFFFFFF MOV EAX,-2
005B340F |. 29C8 SUB EAX,ECX
005B3411 |. 807D 97 00 CMP BYTE PTR SS:[EBP-69],0
005B3415 |. 74 10 JE SHORT starryni.005B3427
005B3417 |. 83F8 02 CMP EAX,2
005B341A |. 7D 0B JGE SHORT starryni.005B3427
005B341C |. 8B45 18 MOV EAX,DWORD PTR SS:[EBP+18]
****如果長度小於2就失敗
005B341F |. C600 06 MOV BYTE PTR DS:[EAX],6
005B3422 |. E9 B8010000 JMP starryni.005B35DF
005B3427 |> C645 CC 00 MOV BYTE PTR SS:[EBP-34],0
005B342B |. 6A 03 PUSH 3
****立即數指明子串長度
005B342D |. FF75 0C PUSH DWORD PTR SS:[EBP+C]
****註冊碼
005B3430 |. 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34]
****存放返回字串的緩衝區
005B3433 |. 50 PUSH EAX
005B3434 |. E8 273D0800 CALL starryni.00637160
****該函式從一個字串的左端取子串
005B3439 |. 83C4 0C ADD ESP,0C
****所以這裡取註冊碼第一部分3個字元的子串
005B343C |. 6A 04 PUSH 4
005B343E |. 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
005B3441 |. 83C0 04 ADD EAX,4
005B3444 |. 50 PUSH EAX
005B3445 |. 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34]
005B3448 |. 50 PUSH EAX
005B3449 |. E8 123D0800 CALL starryni.00637160
****第二部分4個字元
005B344E |. 83C4 0C ADD ESP,0C
005B3451 |. 6A 04 PUSH 4
005B3453 |. 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
005B3456 |. 83C0 09 ADD EAX,9
005B3459 |. 50 PUSH EAX
005B345A |. 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34]
005B345D |. 50 PUSH EAX
005B345E |. E8 FD3C0800 CALL starryni.00637160
****第三部分4個字元
005B3463 |. 83C4 0C ADD ESP,0C
005B3466 |. 6A 04 PUSH 4
005B3468 |. 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
005B346B |. 83C0 0E ADD EAX,0E
005B346E |. 50 PUSH EAX
005B346F |. 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34]
005B3472 |. 50 PUSH EAX
005B3473 |. E8 E83C0800 CALL starryni.00637160
****第4部分4個字元
005B3478 |. 83C4 0C ADD ESP,0C
以上程式碼把註冊碼的第1,2,3,4部分連線起來,去掉連字號,形成yr123456789abcd, 在[ebp-34]處。
005B347B |. 8D45 CF LEA EAX,DWORD PTR SS:[EBP-31]
****這裡eax指向"23456789abcd"
005B347E |. 50 PUSH EAX
005B347F |. E8 83010000 CALL starryni.005B3607
****這個函式根據一個表把上述字串重新排序
005B3616 MOV EDI,DWORD PTR SS:[EBP+8]
005B3619 XOR EAX,EAX
005B361B OR ECX,FFFFFFFF
005B361E REPNE SCAS BYTE PTR
ES:[EDI]
005B3620 MOV EAX,-2
005B3625 SUB EAX,ECX
005B3627 CMP EAX,0C
****長度檢查:應該有0xC個字元
005B362A JE SHORT starryni.005B362E
005B362C JMP SHORT starryni.005B3663
005B362E XOR ESI,ESI
****esi作為索引
005B3630 JMP SHORT starryni.005B3646
005B3632 /MOVSX EBX,WORD PTR
DS:[ESI*2+729CA8] ****從位於[729CA8]的表中得到新索引
005B363A |MOV EAX,DWORD PTR
SS:[EBP+8]
005B363D |MOVZX EDX,BYTE PTR
DS:[EAX+EBX] ****從原字串中取出新索引對應的字元
005B3641 |MOV BYTE PTR SS:[EBP+ESI-1C],DL
****放在臨時緩衝區的原索引對應位置
005B3645 |INC ESI
005B3646 CMP ESI,0C
005B3649 \JL SHORT starryni.005B3632
005B364B MOV BYTE PTR SS:[EBP-10],0
005B364F MOV EAX,DWORD PTR
SS:[EBP+8]
005B3652 MOV BYTE PTR DS:[EAX],0
005B3655 LEA EAX,DWORD PTR
SS:[EBP-1C]
005B3658 PUSH EAX
005B3659 PUSH DWORD PTR SS:[EBP+8]
005B365C CALL starryni.00637130
****用重排過的字串代替原字串
[729CA8]表的內容如下:
0B 00 02 00 06 00 08 00 04 00 07
00 0A 00 01 00 03 00 09 00 00 00 05 00
所以"23456789abcd"重排後變成"d48a69c35b27"
005B3484 |. 59
POP ECX
005B3485 |. 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34]
****字串現已變成"yr1d48a69c35b27"
005B3488 |. 50 PUSH EAX
****作為引數壓入堆疊
005B3489 |. E8 CE020000 CALL starryni.005B375C
****關鍵call,計算檢查和
005B375C PUSH EBP
005B375D MOV EBP,ESP
005B375F PUSH EBX
005B3760 PUSH ESI
005B3761 PUSH EDI
005B3762 SUB ESP,24
005B3765 >MOV DWORD PTR
SS:[EBP-30],-32EB ****這裡有一個常數
005B376C PUSH 1E
****立即數指明所需字串的長度
005B376E LEA EAX,DWORD PTR
SS:[EBP-2C] ****存放返回結果的緩衝區
005B3771 PUSH EAX
005B3772 PUSH DWORD PTR SS:[EBP+8]
****"yr1d48a69c35b27"
005B3775 CALL starryni.005B37BD
****這個函式複製並連線字串直到達到指定長度
005B377A ADD ESP,0C
005B377D TEST AL,AL
****返回非零表示成功
005B377F JNZ SHORT starryni.005B3788
005B3781 MOV EAX,-11CD
005B3786 JMP SHORT starryni.005B37B5
005B3788 LEA EDI,DWORD PTR
SS:[EBP-2C] ****已經連線的字串:
005B378B XOR EAX,EAX
****"yr1d48a69c35b27yr1d48a69c35b27"
005B378D OR ECX,FFFFFFFF
005B3790 REPNE SCAS BYTE
PTR ES:[EDI]
005B3792 MOV ESI,-2
005B3797 SUB ESI,ECX
****長度0x1E
005B3799 XOR EBX,EBX
****ebx為索引index
005B379B JMP SHORT starryni.005B37AE
005B379D /MOVZX ECX,BYTE
PTR SS:[EBP+EBX-2C] ****ecx = ch
005B37A2 |MOV EDX,EBX
****edx = index
005B37A4 |IMUL EDX,ECX
****edx = index*ch
005B37A7 |IMUL EDX,ECX
****edx = index*ch*ch = index*ch**2
005B37AA |ADD DWORD PTR SS:[EBP-30],EDX
****結果加到常數-32EB上
005B37AD |INC EBX
005B37AE CMP EBX,ESI
005B37B0 \JL SHORT starryni.005B379D
005B37B2 MOV EAX,DWORD PTR
SS:[EBP-30] ****返回最後結果
005B37B5 LEA ESP,DWORD PTR
SS:[EBP-C]
005B37B8 POP EDI
005B37B9 POP ESI
005B37BA POP EBX
005B37BB POP EBP
005B37BC RETN
這個過程的工作是把字串首尾相連達到30個字元(0x1E),然後計算檢查和:
checksum = sum(index*ch**2)-0x32EB
005B348E |. 59
POP ECX
005B348F |. 0FB7C0 MOVZX EAX,AX
****拋棄檢查和的高位字
005B3492 |. 8D55 C0 LEA EDX,DWORD PTR SS:[EBP-40]
005B3495 |. 52 PUSH EDX
005B3496 |. 0FB7C0 MOVZX EAX,AX
005B3499 |. 50 PUSH EAX
005B349A |. E8 40040000 CALL starryni.005B38DF
****這個函式將檢查和的低位字轉成字串行式
005B349F |. 59 POP ECX
005B34A0 |. 59 POP ECX
005B34A1 |. C645 B4 00 MOV BYTE PTR SS:[EBP-4C],0
005B34A5 |. 6A 04 PUSH 4
005B34A7 |. 8B7D 0C MOV EDI,DWORD PTR SS:[EBP+C]
****這是原來輸入的原始形式的註冊碼
005B34AA |. 31C0 XOR EAX,EAX
005B34AC |. 83C9 FF OR ECX,FFFFFFFF
005B34AF |. F2:AE REPNE SCAS BYTE
PTR ES:[EDI]
005B34B1 |. BA FEFFFFFF MOV EDX,-2
005B34B6 |. 29CA SUB EDX,ECX
****取長度
005B34B8 |. 83C2 FC ADD EDX,-4
****
-4
005B34BB |. 0355 0C ADD EDX,DWORD PTR SS:[EBP+C]
****edx 指向最後4個字元,即第5部分
005B34BE |. 52 PUSH EDX
005B34BF |. 8D45 B4 LEA EAX,DWORD PTR SS:[EBP-4C]
005B34C2 |. 50 PUSH EAX
005B34C3 |. E8 983C0800 CALL starryni.00637160
****取出最後4個字元
005B34C8 |. 83C4 0C ADD ESP,0C
005B34CB |. 8D45 C0 LEA EAX,DWORD PTR SS:[EBP-40]
****檢查和字串
005B34CE |. 50 PUSH EAX
005B34CF |. 8D45 B4 LEA EAX,DWORD PTR SS:[EBP-4C]
****註冊碼最後部分字串
005B34D2 |. 50 PUSH EAX
005B34D3 |. E8 C83C0800 CALL starryni.006371A0
****比較看是否相等
005B34D8 |. 59 POP ECX
005B34D9 |. 59 POP ECX
005B34DA |. 85C0 TEST EAX,EAX
****返回0表示相等
005B34DC |. 74 0B JE SHORT starryni.005B34E9
005B34DE |. 8B45 18 MOV EAX,DWORD PTR SS:[EBP+18]
005B34E1 |. C600 08 MOV BYTE PTR DS:[EAX],8
005B34E4 |. E9 F6000000 JMP starryni.005B35DF
005B34E9 |> 8D7D CC LEA EDI,DWORD PTR
SS:[EBP-34]
005B34EC |. 31C0 XOR EAX,EAX
005B34EE |. 83C9 FF OR ECX,FFFFFFFF
005B34F1 |. F2:AE REPNE SCAS BYTE
PTR ES:[EDI]
005B34F3 |. BB FEFFFFFF MOV EBX,-2
005B34F8 |. 29CB SUB EBX,ECX
005B34FA |. 807D 97 00 CMP BYTE PTR SS:[EBP-69],0
****不明標誌
005B34FE |. 74 29 JE SHORT starryni.005B3529
005B3500 |. FF75 10 PUSH DWORD PTR SS:[EBP+10]
****名字
005B3503 |. E8 ED010000 CALL starryni.005B36F5
****關鍵call,計算名字檢查和
005B36F5 PUSH EBP
005B36F6 MOV EBP,ESP
005B36F8 PUSH EBX
005B36F9 PUSH ESI
005B36FA PUSH EDI
005B36FB SUB ESP,24
005B36FE MOV DWORD PTR SS:[EBP-30],75BCD15
****常數
005B3705 PUSH 1E
005B3707 LEA EAX,DWORD PTR
SS:[EBP-2C]
005B370A PUSH EAX
005B370B PUSH DWORD PTR SS:[EBP+8]
005B370E CALL starryni.005B37BD
****這個函式見過了,就是串聯字串達到0x1E
005B3713 ADD ESP,0C
005B3716 TEST AL,AL
005B3718 JNZ SHORT starryni.005B3721
005B371A MOV EAX,4455EE33
****奇怪的返回值表示失敗
005B371F JMP SHORT starryni.005B3754
005B3721 LEA EDI,DWORD PTR
SS:[EBP-2C] ****註冊名字相連而成的長度為1E的串
005B3724 XOR EAX,EAX
005B3726 OR ECX,FFFFFFFF
005B3729 REPNE SCAS BYTE PTR
ES:[EDI]
005B372B MOV ESI,-2
005B3730 SUB ESI,ECX
005B3732 XOR EBX,EBX
****ebx是索引index
005B3734 JMP SHORT starryni.005B374D
005B3736 /MOVZX ECX,BYTE PTR
SS:[EBP+EBX-2C] ****ecx = ch
005B373B |MOV EDX,EBX
****edx = index
005B373D |IMUL EDX,EBX
****edx = index**2
005B3740 |IMUL EDX,EBX
****edx = index**3
005B3743 |IMUL EDX,ECX
****edx = index**3*ch
005B3746 |IMUL EDX,ECX
****edx = index**3*ch**2
005B3749 |ADD DWORD PTR SS:[EBP-30],EDX
****加到常數75BCD15上
005B374C |INC EBX
005B374D CMP EBX,ESI
005B374F \JL SHORT starryni.005B3736
005B3751 MOV EAX,DWORD PTR
SS:[EBP-30]
005B3754 LEA ESP,DWORD PTR
SS:[EBP-C]
005B3757 POP EDI
005B3758 POP ESI
005B3759 POP EBX
005B375A POP EBP
005B375B RETN
這個過程計算名字的檢查和,同樣先把名字串聯達到0x1E長度,然後計算:
checksum = sum(index**3*ch**2) +
0x75BCD15
005B3508 |. 59
POP ECX
005B3509 |. 89C6 MOV ESI,EAX
****名字的檢查和
005B350B |. 8D53 F8 LEA EDX,DWORD PTR DS:[EBX-8]
005B350E |. 8D4D CC LEA ECX,DWORD PTR SS:[EBP-34]
****註冊碼前4部分相連並重排後的字串
005B3511 |. 01CA ADD EDX,ECX
****edx指向該字串的後面8個字元
005B3513 |. 52 PUSH EDX
005B3514 |. E8 6A040000 CALL starryni.005B3983
****轉換成16進位制數碼
005B3519 |. 59 POP ECX
005B351A |. 39F0 CMP EAX,ESI
****結果與名字的檢查和比較
005B351C |. 74 0B JE SHORT starryni.005B3529
****必須相等,否則失敗
005B351E |. 8B45 18 MOV EAX,DWORD PTR SS:[EBP+18]
005B3521 |. C600 04 MOV BYTE PTR DS:[EAX],4
005B3524 |. E9 B6000000 JMP starryni.005B35DF
005B3529 |> 8D45 CF LEA EAX,DWORD PTR
SS:[EBP-31] ****重排後註冊碼的第2部分
005B352C |. 50 PUSH EAX
005B352D |. E8 FF030000 CALL starryni.005B3931
****轉換成16進位制數
005B3532 |. 59 POP ECX
005B3533 |. 0FB7C0 MOVZX EAX,AX
只保留低位字
005B3536 |. 89C3 MOV EBX,EAX
005B3538 |. E8 2E010000 CALL starryni.005B366B
****這個函式沒有搞懂。看上去十分複雜,很多層次
****子程式呼叫,但與名字及註冊碼均無關,最後返回
005B353D |. 89DA MOV EDX,EBX
****0x135A
005B353F |. 29C2 SUB EDX,EAX
****第2部分的值減去這個135A
005B3541 |. 8B45 14 MOV EAX,DWORD PTR SS:[EBP+14]
005B3544 |. 8910 MOV DWORD PTR DS:[EAX],EDX
****如果結果小於0就會失敗
005B3546 |. 0FBE45 98 MOVSX EAX,BYTE PTR SS:[EBP-68]
****這裡是註冊碼第二個字元,可能決定註冊的版本
005B354A |. 83E8 63 SUB EAX,63
005B354D |. 74 26 JE SHORT starryni.005B3575
005B354F |. 83E8 0B SUB EAX,0B
005B3552 |. 74 56 JE SHORT starryni.005B35AA
005B3554 |. 83E8 04 SUB EAX,4
005B3557 |. 74 3B JE SHORT starryni.005B3594
005B3559 |. 83E8 02 SUB EAX,2
005B355C |. 74 07 JE SHORT starryni.005B3565
005B355E |. 83E8 01 SUB EAX,1
005B3561 |. 74 47 JE SHORT starryni.005B35AA
005B3563 |. EB 4D JMP SHORT starryni.005B35B2
005B3565 |> 8B45 14 MOV EAX,DWORD PTR
SS:[EBP+14] ****'t',註冊15天試用版
005B3568 |. 8338 00 CMP DWORD PTR DS:[EAX],0
005B356B |. 7C 2F JL SHORT starryni.005B359C
005B356D |. 837D 1C 28 CMP DWORD PTR SS:[EBP+1C],28
005B3571 |. 7E 47 JLE SHORT starryni.005B35BA
005B3573 |. EB 27 JMP SHORT starryni.005B359C
005B3575 |> 8B45 14 MOV EAX,DWORD PTR
SS:[EBP+14] ****'c',不明用處
005B3578 |. 8338 00 CMP DWORD PTR DS:[EAX],0
005B357B |. 7C 1F JL SHORT starryni.005B359C
005B357D |. 837D 1C 14 CMP DWORD PTR SS:[EBP+1C],14
005B3581 |. 7E 02 JLE SHORT starryni.005B3585
005B3583 |. EB 17 JMP SHORT starryni.005B359C
005B3585 |> BA 14000000 MOV EDX,14
005B358A |. 2B55 1C SUB EDX,DWORD PTR SS:[EBP+1C]
005B358D |. 8B45 14 MOV EAX,DWORD PTR SS:[EBP+14]
005B3590 |. 8910 MOV DWORD PTR DS:[EAX],EDX
005B3592 |. EB 26 JMP SHORT starryni.005B35BA
005B3594 |> 8B45 14 MOV EAX,DWORD PTR
SS:[EBP+14] ****'r',好像是正式的backyard版
005B3597 |. 8338 00 CMP DWORD PTR DS:[EAX],0
005B359A |. 7D 1E JGE SHORT starryni.005B35BA
005B359C |> 8B45 18 MOV EAX,DWORD PTR
SS:[EBP+18]
005B359F |. C600 03 MOV BYTE PTR DS:[EAX],3
005B35A2 |. 8B45 14 MOV EAX,DWORD PTR SS:[EBP+14]
005B35A5 |. 8320 00 AND DWORD PTR DS:[EAX],0
005B35A8 |. EB 35 JMP SHORT starryni.005B35DF
005B35AA |> 8B45 14 MOV EAX,DWORD PTR
SS:[EBP+14] ****'n'和'u',沒看出有什麼特別
005B35AD |. 8320 00 AND DWORD PTR DS:[EAX],0
005B35B0 |. EB 08 JMP SHORT starryni.005B35BA
005B35B2 |> 8B45 18 MOV EAX,DWORD PTR
SS:[EBP+18] ; Default case
of switch 005B354A
005B35B5 |. C600 07 MOV BYTE PTR DS:[EAX],7
005B35B8 |. EB 25 JMP SHORT starryni.005B35DF
005B35BA |> 8B45 0C MOV EAX,DWORD PTR
SS:[EBP+C] ; original
code
005B35BD |. 0FB610 MOVZX EDX,BYTE PTR DS:[EAX]
005B35C0 |. 3A55 20 CMP DL,BYTE PTR SS:[EBP+20]
****第1個字元必須是'y'
005B35C3 |. 74 08 JE SHORT starryni.005B35CD
005B35C5 |. 8B45 18 MOV EAX,DWORD PTR SS:[EBP+18]
005B35C8 |. C600 09 MOV BYTE PTR DS:[EAX],9
005B35CB |. EB 12 JMP SHORT starryni.005B35DF
005B35CD |> 8B45 0C MOV EAX,DWORD PTR
SS:[EBP+C]
005B35D0 |. 0FB650 02 MOVZX EDX,BYTE PTR DS:[EAX+2]
005B35D4 |. 3A55 24 CMP DL,BYTE PTR SS:[EBP+24]
****第3個字元必須是'4'
005B35D7 |. 74 0A JE SHORT starryni.005B35E3
005B35D9 |. 8B45 18 MOV EAX,DWORD PTR SS:[EBP+18]
005B35DC |. C600 0A MOV BYTE PTR DS:[EAX],0A
005B35DF |> 30C0 XOR AL,AL
005B35E1 |. EB 1C JMP SHORT starryni.005B35FF
005B35E3 |> 807D 98 74 CMP BYTE PTR SS:[EBP-68],74
005B35E7 |. 74 06 JE SHORT starryni.005B35EF
005B35E9 |. 807D 98 63 CMP BYTE PTR SS:[EBP-68],63
005B35ED |. 75 08 JNZ SHORT starryni.005B35F7
005B35EF |> 8B45 18 MOV EAX,DWORD PTR
SS:[EBP+18]
005B35F2 |. C600 01 MOV BYTE PTR DS:[EAX],1
005B35F5 |. EB 06 JMP SHORT starryni.005B35FD
005B35F7 |> 8B45 18 MOV EAX,DWORD PTR
SS:[EBP+18]
005B35FA |. C600 00 MOV BYTE PTR DS:[EAX],0
005B35FD |> B0 01 MOV AL,1
005B35FF |> 8D65 F4 LEA ESP,DWORD PTR
SS:[EBP-C]
005B3602 |. 5F POP EDI
005B3603 |. 5E POP ESI
005B3604 |. 5B POP EBX
005B3605 |. 5D POP EBP
005B3606 \. C3 RETN
【分析總結】可用以下步驟生成註冊碼:
1 將名字剔除一切特殊字元(包括空格)後,重複複製至0x1E個字元長;
2 計算名字串的32-bit檢查和 checksum = sum(index**3*ch**2)+0x75BCD15
3 將檢查和數字轉換成字串(8個字元)
4 在該字串頭上加上"yx4ssss",其中'x'可以是t,r,n,u或c;s可以是任何16進位制數字
但不能小於0x135A
5 將所得字串複製、連線,正好達到0x1E個字元,計算檢查和:
checksum = sum(index*ch**2)-32EB
6 所的檢查和的低位字轉換成字串形式,這4個字元構成註冊碼的最後4位
7 由名字檢查和生成的字串(長度8)加上前面的任意4個16進位制數字構成一個12字元長的串,
按照下面的順序重新排列:
10,7,1,8,4,11,2,5,3,9,6,0
重排後的字串構成註冊碼的第2,3和4部分。
8 第一部分就是"yx4",其中'x'可以是t,r,n,u或c
【版權資訊】本文版權屬作者lianzi2000所有,轉載請保持完整
相關文章
- Starry Night Pro Plus for Mac(天文模擬軟體) v8.1.1.2078啟用版2020-12-26Mac
- 天國的《The Last Night》2021-06-22AST
- 《超級小精靈》Ver 1.00共享版的註冊分析 (15千字)2001-02-10
- Canvas繪製星光閃爍的生日祝福2019-07-06Canvas
- 魔法使之夜 雜談2024-06-10
- UIMenuController糾結之夜2016-01-06UIController
- 月圓之夜裝系統2008-07-03
- PS星光閃耀濾鏡:Topaz Star Effects Mac版2020-10-20Mac
- 【題解】A18536.星光交錯的律動2024-03-18
- Chrome 瀏覽器擴充套件 - Night Eye2021-04-20Chrome瀏覽器套件
- BabyEntertainment|DMS Night 24|DragonImage|志摩紫光|【苦痛門】2020-12-08AIGo
- 1-Are You a Night Owl or an Early Bird - A New Roommate2024-05-23OOM
- epic堡壘之夜怎麼設定中文 堡壘之夜設定了中文沒用2022-05-10
- 挖寶|手把手教你如何搞到“綠盟星光之角”2021-06-18
- XX解霸3000(共享版)註冊碼破解實錄2015-11-15
- [20140913]Quiz Night.txt2014-09-15UI
- 演算法分析2024-10-09演算法
- epic堡壘之夜怎麼設定中文2022 epic堡壘之夜怎麼調中文2022-03-31
- 豪傑大眼睛共享版註冊碼破解 (1千字)2001-07-08
- Silverlight遊戲開發:引擎”Night”解析2017-11-13遊戲開發
- 遊戲城市設計:《賽博朋克2077》夜之城(Night City)的心理感受和分析優化2022-01-17遊戲優化
- “知識星光 點亮未來”,微信支付助力西藏鄉村教育2021-07-30
- 因為《堡壘之夜》的盈利問題,Epic和產業分析師“互掐”了一波2020-03-02產業
- 澳洲中學組織加密貨幣資訊之夜2018-02-17加密
- 無眠之夜01-遷移資料庫2011-11-16資料庫
- 加解密演算法分析2020-06-29解密演算法
- 如何分析排序演算法2022-06-16排序演算法
- CryptCD 3演算法分析2015-11-15演算法
- SFR演算法原理分析2024-08-21演算法
- [20220531]測試quiz night.txt2022-05-31UI
- 邀請函 | Google Play 成長之星 “Pizza Night” 北京站2017-08-16Go
- 邀請函 | Google Play 成長之星 “Pizza Night” x 黑獅社群2017-08-24Go
- 邀請函 | Google Play 成長之星 Pizza Night x 遊戲茶館2017-05-15Go遊戲
- 演算法分析__級數求和2019-03-05演算法
- 演算法分析__時間估算2019-03-05演算法
- 演算法分析__遞推方程2019-03-05演算法
- ETH-Pow演算法分析2019-02-20演算法
- 演算法複雜度分析2021-09-19演算法複雜度