簡單演算法之貪吃豆豆龍

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

標 題:簡單演算法之貪吃豆豆龍

發信人:loveboom

時 間:2003年8月22日 09:21 

詳細資訊: 



軟體大小:  152 KB
軟體語言:  簡體中文
軟體類別:  國產軟體 / 共享版 / 益智遊戲
應用平臺:  Win9x/NT/2000/XP
介面預覽:  無
下載地址:http://www.skycn.net/soft/13584.html
軟體簡介:
貪吃豆豆龍是一款值得珍藏的經典遊戲,它是傳統貪吃蛇遊戲的全新升級,並支援樂趣無窮的雙人對戰!本次發行的2.0版本較上一版本有了大幅度的改進.1.全新的遊戲介面 2.增加排行榜功能 3.更加科學的計分方式 4.級別分數實時顯示 5.選單設定遊戲速度 6.可改變地圖尺寸 7.豆豆龍的顏色可由玩家自己選擇 8.輸入註冊碼自動註冊。
工具:0llydbg1.09d漢化版,peid 0.9(因為跟蹤時比較簡單所以也就不用w32dasm)
假碼:77585201314
機器碼:84940800
用peid0.9發現它是用c寫的。
開始下斷點getdlgitemtexta,有兩處呼叫,正確的是在第一個下斷,好了,斷下來到這裡
00403AE6   . FF15 34B14000   CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; GetDlgItemTextA
00403AEC   . 68 98E94000     PUSH DDL.0040E998                        ;  ASCII "77585201314"
00403AF1   . E8 9AF7FFFF     CALL DDL.00403290
00403AF6   . 83C4 04         ADD ESP,4
00403AF9   . E8 02F8FFFF     CALL DDL.00403300  '這裡就是傳說中的關鍵處按F8切入
00403AFE   . 803D 7CEF4000 0>CMP BYTE PTR DS:[40EF7C],1
00403B05   . 75 44           JNZ SHORT DDL.00403B4B '這裡一跳就 Game over,改成JZ 00403B4B就暴破
00403B07   . E8 14FFFFFF     CALL DDL.00403A20
00403B0C   . A1 B8E74000     MOV EAX,DWORD PTR DS:[40E7B8]
上面那個call 進入後就到了這裡:
00403300  /$ 83EC 2C         SUB ESP,2C
00403303  |. A0 80EF4000     MOV AL,BYTE PTR DS:[40EF80]
00403308  |. 57              PUSH EDI
00403309  |. 884424 10       MOV BYTE PTR SS:[ESP+10],AL
0040330D  |. B9 07000000     MOV ECX,7
00403312  |. 33C0            XOR EAX,EAX
00403314  |. 8D7C24 11       LEA EDI,DWORD PTR SS:[ESP+11]
00403318  |. F3:AB           REP STOS DWORD PTR ES:[EDI]
0040331A  |. 8D4C24 04       LEA ECX,DWORD PTR SS:[ESP+4]
0040331E  |. C74424 04 00000>MOV DWORD PTR SS:[ESP+4],0
00403326  |. 51              PUSH ECX                                 ; /pHandle
00403327  |. 68 D4C44000     PUSH DDL.0040C4D4                        ; |Subkey = "SoftwareDdl"
0040332C  |. 68 01000080     PUSH 80000001                            ; |hKey = HKEY_CURRENT_USER
00403331  |. C74424 18 1E000>MOV DWORD PTR SS:[ESP+18],1E             ; |
00403339  |. AA              STOS BYTE PTR ES:[EDI]                   ; |
0040333A  |. FF15 08B04000   CALL DWORD PTR DS:[<&ADVAPI32.RegCreateK>; RegCreateKeyA
00403340  |. 85C0            TEST EAX,EAX
00403342  |. 5F              POP EDI
00403343  |. 75 79           JNZ SHORT DDL.004033BE
00403345  |. 8B4C24 00       MOV ECX,DWORD PTR SS:[ESP]
00403349  |. 8D5424 08       LEA EDX,DWORD PTR SS:[ESP+8]
0040334D  |. 8D4424 0C       LEA EAX,DWORD PTR SS:[ESP+C]
00403351  |. 52              PUSH EDX                                 ; /pBufSize
00403352  |. 50              PUSH EAX                                 ; |Buffer
00403353  |. 6A 00           PUSH 0                                   ; |pValueType = NULL
00403355  |. 6A 00           PUSH 0                                   ; |Reserved = NULL
00403357  |. 68 CCC44000     PUSH DDL.0040C4CC                        ; |ValueName = "RegID"
0040335C  |. 51              PUSH ECX                                 ; |hKey
0040335D  |. FF15 00B04000   CALL DWORD PTR DS:[<&ADVAPI32.RegQueryVa>; RegQueryValueExA
00403363  |. 85C0            TEST EAX,EAX
00403365  |. 75 57           JNZ SHORT DDL.004033BE
00403367  |. 8B5424 00       MOV EDX,DWORD PTR SS:[ESP]
0040336B  |. 52              PUSH EDX                                 ; /hKey
0040336C  |. FF15 04B04000   CALL DWORD PTR DS:[<&ADVAPI32.RegCloseKe>; RegCloseKey
00403372  |. 6A 0A           PUSH 0A                                  ; /pFileSystemNameSize = 0000000A
00403374  |. 6A 00           PUSH 0                                   ; |pFileSystemNameBuffer = NULL
00403376  |. 6A 00           PUSH 0                                   ; |pFileSystemFlags = NULL
00403378  |. 8D4424 10       LEA EAX,DWORD PTR SS:[ESP+10]            ; |
0040337C  |. 6A 00           PUSH 0                                   ; |pMaxFilenameLength = NULL
0040337E  |. 50              PUSH EAX                                 ; |pVolumeSerialNumber
0040337F  |. 6A 0C           PUSH 0C                                  ; |MaxVolumeNameSize = C (12.)
00403381  |. 6A 00           PUSH 0                                   ; |VolumeNameBuffer = NULL
00403383  |. 68 E4C44000     PUSH DDL.0040C4E4                        ; |RootPathName = "c:"
00403388  |. FF15 A4B04000   CALL DWORD PTR DS:[<&KERNEL32.GetVolumeI>; GetVolumeInformationA '看到了這裡就有希望了,離成功不遠了,取c盤的序列號
我的是492576481也就是十六進位制的1D5C1EE1
0040338E  |. 8B4C24 04       MOV ECX,DWORD PTR SS:[ESP+4] '這裡就是把1D5C1EE1入ECX
00403392  |. 8D5424 0C       LEA EDX,DWORD PTR SS:[ESP+C] '假註冊碼77585201314將會到EDX中
00403396  |. 81E1 10789207   AND ECX,7927810 '這裡用序列號1D5C1EE1加上7927810
0040339C  |. 52              PUSH EDX'假註冊碼入棧
0040339D  |. 81F1 92078107   XOR ECX,7810792 '這裡ECX=1D5C1EE1+7927810=05101800
004033A3  |. 894C24 08       MOV DWORD PTR SS:[ESP+8],ECX '這裡ecx=05101800 xor 7810792=02911f92
004033A7  |. E8 28140000     CALL DDL.004047D4
004033AC  |. 8B4C24 08       MOV ECX,DWORD PTR SS:[ESP+8]
004033B0  |. 83C4 04         ADD ESP,4
004033B3  |. 3BC1            CMP EAX,ECX '這裡用假註冊碼和0291f92比較如果相等就註冊成功
004033B5  |. 75 07           JNZ SHORT DDL.004033BE '這裡也是暴破點
004033B7  |. C605 7CEF4000 0>MOV BYTE PTR DS:[40EF7C],1
004033BE  |> 33C0            XOR EAX,EAX
004033C0  |. 83C4 2C         ADD ESP,2C
004033C3  . C3              RETN
最後得出正確的註冊碼就是0291f92的十進位制43065234
總結:它那個機器碼是用於作者得到你的c盤序列號,我們可以不用管它.
演算法:註冊碼=(c盤序列號+7927810)xor 7810792

相關文章