1.脫殼加修復,主要在修復上
2.檢測文件的完整性。。。暴力修改
3.去除關閉vs時彈出的對話框
004A80F3 6A 00 push 0
004A80F5 6A 04 push 4
004A80F7 68 F45E4E00 push 004E5EF4
004A80FC E8 9F170100 call 004B98A0 ; jmp 到 MFC42.#1200_AfxMessageBox
004A8101 83F8 06 cmp eax, 6
004A8104 75 13 jnz short 004A8119
004A8106 E8 A8AEF5FF call 00402FB3
004A810B 8BCE mov ecx, esi
004A810D E8 1996F5FF call 0040172B
004A8112 8BCE mov ecx, esi
004A8114 E8 9F170100 call 004B98B8 ; jmp 到 MFC42.#4376_CDialog::OnCancel
004A8119 5E pop esi
004A811A C3 retn
修改爲:
004A80F3 6A 00 push 0
004A80F5 6A 04 push 4
004A80F7 68 F45E4E00 push 004E5EF4
004A80FC E8 9F170100 call 004B98A0 ; jmp 到 MFC42.#1200_AfxMessageBox
004A8101 83F8 06 cmp eax, 6
004A8104 75 13 jnz short 004A8119
004A8106 EB 0C jmp short 004A8114
004A8113 90 nop
004A8114 E8 9F170100 call 004B98B8 ; jmp 到 MFC42.#4376_CDialog::OnCancel
004A8119 5E pop esi
004A811A C3 retn
4.去除一開始登陸vs時彈出的Shell_NotifyIcon
bp Shell_NotifyIconA斷下,當參數爲NNIM_MODIFY=0x1時出現一個信息框
0042D936 50 push eax
0042D937 57 push edi
0042D938 FF15 6C855400 call dword ptr [<&shell32.Shell_Notif>; shell32.Shell_NotifyIconA
0042D93E 83FF 02 cmp edi, 2
0042D941 74 04 je short 0042D947
0042D943 3BC3 cmp eax, ebx
0042D945 75 03 jnz short 0042D94A
0042D947 895E 34 mov dword ptr [esi+34], ebx
0042D94A 5F pop edi
0042D94B 5E pop esi
0042D94C 5B pop ebx
0042D94D C2 0800 retn 8
0042D950 CC int3
0042D951 CC int3
0042D952 CC int3
0042D953 CC int3
0042D954 CC int3
0042D955 CC int3
0042D956 CC int3
0042D957 CC int3
0042D958 CC int3
0042D959 CC int3
0042D95A CC int3
0042D95B CC int3
修改爲:
0042D936 50 push eax
0042D937 57 push edi
0042D938 EB 16 jmp short 0042D950
0042D93A 90 nop
0042D93B 90 nop
0042D93C 90 nop
0042D93D 90 nop
0042D93E 83FF 02 cmp edi, 2
0042D941 74 04 je short 0042D947
0042D943 3BC3 cmp eax, ebx
0042D945 75 03 jnz short 0042D94A
0042D947 895E 34 mov dword ptr [esi+34], ebx
0042D94A 5F pop edi
0042D94B 5E pop esi
0042D94C 5B pop ebx
0042D94D C2 0800 retn 8
0042D950 50 push eax ;此處原來爲空數據
0042D951 8B4424 04 mov eax, dword ptr [esp+4]
0042D955 83F8 01 cmp eax, 1
0042D958 58 pop eax
0042D959 74 0A je short 0042D965
0042D95B 68 3ED94200 push 0042D93E
0042D960 - E9 3C331C7D jmp shell32.Shell_NotifyIconA
0042D965 83C4 08 add esp, 8
0042D968 ^ EB E0 jmp short 0042D94A
5.MessageBox的去除
查找字符串 ASCII "請稍後再試"
004B0C8E E8 440EF5FF call 00401AD7 ; 這裏是檢測時間的函數
004B0C93 85C0 test eax, eax
004B0C95 75 11 jnz short 004B0CA8
004B0C97 57 push edi
004B0C98 57 push edi
004B0C99 68 78674E00 push 004E6778 ; ASCII "請稍後再試"
004B0C9E E8 FD8B0000 call 004B98A0 ; jmp 到 MFC42.#1200_AfxMessageBox
找到這個函數的開頭:
004B0B2A B8 F4584C00 mov eax, 004C58F4
004B0B2F E8 7C920000 call 004B9DB0
004B0B34 81EC 88050000 sub esp, 588
004B0B3A 53 push ebx
004B0B3B 56 push esi
004B0B3C 8B35 A89E4E00 mov esi, dword ptr [4E9EA8]
004B0B42 57 push edi
004B0B43 33FF xor edi, edi
004B0B45 894D F0 mov dword ptr [ebp-10], ecx
004B0B48 39BE 5C050000 cmp dword ptr [esi+55C], edi
004B0B4E 74 5A je short 004B0BAA
懷疑這個函數就是處理鼠標左鍵單擊進出的,在此處下斷,看看返回的函數是什麼
但通過多次返回發現發起鼠標左鍵消息的代碼可能是在[返回到 MFC42.73D31FF8]這裏面。
這裏是處理鼠標左鍵消息的代碼。。。(不知道是否完全正確^_^)
004AFD22 A1 A89E4E00 mov eax, dword ptr [4E9EA8]
004AFD27 56 push esi
004AFD28 6A 00 push 0
004AFD2A 8BF1 mov esi, ecx
004AFD2C FFB0 C4040000 push dword ptr [eax+4C4]
004AFD32 B9 E0A04E00 mov ecx, 004EA0E0
004AFD37 E8 E924F5FF call 00402225
004AFD3C 6A 02 push 2
004AFD3E 6A FF push -1
004AFD40 68 0C100000 push 100C
004AFD45 FF76 20 push dword ptr [esi+20]
004AFD48 FF15 5C865400 call dword ptr [<&user32.SendMessageA>] ; USER32.SendMessageA
004AFD4E 85C0 test eax, eax
004AFD50 7C 12 jl short 004AFD64
004AFD52 50 push eax
004AFD53 8BCE mov ecx, esi
004AFD55 E8 44A00000 call 004B9D9E ; jmp 到 MFC42.#3286_CListCtrl::GetItemData
004AFD5A FF70 0C push dword ptr [eax+C]
004AFD5D 8BCE mov ecx, esi
004AFD5F E8 1828F5FF call 0040257C
004AFD64 5E pop esi
004AFD65 C2 0C00 retn 0C
我們沒有必要完全弄明白上面的代碼到底是什麼功能,但是可以知道的是下面的爲關鍵代碼:
004B0C8D 53 push ebx
004B0C8E E8 440EF5FF call 00401AD7 ; 這裏是檢測時間的函數
004B0C93 85C0 test eax, eax
004B0C95 75 11 jnz short 004B0CA8
004B0C97 57 push edi
004B0C98 57 push edi
004B0C99 68 78674E00 push 004E6778 ; 請稍後再試
004B0C9E E8 FD8B0000 call 004B98A0 ; jmp 到 MFC42.#1200_AfxMessageBox
004B0CA3 E9 97020000 jmp 004B0F3F
004B0CA8 8D9E DC040000 lea ebx, dword ptr [esi+4DC]
004B0CAE 8BCB mov ecx, ebx
004B0CB0 E8 171EF5FF call 00402ACC
004B0CB5 8D8E C0610000 lea ecx, dword ptr [esi+61C0]
004B0CBB 6A 01 push 1
004B0CBD E8 2F2BF5FF call 004037F1
004B0CC2 57 push edi
004B0CC3 8D8D 6CFAFFFF lea ecx, dword ptr [ebp-594]
004B0CC9 E8 220EF5FF call 00401AF0
004B0CCE 8D8D 6CFAFFFF lea ecx, dword ptr [ebp-594]
004B0CD4 C645 FC 06 mov byte ptr [ebp-4], 6 ; 數秒的對話框
004B0CD8 E8 C98B0000 call 004B98A6 ; jmp 到 MFC42.#2514_CDialog::DoModal
004B0CDD 8B8D D0FAFFFF mov ecx, dword ptr [ebp-530] ; [ebp-530]=0時,則進入房間?
004B0CE3 B8 F8030000 mov eax, 3F8 ; 3F8可能爲一個標誌
004B0CE8 3BC8 cmp ecx, eax
004B0CEA 0F8F B3010000 jg 004B0EA3
004B0CF0 0F84 A4010000 je 004B0E9A
004B0CF6 83F9 F6 cmp ecx, -0A
004B0CF9 0F84 1D020000 je 004B0F1C
004B0CFF 3BCF cmp ecx, edi
004B0D01 0F84 46010000 je 004B0E4D
004B0D07 81F9 F2030000 cmp ecx, 3F2
004B0D0D 0F84 2E010000 je 004B0E41
004B0D13 81F9 F3030000 cmp ecx, 3F3
004B0D19 0F84 AF000000 je 004B0DCE
004B0D1F 81F9 F4030000 cmp ecx, 3F4
004B0D25 74 2C je short 004B0D53
004B0D27 81F9 F6030000 cmp ecx, 3F6
004B0D2D 74 18 je short 004B0D47
004B0D2F 81F9 F7030000 cmp ecx, 3F7
004B0D35 0F85 81010000 jnz 004B0EBC
修改爲:
004B0CD8 E8 C98B0000 call 004B98A6 ; jmp 到 MFC42.#2514_CDialog::DoModal
004B0CDD 8B8D D0FAFFFF mov ecx, dword ptr [ebp-530]
004B0CE3 ^ E9 18FEFFFF jmp 004B0B00
004B0CE8 3BC8 cmp ecx, eax
004B0B00 83F9 F6 cmp ecx, -0A ; 是否點擊取消
004B0B03 74 09 je short 004B0B0E
004B0B05 83F9 00 cmp ecx, 0 ; 是否進入
004B0B08 0F85 9A010000 jnz 004B0CA8
004B0B0E B8 F8030000 mov eax, 3F8
004B0B13 E9 D0010000 jmp 004B0CE8
好了,一個完整的優化版就這樣出來了,嘿嘿
補充:發現這個版本比不完美。。。自己的VS賬號被封了,看來還有一些檢測我並沒有發現。在VS.txt我發現一些有用的信息:
W C D A VSClient.exe check failed 這是一開始VSClient.exe檢測失敗後的寫的信息
V C i t 7月22日 13:49:30 發現了作弊軟件0000正在運行 這是開啓OD後發現的一些信息
分析這兩個地方,第一個很明顯作了程序的完整性檢查,所以我們可以從一開始的那個開始
004370A7 68 542C4E00 push 004E2C54 ; ASCII "APPBCB"
004370AC 6A 04 push 4
004370AE 53 push ebx
004370AF 6A 04 push 4
004370B1 53 push ebx
004370B2 6A FF push -1
004370B4 FF15 48815400 call dword ptr [<&kernel32.CreateFileMappingA>] ; kernel32.CreateFileMappingA
004370BA 3BC3 cmp eax, ebx
004370BC A3 18A54E00 mov dword ptr [<hFileMap>], eax
004370C1 74 1B je short 004370DE
004370C3 FF15 30815400 call dword ptr [<&kernel32.GetLastError>] ; ntdll.RtlGetLastWin32Error
004370C9 3BC6 cmp eax, esi
004370CB 75 11 jnz short 004370DE
004370CD 53 push ebx
004370CE 53 push ebx
004370CF 68 442C4E00 push 004E2C44
004370D4 E8 C7270800 call 004B98A0 ; jmp 到 MFC42.#1200_AfxMessageBox
004370D9 E9 8B070000 jmp 00437869 ; 居然用CreateFileMap來檢測是否內存中是否有程序運行
0038CF03 FF15 5C313900 call dword ptr [<&MSVCRT.fprintf>] ; MSVCRT.fprintf
0038CF09 83C4 10 add esp, 10
0038CF0C 8B4D F0 mov ecx, dword ptr [ebp-10]
0038CF0F 51 push ecx
0038CF10 FF15 60313900 call dword ptr [<&MSVCRT.fclose>] ; MSVCRT.fclose
0038CF16 83C4 04 add esp, 4
這裏爲W C D A VSClient.exe check failed的返回處,即這裏有可能是檢測文件是否有效的地方,在段首下斷
0038CE60 55 push ebp
0038CE61 8BEC mov ebp, esp
0038CE63 6A FF push -1
0038CE65 68 F2263900 push 003926F2 ; 溉a9
0038CE6A 64:A1 00000000 mov eax, dword ptr fs:[0]
0038CE70 50 push eax
0038CE71 64:8925 0000000>mov dword ptr fs:[0], esp
0038CE78 83EC 1C sub esp, 1C
0038CE7B 68 F86B3900 push 00396BF8 ; a+
這裏是在WYClient模塊中
0046ADFB 50 push eax
0046ADFC 57 push edi
0046ADFD 8945 E4 mov dword ptr [ebp-1C], eax
0046AE00 FF15 04885400 call dword ptr [<&wyclientdataapi.CP>] ; WYClient.CP
0046AE06 59 pop ecx
0046AE07 FEC0 inc al
0046AE09 59 pop ecx
0046AE0A 75 36 jnz short 0046AE42 ; 修改這裏可以登陸
這裏就是調用檢測模塊的
這裏發現有關於development模式的監測,這裏我們暴力修改(如果不暴力的話,需要先解密一個文件,然後從那裏面讀出所有文件的MD5值,然後再自己手工計算出文件的MD5值,最後利用加密函數修改這個文件,太麻煩了。。。)
00383016 68 10533900 push 00395310 ; developmentfilename
0038301B 8D8D A8F7FFFF lea ecx, dword ptr [ebp-858]
00383021 E8 BA9D0000 call <_strcmp??> ; 是否爲developmenfilename
00383026 85C0 test eax, eax
00383028 75 45 jnz short 0038306F
改爲:
00383016 68 10533900 push 00395310 ; developmentfilename
0038301B 8D8D A8F7FFFF lea ecx, dword ptr [ebp-858]
00383021 E8 BA9D0000 call <_strcmp??> ; 是否爲developmenfilename
00383026 85C0 test eax, eax
00383028 74 45 je short 0038306F
這裏還有一處:
0045AA50 68 DC3A4E00 push 004E3ADC ; development
0045AA55 FF75 E0 push dword ptr [ebp-20]
0045AA58 FF15 94845400 call dword ptr [<&msvcrt._mbscmp>] ; (initial cpu selection)
0045AA5E 59 pop ecx
0045AA5F 85C0 test eax, eax
0045AA61 59 pop ecx
0045AA62 75 0E jnz short 0045AA72 ; 難道改這裏可以變成developmode?不是吧,嘿嘿
改爲:
0045AA50 68 DC3A4E00 push 004E3ADC ; development
0045AA55 FF75 E0 push dword ptr [ebp-20]
0045AA58 FF15 94845400 call dword ptr [<&msvcrt._mbscmp>] ; (initial cpu selection)
0045AA5E 59 pop ecx
0045AA5F 85C0 test eax, eax
0045AA61 59 pop ecx
0045AA62 74 0E je short 0045AA72 ; 難道改這裏可以變成developmode?不是吧,嘿嘿
在vs.txt中會顯示如下內容,只是一次登陸的內容
V C i t 7月23日 16:17:21 version release-2.1 mini 13 load in WinXP Professional Service Pack 2 (Build 2600)
V C i t 7月23日 16:17:24 mudnom 20
V C i t 7月23日 16:17:25 bare [email protected]
V C i t 7月23日 16:17:25 connect to 121.14.223.19 1117
V C i t 7月23日 16:17:28 development mod
一開始的破解版本顯示:
V C i t 7月23日 16:19:15 version release-2.1 mini 13 load in WinXP Professional Service Pack 2 (Build 2600)
V C i t 7月22日 17:12:17 mudnom 20
V C i t 7月22日 17:12:19 bare [email protected]
W C D A VSClient.exe check failed
V C i t 7月22日 17:15:56 version release-2.1 mini 13 load in WinXP Professional Service Pack 2 (Build 2600)