Posted by: moonbaby Dec 18 2003, 03:09 PM Homepage : http://www.southbaypc.com/download/ACSetup.exe Production : FirasE ( AutoConnect 1.01 ) Copyright by : Copyright © 1998-2003 All Rights Reserved Cracked File : AutoConnect.exe ( Microsoft Visual C++ 6.0 ) Type : Name/Serials Packed : N / A Crack Tool : OllyDbg 1.09d, W32dsmv10, Hex Workshop 4.1 Unpack Tool : N / A Carried Out : Get Correct Serials Note : None About AutoConnect 1.01 AutoConnect will automatically hit the Reconnect button for you when your ISP disconnects you from your Dial Up Connection. Dùng PeiD ta biết chương trình này không bị pack và được viết bằng Microsoft Visual C++ 6.0. Dùng W32dsm89 để tìm đoạn thông báo cho dễ . "Sorry, you have entered an incorrect " Sau đó dùng Olly chuyển đến địa chỉ đó, ta thấy thông báo nhập sai Serial. 00401CE1 |. 68 98624000 PUSH AUTOCONN.00406298 ; |Text = "Sorry, you have entered an incorrect registration code." Trace lên một chút, ta thấy có hai điểm để đặt BreakPoint. >>>> Set BreakPoint 00401C5F |. FF15 F4504000 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA 00401C7A |. FF15 F4504000 CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA >>>> Ở đây ta tiến hành hai quá trình, Patch và tìm số Serial đúng. >>>>>>>> Quá trình thứ nhất : PATCH >>>> Từ điểm set BreakPoint thứ hai, trace xuống chút xíu, ta thấy đoạn mã sau : 00401C8E |. E8 CC030000 CALL AUTOCONN.0040205F ; \AUTOCONN.0040205F 00401C93 |. 83C4 08 ADD ESP,8 < ==== 00401C96 |. 85C0 TEST EAX,EAX 00401C98 |. 74 40 JE SHORT AUTOCONN.00401CDA < == Patch here = > change JE to JNZ >> Sau khi chuyển thành JNZ ta thấy mã đổi thừ 74 40 thành 75 40. Dùng Hex Workshop 4.1 chỉnh sửa lại mã lệnh này ======== > Hoàn thành quá trình PATCH >>>>>>>> Quá trình thứ hai : SERIAL >>>> Từ điểm BreakPoint thứ hai trace xuống chút ta thấy mã lệnh sau. Trace thẳng vào đoạn này để chuẩn bị đến đoạn mã hoá chương trình. 00401C8E |. E8 CC030000 CALL AUTOCONN.0040205F ; \AUTOCONN.0040205F >>>> Trace thêm một đoạn ngắn ta thấy đọan này. Trace thẳng vào đây để đi đến đoạn mã xử lý chuỗi U nhập 0040207A |. E8 B5000000 CALL AUTOCONN.00402134 >> Nếu trace qua đoạn này thì sẽ thấy ngay Serial thực. >> Sau khi trace vào lệnh CALL trên, ta đến 00402134 /$ 55 PUSH EBP >>>> Giai đọan mã hoá chuỗi U nhập vào lần đầu tiên : >> Đầu tiên, nhảy đến địa chỉ 00402190, đến vòng lặp thứ hai, sẽ bắt đầu từ 00402181 0040217F |. EB 0F JMP SHORT AUTOCONN.00402190 00402181 |> 8B95 FCFEFFFF /MOV EDX,DWORD PTR SS:[EBP-104] 00402187 |. 83C2 01 |ADD EDX,1 < ==== Sau mỗi vòng lặp tăng EAX lên 1 == > biến đếm 0040218A |. 8995 FCFEFFFF |MOV DWORD PTR SS:[EBP-104],EDX 00402190 |> 8B85 FCFEFFFF MOV EAX,DWORD PTR SS:[EBP-104] 00402196 |. 3B85 F4FEFFFF |CMP EAX,DWORD PTR SS:[EBP-10C] 0040219C |. 73 22 |JNB SHORT AUTOCONN.004021C0 0040219E |. 8B4D 08 |MOV ECX,DWORD PTR SS:[EBP+8] 004021A1 |. 038D FCFEFFFF |ADD ECX,DWORD PTR SS:[EBP-104] 004021A7 |. 0FBE11 |MOVSX EDX,BYTE PTR DS:[ECX] >> Tại địa chỉ 40603C ta tìm được giá trị 1Fh ==== . đây là số mặc định 004021AA |. 0315 3C604000 |ADD EDX,DWORD PTR DS:[40603C] < ==== 1Fh 004021B0 |. 8B85 F8FEFFFF |MOV EAX,DWORD PTR SS:[EBP-108] 004021B6 |. 03C2 |ADD EAX,EDX 004021B8 |. 8985 F8FEFFFF |MOV DWORD PTR SS:[EBP-108],EAX 004021BE |.^ EB C1 \JMP SHORT AUTOCONN.00402181 >> >> Quá trình này được hiểu là : a- Lấy ký tự đầu tiên + 1Fh === > giá trị được lưu ở [EBP-108] b- Lấy kết quả trước đó + ( ký tự kế + 1Fh ) === > giá trị được lưu ở [EBP- 108] c- Kết quả cuỗi cùng được lưu ở [EBP-108] >> Chuỗi thứ nhất có định dạng là XXXX- 004021C6 |. 51 PUSH ECX ; /<%u> 004021C7 |. 68 2C634000 PUSH AUTOCONN.0040632C ; |Format = "%u-" >>>> Giai đoạn mã hoá chuỗi U nhập vào lần thứ hai : 004021ED |. EB 0F JMP SHORT AUTOCONN.004021FE 004021EF |> 8B85 FCFEFFFF /MOV EAX,DWORD PTR SS:[EBP-104] 004021F5 |. 83C0 01 |ADD EAX,1 004021F8 |. 8985 FCFEFFFF |MOV DWORD PTR SS:[EBP-104],EAX 004021FE |> 8B8D FCFEFFFF MOV ECX,DWORD PTR SS:[EBP-104] 00402204 |. 3B8D F4FEFFFF |CMP ECX,DWORD PTR SS:[EBP-10C] 0040220A |. 73 23 |JNB SHORT AUTOCONN.0040222F 0040220C |. 8B55 08 |MOV EDX,DWORD PTR SS:[EBP+8] 0040220F |. 0395 FCFEFFFF |ADD EDX,DWORD PTR SS:[EBP-104] 00402215 |. 0FBE02 |MOVSX EAX,BYTE PTR DS:[EDX] 00402218 |. 0FAF05 406040>|IMUL EAX,DWORD PTR DS:[406040] < ==== 0Ch 0040221F |. 8B8D F8FEFFFF |MOV ECX,DWORD PTR SS:[EBP-108] 00402225 |. 03C8 |ADD ECX,EAX 00402227 |. 898D F8FEFFFF |MOV DWORD PTR SS:[EBP-108],ECX 0040222D |.^ EB C0 \JMP SHORT AUTOCONN.004021EF >> >> Quá trình này được diễn tả lại như sau : d- Lấy ký tự đầu tiên x Ch === > giá trị được lưu ở [EBP-108] < == Khác đoạn đầu e- Lấy kết quả trước đó + ( ký tự kế x Ch ) === > giá trị được lưu ở [EBP- 108] f- Kết quả cuỗi cùng được lưu ở [EBP-108] >> Chuỗi thứ hai cũng có định dạng XXXX- 00402235 |. 52 PUSH EDX ; /<%u> 00402236 |. 68 30634000 PUSH AUTOCONN.00406330 ; |Format = "%u-" >> Kết hợp hai chuỗi lại với nhau, chúng có định dạng là XXXX-XXXX- 00402251 |. 51 PUSH ECX ; /StringToAdd 00402252 |. 8B55 0C MOV EDX,DWORD PTR SS:[EBP+C] ; | 00402255 |. 52 PUSH EDX ; |ConcatString 00402256 |. FF15 28504000 CALL DWORD PTR DS:[<&KERNEL32.lstrcatA>] ; \lstrcatA >>>> Giai đoạn mã hoá chuỗi U nhập vào lần thứ ba : 00402270 |. EB 0F JMP SHORT AUTOCONN.00402281 00402272 |> 8B85 FCFEFFFF /MOV EAX,DWORD PTR SS:[EBP-104] 00402278 |. 83C0 01 |ADD EAX,1 0040227B |. 8985 FCFEFFFF |MOV DWORD PTR SS:[EBP-104],EAX 00402281 |> 8B8D FCFEFFFF MOV ECX,DWORD PTR SS:[EBP-104] 00402287 |. 3B8D F4FEFFFF |CMP ECX,DWORD PTR SS:[EBP-10C] 0040228D |. 73 22 |JNB SHORT AUTOCONN.004022B1 0040228F |. 8B55 08 |MOV EDX,DWORD PTR SS:[EBP+8] 00402292 |. 0395 FCFEFFFF |ADD EDX,DWORD PTR SS:[EBP-104] 00402298 |. 0FBE02 |MOVSX EAX,BYTE PTR DS:[EDX] 0040229B |. 0305 44604000 |ADD EAX,DWORD PTR DS:[406044] < === 0Dh 004022A1 |. 8B8D F8FEFFFF |MOV ECX,DWORD PTR SS:[EBP-108] 004022A7 |. 03C8 |ADD ECX,EAX 004022A9 |. 898D F8FEFFFF |MOV DWORD PTR SS:[EBP-108],ECX 004022AF |.^ EB C1 \JMP SHORT AUTOCONN.00402272 >> >> Quá trình này được hiểu là : g- Lấy ký tự đầu tiên + 0Dh === > giá trị được lưu ở [EBP-108] < == Khác hai đoạn trước h- Lấy kết quả trước đó + ( ký tự kế + 0Dh ) === > giá trị được lưu ở [EBP- 108] i- Kết quả cuỗi cùng được lưu ở [EBP-108] >> Chuỗi thứ ba có định dạng là XXXX- 004022B7 |. 52 PUSH EDX ; /<%u> 004022B8 |. 68 34634000 PUSH AUTOCONN.00406334 ; |Format = "%u-" >> Kết hợp ba chuỗi có định dạng : XXXX-XXXX-XXXX- 004022D3 |. 51 PUSH ECX ; /StringToAdd 004022D4 |. 8B55 0C MOV EDX,DWORD PTR SS:[EBP+C] ; | 004022D7 |. 52 PUSH EDX ; |ConcatString 004022D8 |. FF15 28504000 CALL DWORD PTR DS:[<&KERNEL32.lstrcatA>] ; \lstrcatA >>>> Giai đoạn mã hoá chuối U nhập vào lần thứ tư : 004022F2 |. EB 0F JMP SHORT AUTOCONN.00402303 004022F4 |> 8B85 FCFEFFFF /MOV EAX,DWORD PTR SS:[EBP-104] 004022FA |. 83C0 01 |ADD EAX,1 004022FD |. 8985 FCFEFFFF |MOV DWORD PTR SS:[EBP-104],EAX 00402303 |> 8B8D FCFEFFFF MOV ECX,DWORD PTR SS:[EBP-104] 00402309 |. 3B8D F4FEFFFF |CMP ECX,DWORD PTR SS:[EBP-10C] 0040230F |. 73 23 |JNB SHORT AUTOCONN.00402334 00402311 |. 8B55 08 |MOV EDX,DWORD PTR SS:[EBP+8] 00402314 |. 0395 FCFEFFFF |ADD EDX,DWORD PTR SS:[EBP-104] 0040231A |. 0FBE02 |MOVSX EAX,BYTE PTR DS:[EDX] 0040231D |. 0FAF05 486040>|IMUL EAX,DWORD PTR DS:[406048] < === 20h 00402324 |. 8B8D F8FEFFFF |MOV ECX,DWORD PTR SS:[EBP-108] 0040232A |. 03C8 |ADD ECX,EAX 0040232C |. 898D F8FEFFFF |MOV DWORD PTR SS:[EBP-108],ECX 00402332 |.^ EB C0 \JMP SHORT AUTOCONN.004022F4 >> >> Quá trình này được diễn tả lại như sau : j- Lấy ký tự đầu tiên x 20h === > giá trị được lưu ở [EBP-108] < == Khác ba đoạn trước k- Lấy kết quả trước đó + ( ký tự kế x Ch ) === > giá trị được lưu ở [EBP- 108] l- Kết quả cuỗi cùng được lưu ở [EBP-108] >> Chuỗi thứ tư có định dạng là XXXX 0040233A |. 52 PUSH EDX ; /<%u> 0040233B |. 68 38634000 PUSH AUTOCONN.00406338 ; |Format = "%u" >> Kết hợp bốn chuỗi có định dạng là XXXX-XXXX-XXXX-XXXX 00402356 |. 51 PUSH ECX ; /StringToAdd 00402357 |. 8B55 0C MOV EDX,DWORD PTR SS:[EBP+C] ; | 0040235A |. 52 PUSH EDX ; |ConcatString 0040235B |. FF15 28504000 CALL DWORD PTR DS:[<&KERNEL32.lstrcatA>] ; \lstrcatA >>>>>>>> Vậy là ta đã hoàn toàn hiểu được cách tạo Serial của chương trình này. User : Moonbaby Serial : 1071-9876-927-26336 User : HVA-CrAkErTeAm Serial : 1597-13956-1345-37216 . sau : 00 401 C8E |. E8 CC0 300 00 CALL AUTOCONN .00 402 05F ; AUTOCONN .00 402 05F 00 401 C93 |. 83C4 08 ADD ESP,8 < ==== 00 401 C96 |. 85C0 TEST EAX,EAX 00 401 C98 |. 74 40 JE SHORT AUTOCONN .00 401 CDA. chỉ 00 40 219 0, đến vòng lặp thứ hai, sẽ bắt đầu từ 00 40 218 1 00 40 217 F |. EB 0F JMP SHORT AUTOCONN .00 40 219 0 00 40 218 1 |> 8B95 FCFEFFFF /MOV EDX,DWORD PTR SS:[EBP - 10 4] 00 40 218 7 |. 83C2 01 |ADD. SS:[EBP - 10 C] 00 40 219 C |. 73 22 |JNB SHORT AUTOCONN .00 402 1C0 00 40 219 E |. 8B4D 08 |MOV ECX,DWORD PTR SS:[EBP+8] 00 402 1A1 |. 03 8D FCFEFFFF |ADD ECX,DWORD PTR SS:[EBP - 10 4] 00 402 1A7 |. 0FBE 11 |MOVSX