XEM THỐNG KÊ ĐIỂM CHUẨN VÀO LỚP 10 CÁC TỈNH
Chắc hẳn các bạn đã từng gặp những phần mềm dạng Sharewere (chia sẻ) hay Trial. Đây là những phần mềm cho phép chúng ta dùng thử trong 1 khoảng thời gian định trước (chẳng hạn 15 ngày, 30 ngày, …). Sau khoảng thời gian đó, mỗi khi bạn định chạy nó để dùng tiếp thì nó sẽ bắn cho bạn 1 cái thông báo kiểu như: “Thời hạn sử dụng đã hết!”, “Hãy đăng ký để sử dụng tiếp”, … (Dịch ra tiếng Việt là vậy ). Đăng ký nghĩa là bạn phải điền vào form Register của nó những thông tin (chúng ta gọi chung là Key (nghĩa là “chìa”)) mà nếu phù hợp, chương trình sẽ tự unlock (mở khóa) để xóa những giới hạn của chương trình (như việc giới hạn thời gian sử dụng nói ở trên). Làm sao để có Key? Chúng ta có 2 cách:
+ 1 là mua của nhà sản xuất (trang chủ của phần mềm đó)
+ 2 là tự tìm ra nó
Với cách thứ 1, chúng ta phải bỏ tiền ra mua. N với dân Việt Nam thì tiền ăn còn chưa đủ, làm sao có tiền để mua soft mà giá cả toàn tính bằng $ như vậy? Cũng có cách khác là dùng tiền chùa để mua. N cách này chưa bàn ở đây (dễ bị bóc lịch như chơi ). Vì vậy, cách 1 bạn đừng quan tâm
Cách thứ 2 đối với chúng ta an toàn hơn rất nhiều. Chúng ta 0 cần online cũng có thể kiếm được Key để cho soft chạy, vì thế chả gây sự gì với các anh CA cả Chúng ta cũng có cách để 0 cần dùng Key mà soft vẫn chạy như đã đăng ký vậy (cái này gọi là patching). Cả việc này và việc tìm Key chúng ta gọi chung là Cracking software (nghĩa là bẻ khóa phần mềm).
Như vậy là bạn đã hiểu sơ qua công việc của 1 Cracker (người bẻ khóa). Tiếp theo chúng ta cần phải trang bị Tools (các công cụ) cần dùng cho cracker.
+ Đầu tiên chúng ta cần có 1 công cụ để “đánh hơi” xem software được viết bằng chương trình gì hoặc có packed (bị nén), protected (được bảo vệ) hay 0? Các bạn hãy tải phần mềm PEiD về: http://peid.has.it/
– Thứ 2 là 1 chương trình Debug (gỡ rối) gọi là Debuggers. Các chương trình này dùng để Programmers theo dõi việc lập trình của họ. N chúng ta sẽ dùng nó để crack các soft Trước đây thì tool thường được dùng là SoftIce n bây giờ để cho công việc được trực quan, chúng ta dùng OllyDbg. Các bạn tải ở: http://www.ollydbg.de/ Bản mới nhất hiện nay là 1.10. OllyDbg còn được trang bị thêm bằng các Plugin. Khi các bạn download ở trang chủ thì trong đó đã có sẵn 1 số plugin rùi. Những plugin khác tui sẽ nói sau.
Có rất nhiều tool hỗ trợ cho việc Cracking, n để dễ cho các bạn mới bắt đầu, chúng ta tạm thời nghiên cứu 2 tool trên
Sau khi download tools cần thiết, các bạn giải nén và đưa chúng vào 1 thư mục nào đó (đừng cho vào ổ chứa hệ điều hành) ví dụ “D:\Cracking\” chẳng hạn.
Chạy PEiD, chọn Options, để mặc định các lựa chọn, chỉ click chọn thêm “Register Shell Extensions”. Điều này sẽ giúp chúng ta tạo 1 command trên menu chuột phải. Xong chọn “Save” và thoát PEiD.
Chạy OllyDbg, có thông báo gì nhấn Yes, nhấn tổ hợp Alt+O, vào tab Exceptions và click chọn tất cả; nhìn xuống nhấn “Add range”, trong Combobox thứ 1 chọn C0000001, trong Combobox thứ 2 chọn C0009898. Xong OK 2 lần để thoát ra. Tiếp tục vào Options, chọn “Add to Explorer”—–>”Add OllyDbg to menu in Windows Explorer”—–>Done. Xong thoát khỏi OllyDbg. Lúc này trong thư mục OllyDbg có 1 file “ollydbg.ini”. Các bạn mở file này lên, cuộn xuống dưới tìm dòng “Custom[0]=C0000001,C0009898”. Các bạn hãy đổi C0000001 thành 00000000 và đổi C0009898 thành FFFFFFFF. Xong lưu lại file “ollydbg.ini”.
Chúng ta đã sẵn sàng cho việc crack
Ngoài ra, việc biết ngôn ngữ lập trình Asm (Assembly) rất quan trọng. Bởi vì OllyDbg sẽ dịch file cần crack ra mã Asm, và nhìn vào đoạn mã Asm, chúng ta sẽ có cách để bẻ khóa file đó. Asm là 1 ngôn ngữ lập trình bậc thấp, rất mạnh. Nó được dạy trong chương trình chính quy. Nếu chuyên ngành của bạn là CNTT thì sẽ rất may mắn vì bạn sẽ được dạy dỗ đàng hoàng về ngôn ngữ này. Tuy nhiên nếu bạn chưa biết tí gì về Asm thì cũng đừng quá lo lắng, bạn vẫn có thể crack ầm ầm Chỉ cần hiểu 1 số lệnh quan trọng. Tui sẽ nói trong quá trình crack cụ thể.
/*—————————————-*\
Để minh họa cho việc cracking software, chúng ta sẽ cùng xử 1 game của PopCap. Đây là trang có nhiều game hay. Dán link này vào 1 chương trình download manager nào đó để tải về game Mummy Maze Deluxe 1.1:
/*—————————————-*\
Để minh họa cho việc cracking software, chúng ta sẽ cùng xử 1 game của PopCap. Đây là trang có nhiều game hay. Dán link này vào 1 chương trình download manager nào đó để tải về game Mummy Maze Deluxe 1.1:
http://popcap.com/installer_download_ec.php?url=MummyMazeSetup.exe&oid=9
Sau khi tải về và cài đặt xong, chạy thử chương trình, bạn sẽ thấy các dấu hiệu của 1 phần mềm shareware như là:
Sau khi tải về và cài đặt xong, chạy thử chương trình, bạn sẽ thấy các dấu hiệu của 1 phần mềm shareware như là:
– Có dòng “UNREGISTERED VERSION”
– Có dòng “Register now!”
– Bị giới hạn số lần chơi và đòi phải đăng ký để tiếp tục chơi.
– Có dòng “Register now!”
– Bị giới hạn số lần chơi và đòi phải đăng ký để tiếp tục chơi.
Các bạn nhấn “Register now!” và điền Name và Code vào. Chẳng hạn ở đây tui điền:
Name: hvh0904/KT44
Code: hbb506
Code: hbb506
Xong nhấn REGISTER thì bạn sẽ nhận được thông báo như sau: “The registration number you entered is not valid for that name”. Hê hê, chúng ta nhớ lấy dòng thông báo này để dùng sau.
Thực ra thì có nhiều cách để crack game này, n để tiện cho các bạn newbie, dùng cách này cho dễ hiểu. Việc chúng ta phải làm bây giờ là bắt cái game này phải đồng ý bất cứ Name và Code nào mà chúng ta điền vào (0 bắn cái thông báo lỗi kia nữa).
Bây giờ thoát game, chuột phải lên biểu tượng của nó trên Desktop, chọn “Scan with PEiD”. PEiD sẽ báo game này coded bằng “Microsoft Visual C++ 6.0”. Như vậy là game này 0 bị pack hay protected.
Thoát PEiD, chuột phải lên biểu tượng game trên Desktop, chọn “Open with OllyDbg”. OllyDbg sẽ load nó lên (file “\Program Files\PopCap Games\Mummy Maze Deluxe\WinMM.exe”). Các bạn chờ 1 chút cho OllyDbg dịch file này ra mã ASM. Xong chuột phải lên CPU Window, chọn “Search for”—–>”All referenced text strings”. 1 cửa sổ mới bắn lên, các bạn chuột phải chọn “Search for text”. Gõ vào textbox dòng thông báo lỗi mà chúng ta đã ghi nhớ ở trên (“The registration number you entered is not valid for that name”). Tuy nhiên các bạn chỉ cần gõ vào textbox vài chữ đầu, chẳng hạn “the registration”, nhớ bỏ chọn “Case sensitive và chọn “Entire scope”, xong OK. Nó sẽ tìm cho chúng ta dòng text có nội dung như trên và hightlight dòng đó. Click đôi vào nó sẽ đưa chúng ta ra CPU Window:
Thực ra thì có nhiều cách để crack game này, n để tiện cho các bạn newbie, dùng cách này cho dễ hiểu. Việc chúng ta phải làm bây giờ là bắt cái game này phải đồng ý bất cứ Name và Code nào mà chúng ta điền vào (0 bắn cái thông báo lỗi kia nữa).
Bây giờ thoát game, chuột phải lên biểu tượng của nó trên Desktop, chọn “Scan with PEiD”. PEiD sẽ báo game này coded bằng “Microsoft Visual C++ 6.0”. Như vậy là game này 0 bị pack hay protected.
Thoát PEiD, chuột phải lên biểu tượng game trên Desktop, chọn “Open with OllyDbg”. OllyDbg sẽ load nó lên (file “\Program Files\PopCap Games\Mummy Maze Deluxe\WinMM.exe”). Các bạn chờ 1 chút cho OllyDbg dịch file này ra mã ASM. Xong chuột phải lên CPU Window, chọn “Search for”—–>”All referenced text strings”. 1 cửa sổ mới bắn lên, các bạn chuột phải chọn “Search for text”. Gõ vào textbox dòng thông báo lỗi mà chúng ta đã ghi nhớ ở trên (“The registration number you entered is not valid for that name”). Tuy nhiên các bạn chỉ cần gõ vào textbox vài chữ đầu, chẳng hạn “the registration”, nhớ bỏ chọn “Case sensitive và chọn “Entire scope”, xong OK. Nó sẽ tìm cho chúng ta dòng text có nội dung như trên và hightlight dòng đó. Click đôi vào nó sẽ đưa chúng ta ra CPU Window:
————————————————————————–
0041EF0E 90 NOP
0041EF0F 90 NOP
0041EF10 /$ 6A FF PUSH -1
0041EF12 |. 68 A8DE4700 PUSH WinMM.0047DEA8 ; SE handler installation
0041EF17 |. 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
0041EF1D |. 50 PUSH EAX
0041EF1E |. 64:8925 000000>MOV DWORD PTR FS:[0],ESP
0041EF25 |. 83EC 38 SUB ESP,38
0041EF28 |. 8A4424 03 MOV AL,BYTE PTR SS:[ESP+3]
0041EF2C |. 53 PUSH EBX
0041EF2D |. 55 PUSH EBP
0041EF2E |. 56 PUSH ESI
0041EF2F |. 894C24 10 MOV DWORD PTR SS:[ESP+10],ECX
0041EF33 |. 57 PUSH EDI
0041EF34 |. 884424 38 MOV BYTE PTR SS:[ESP+38],AL
0041EF38 |. BF D0224900 MOV EDI,WinMM.004922D0 ; ASCII “OK”
0041EF3D |. 83C9 FF OR ECX,FFFFFFFF
0041EF40 |. 33C0 XOR EAX,EAX
0041EF42 |. 33DB XOR EBX,EBX
0041EF44 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0041EF46 |. F7D1 NOT ECX
0041EF48 |. 49 DEC ECX
0041EF49 |. 895C24 3C MOV DWORD PTR SS:[ESP+3C],EBX
0041EF4D |. 51 PUSH ECX
0041EF4E |. 68 D0224900 PUSH WinMM.004922D0 ; ASCII “OK”
0041EF53 |. 8D4C24 40 LEA ECX,DWORD PTR SS:[ESP+40]
0041EF57 |. 895C24 48 MOV DWORD PTR SS:[ESP+48],EBX
0041EF5B |. 895C24 4C MOV DWORD PTR SS:[ESP+4C],EBX
0041EF5F |. E8 9C40FEFF CALL WinMM.00403000
0041EF64 |. 8A4C24 13 MOV CL,BYTE PTR SS:[ESP+13]
0041EF68 |. 53 PUSH EBX
0041EF69 |. 884C24 1C MOVa BYTE PTR SS:[ESP+1C],CL
0041EF6D |. 8D4C24 1C LEA ECX,DWORD PTR SS:[ESP+1C]
0041EF71 |. 895C24 54 MOV DWORD PTR SS:[ESP+54],EBX
0041EF75 |. E8 362AFEFF CALL WinMM.004019B0
0041EF7A |. BF 38444900 MOV EDI,WinMM.00494438 ; ASCII “The registration number you entered is not valid for that name.
0041EF0E 90 NOP
0041EF0F 90 NOP
0041EF10 /$ 6A FF PUSH -1
0041EF12 |. 68 A8DE4700 PUSH WinMM.0047DEA8 ; SE handler installation
0041EF17 |. 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
0041EF1D |. 50 PUSH EAX
0041EF1E |. 64:8925 000000>MOV DWORD PTR FS:[0],ESP
0041EF25 |. 83EC 38 SUB ESP,38
0041EF28 |. 8A4424 03 MOV AL,BYTE PTR SS:[ESP+3]
0041EF2C |. 53 PUSH EBX
0041EF2D |. 55 PUSH EBP
0041EF2E |. 56 PUSH ESI
0041EF2F |. 894C24 10 MOV DWORD PTR SS:[ESP+10],ECX
0041EF33 |. 57 PUSH EDI
0041EF34 |. 884424 38 MOV BYTE PTR SS:[ESP+38],AL
0041EF38 |. BF D0224900 MOV EDI,WinMM.004922D0 ; ASCII “OK”
0041EF3D |. 83C9 FF OR ECX,FFFFFFFF
0041EF40 |. 33C0 XOR EAX,EAX
0041EF42 |. 33DB XOR EBX,EBX
0041EF44 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0041EF46 |. F7D1 NOT ECX
0041EF48 |. 49 DEC ECX
0041EF49 |. 895C24 3C MOV DWORD PTR SS:[ESP+3C],EBX
0041EF4D |. 51 PUSH ECX
0041EF4E |. 68 D0224900 PUSH WinMM.004922D0 ; ASCII “OK”
0041EF53 |. 8D4C24 40 LEA ECX,DWORD PTR SS:[ESP+40]
0041EF57 |. 895C24 48 MOV DWORD PTR SS:[ESP+48],EBX
0041EF5B |. 895C24 4C MOV DWORD PTR SS:[ESP+4C],EBX
0041EF5F |. E8 9C40FEFF CALL WinMM.00403000
0041EF64 |. 8A4C24 13 MOV CL,BYTE PTR SS:[ESP+13]
0041EF68 |. 53 PUSH EBX
0041EF69 |. 884C24 1C MOVa BYTE PTR SS:[ESP+1C],CL
0041EF6D |. 8D4C24 1C LEA ECX,DWORD PTR SS:[ESP+1C]
0041EF71 |. 895C24 54 MOV DWORD PTR SS:[ESP+54],EBX
0041EF75 |. E8 362AFEFF CALL WinMM.004019B0
0041EF7A |. BF 38444900 MOV EDI,WinMM.00494438 ; ASCII “The registration number you entered is not valid for that name.
Make sure the name and registration number are entered correctly.”
0041EF7F |. 83C9 FF OR ECX,FFFFFFFF
0041EF82 |. 33C0 XOR EAX,EAX
0041EF84 |. 6A 01 PUSH 1
0041EF86 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0041EF88 |. F7D1 NOT ECX
———————————————————————————-
0041EF7F |. 83C9 FF OR ECX,FFFFFFFF
0041EF82 |. 33C0 XOR EAX,EAX
0041EF84 |. 6A 01 PUSH 1
0041EF86 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0041EF88 |. F7D1 NOT ECX
———————————————————————————-
Đây chính là đoạn code liên quan đến thông báo lỗi khi chúng ta đăng ký. Các bạn click chuột lên đầu đoạn code này tại 0041EF10 để xem đoạn code này được gọi từ địa chỉ nào. Nhìn xuống cửa sổ Information dưới cửa sổ CPU, thấy thông báo “Local calls from 00420610, 00428F3C”. Như vậy có 2 địa chỉ gọi đến đoạn code thông báo lỗi là 00420610 và 00428F3C. Chuột phải lên dòng lệnh tại 0041EF10 và chọn “Go to”—–>”CALL from 00420610″, chúng ta sẽ đến đoạn code:
————————————————————————–
004205FF . C68424 D401000>MOV BYTE PTR SS:[ESP+1D4],3
00420607 . FF50 3C CALL DWORD PTR DS:[EAX+3C]
0042060A . 84C0 TEST AL,AL
0042060C . 75 09 JNZ SHORT WinMM.00420617
0042060E . 8BCD MOV ECX,EBP
00420610 . E8 FBE8FFFF CALL WinMM.0041EF10
00420615 . EB 60 JMP SHORT WinMM.00420677
———————————————————————–
004205FF . C68424 D401000>MOV BYTE PTR SS:[ESP+1D4],3
00420607 . FF50 3C CALL DWORD PTR DS:[EAX+3C]
0042060A . 84C0 TEST AL,AL
0042060C . 75 09 JNZ SHORT WinMM.00420617
0042060E . 8BCD MOV ECX,EBP
00420610 . E8 FBE8FFFF CALL WinMM.0041EF10
00420615 . EB 60 JMP SHORT WinMM.00420677
———————————————————————–
Click chuột lên dòng lệnh tại 00420607 và nhấn F2, địa chỉ này chuyển sang màu đỏ (nghĩa là chúng ta đã đặt 1 breakpoint (điểm ngắt)). Mục đích là khi chúng ta tiến hành đăng ký thì chương trình sẽ đóng băng tại điểm ngắt này. Xong quay lại địa chỉ 0041EF10 bằng cách nhấn dấu “-“. Tương tự, chuột phải lên dòng lệnh tại 0041EF10 và chọn “Go to”—–>”CALL from 00428F3C”, chúng ta sẽ đến đoạn code:
—————————————————————
00428F2D . C64424 4C 02 MOV BYTE PTR SS:[ESP+4C],2
00428F32 . FF52 3C CALL DWORD PTR DS:[EDX+3C]
00428F35 . 84C0 TEST AL,AL
00428F37 . 75 0A JNZ SHORT WinMM.00428F43
00428F39 . 8B4D 78 MOV ECX,DWORD PTR SS:[EBP+78]
00428F3C . E8 CF5FFFFF CALL WinMM.0041EF10
00428F41 . EB 4F JMP SHORT WinMM.00428F92
00428F43 > 8B0D 24134800 MOV ECX,DWORD PTR DS:[481324]
———————————————————————-
00428F2D . C64424 4C 02 MOV BYTE PTR SS:[ESP+4C],2
00428F32 . FF52 3C CALL DWORD PTR DS:[EDX+3C]
00428F35 . 84C0 TEST AL,AL
00428F37 . 75 0A JNZ SHORT WinMM.00428F43
00428F39 . 8B4D 78 MOV ECX,DWORD PTR SS:[EBP+78]
00428F3C . E8 CF5FFFFF CALL WinMM.0041EF10
00428F41 . EB 4F JMP SHORT WinMM.00428F92
00428F43 > 8B0D 24134800 MOV ECX,DWORD PTR DS:[481324]
———————————————————————-
Click chuột lên dòng lệnh tại 00428F32, nhấn F2. Xong nhấn F9 để run chương trình, vào cửa sổ game, click chọn “Register now!”. Điền vào Name và Code. Ở đây tui điền Name: hvh0904/KT44 và Code: hbb506. Xong nhấn REGISTER. Hê hê, chương trình sẽ đóng băng tại 00428F32. Tại đây sẽ gọi hàm check Key với đối số là AL và nếu đúng sẽ trả về AL=1, nếu sai trả về AL=0. Như vậy chúng ta cần phải crack code sao cho AL luôn trả về bằng 1. Nhấn F7 để vào hàm, kéo xuống dưới tìm lệnh “RETN 8” (Return):
—————————————————————–
00435F05 . 8B8C24 D000000>MOV ECX,DWORD PTR SS:[ESP+D0]
00435F0C . 8A4424 13 MOV AL,BYTE PTR SS:[ESP+13]
00435F10 . 5F POP EDI
00435F11 . 5E POP ESI
00435F12 . 5D POP EBP
00435F13 . 5B POP EBX
00435F14 . 64:890D 000000>MOV DWORD PTR FS:[0],ECX
00435F1B . 81C4 CC000000 ADD ESP,0CC
00435F21 . C2 0800 RETN 8
00435F24 90 NOP
——————————————————————
00435F05 . 8B8C24 D000000>MOV ECX,DWORD PTR SS:[ESP+D0]
00435F0C . 8A4424 13 MOV AL,BYTE PTR SS:[ESP+13]
00435F10 . 5F POP EDI
00435F11 . 5E POP ESI
00435F12 . 5D POP EBP
00435F13 . 5B POP EBX
00435F14 . 64:890D 000000>MOV DWORD PTR FS:[0],ECX
00435F1B . 81C4 CC000000 ADD ESP,0CC
00435F21 . C2 0800 RETN 8
00435F24 90 NOP
——————————————————————
Tại địa chỉ 00435F0C, thanh ghi AL được nhận giá trị bằng lệnh:
MOV AL,BYTE PTR SS:[ESP+13]
Chúng ta đang cần cho AL luôn bằng 1, vậy thì hãy thay lệnh này bằng lệnh:
MOV AL,1
bằng cách click đúp vào dòng lệnh tại 00435F0C, gõ vào textbox “MOV AL,1” (0 có dấu ngoặc kép) và hãy chắc chắn rằng “Fill with NOP’s” được chọn. Lúc này đoạn code sẽ được sửa thành:
MOV AL,BYTE PTR SS:[ESP+13]
Chúng ta đang cần cho AL luôn bằng 1, vậy thì hãy thay lệnh này bằng lệnh:
MOV AL,1
bằng cách click đúp vào dòng lệnh tại 00435F0C, gõ vào textbox “MOV AL,1” (0 có dấu ngoặc kép) và hãy chắc chắn rằng “Fill with NOP’s” được chọn. Lúc này đoạn code sẽ được sửa thành:
————————————–
00435F0C B0 01 MOV AL,1
00435F0E 90 NOP
00435F0F 90 NOP
—————————————-
00435F0C B0 01 MOV AL,1
00435F0E 90 NOP
00435F0F 90 NOP
—————————————-
Bôi đen 4 bytes đỏ này rùi chọn “Copy to executable”—–>”Selection”. Đóng cửa sổ mới hiện ra, chọn Yes nếu có thông báo. Chọn nơi lưu file (tốt nhất là ghi đè lên file cũ) và save file lại. Bây giờ file mới vừa lưu là file đã crack. Các bạn có thể kiểm chứng bằng cách nhấn F9 để run game. Cửa sổ Register biến mất, màn hình chính hiện lên dòng “Thanks for registering!” và “REGISTERED VERSION”. Thoát khỏi Olly và run game. Lúc này nó đã trở thành phiên bản được đăng ký với đầy đủ các function.
Vậy là chúng ta đã crack xong game “Mummy Maze Deluxe 1.1” của PopCap Games
/*———————————cai nay copy ko biet co lam duco ko———-*\
KeyGen PDF Split/PDF Merge 2. 5
Vậy là chúng ta đã crack xong game “Mummy Maze Deluxe 1.1” của PopCap Games
/*———————————cai nay copy ko biet co lam duco ko———-*\
KeyGen PDF Split/PDF Merge 2. 5
——————————————————————————–
Chúng ta sẽ tạo KeyGen cho soft này
Download tại: http://www.adultpdf.com/
Chạy thử chương trình. Nó xuất hiện ngay cửa sổ đòi đăng ký bản FULL. Gõ đại vài ký tự vào đó và nhấn OK. Nó bắn thông báo “Series number error …”. Vì 0 đúng Key
Hộp thông báo nhìn giống như MessageBox API của Windows
Dùng PEiD scan thấy: “ASPack 2.12 -> Alexey Solodovnikov”
Như vậy soft này packed by ASPack 2.12
Chúng ta có thể UnPack nó bằng Tool nhưng ở đây ta sẽ 0 cần UnPack thành file mà chỉ UnPack in Memory để thấy được các hàm API mà nó sử dụng (tìm hàm MessageBox)
Load soft lên bằng OllyDbg. Có thông báo gì nhấn OK và No
Chúng ta sẽ đứng trên dòng lệnh PUSHAD. F8 1 cái để thực hiện lệnh này. Lúc này chuột phải vào thanh ghi ESP bên tay phải (Cửa sổ Registers) chọn “Follow in Dump”
Nhìn xuống góc trái dưới (cửa sổ Dump). Click chọn vào Byte đầu tiên, chuột phải chọn “Breakpoint—–>Hardware, on access—–>Byte”
F9 để run soft. OllyDbg sẽ đóng băng tại điểm ngắt vừa đặt (tại dòng lệnh JNZ). F8 đến lúc thực hiện xong lệnh RETN
Vào menu “Debug—–>Hardware breakpoints” và nhấn “Delete 1”
Giờ thì chuột phải vào CPU Window và chọn “Search for—–>All intermodular calls”
Click vào tab “Destination” để Olly sắp xếp tên hàm theo thứ tự. Tìm hàm MessageBoxA. Chuột phải vào hàm chọn “Set breakpoint on every call to MessageBoxA”
F9 để run soft. Cửa sổ Register của soft hiện ra như lúc ta chạy thử ban đầu. Lại gõ đại vài ký tự vào, chẳng hạn “123456”. Nhấn OK để Reg
Hê hê, Olly sẽ đóng băng tại hàm MessageBoxA:
Download tại: http://www.adultpdf.com/
Chạy thử chương trình. Nó xuất hiện ngay cửa sổ đòi đăng ký bản FULL. Gõ đại vài ký tự vào đó và nhấn OK. Nó bắn thông báo “Series number error …”. Vì 0 đúng Key
Hộp thông báo nhìn giống như MessageBox API của Windows
Dùng PEiD scan thấy: “ASPack 2.12 -> Alexey Solodovnikov”
Như vậy soft này packed by ASPack 2.12
Chúng ta có thể UnPack nó bằng Tool nhưng ở đây ta sẽ 0 cần UnPack thành file mà chỉ UnPack in Memory để thấy được các hàm API mà nó sử dụng (tìm hàm MessageBox)
Load soft lên bằng OllyDbg. Có thông báo gì nhấn OK và No
Chúng ta sẽ đứng trên dòng lệnh PUSHAD. F8 1 cái để thực hiện lệnh này. Lúc này chuột phải vào thanh ghi ESP bên tay phải (Cửa sổ Registers) chọn “Follow in Dump”
Nhìn xuống góc trái dưới (cửa sổ Dump). Click chọn vào Byte đầu tiên, chuột phải chọn “Breakpoint—–>Hardware, on access—–>Byte”
F9 để run soft. OllyDbg sẽ đóng băng tại điểm ngắt vừa đặt (tại dòng lệnh JNZ). F8 đến lúc thực hiện xong lệnh RETN
Vào menu “Debug—–>Hardware breakpoints” và nhấn “Delete 1”
Giờ thì chuột phải vào CPU Window và chọn “Search for—–>All intermodular calls”
Click vào tab “Destination” để Olly sắp xếp tên hàm theo thứ tự. Tìm hàm MessageBoxA. Chuột phải vào hàm chọn “Set breakpoint on every call to MessageBoxA”
F9 để run soft. Cửa sổ Register của soft hiện ra như lúc ta chạy thử ban đầu. Lại gõ đại vài ký tự vào, chẳng hạn “123456”. Nhấn OK để Reg
Hê hê, Olly sẽ đóng băng tại hàm MessageBoxA:
Code:
0040D672 50 PUSH EAX
0040D673 E8 A0631600 CALL pdfspme_.00573A18 ; JMP to USER32.MessageBoxA
0040D678 FF4D EC DEC DWORD PTR SS:[EBP-14]
0040D67B 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0040D67E BA 02000000 MOV EDX,2
0040D683 E8 24241500 CALL pdfspme_.0055FAAC
0040D673 E8 A0631600 CALL pdfspme_.00573A18 ; JMP to USER32.MessageBoxA
0040D678 FF4D EC DEC DWORD PTR SS:[EBP-14]
0040D67B 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0040D67E BA 02000000 MOV EDX,2
0040D683 E8 24241500 CALL pdfspme_.0055FAAC
Nhìn lên phía trên hàm này ta thấy có 1 lệnh nhảy kiểu như đã nói ở phần crack game của PopCap:
Code:
0040D627 E8 40040000 CALL pdfspme_.0040DA6C
0040D62C 84C0 TEST AL,AL
0040D62E 75 67 JNZ SHORT pdfspme_.0040D697
0040D62C 84C0 TEST AL,AL
0040D62E 75 67 JNZ SHORT pdfspme_.0040D697
Tại 0040D627 là lệnh CALL Function check Key và sẽ trả về AL=1 nếu Key đúng hoặc trả về AL=0 nếu Key sai
Vậy chúng ta đặt tại đó 1 BreakPoint bằng cách nhấn F2.
F9 để run soft. Thông báo Key sai sẽ bắn ra. Cứ OK. Xong nhấn OK để Reg lại lần nữa. Olly sẽ đóng băng tại 0040D627
F7 để vào hàm. Dưới đây là toàn bộ code của hàm check Key:
Vậy chúng ta đặt tại đó 1 BreakPoint bằng cách nhấn F2.
F9 để run soft. Thông báo Key sai sẽ bắn ra. Cứ OK. Xong nhấn OK để Reg lại lần nữa. Olly sẽ đóng băng tại 0040D627
F7 để vào hàm. Dưới đây là toàn bộ code của hàm check Key:
Code:
0040DA6C 56 PUSH ESI
0040DA6D 8BF2 MOV ESI,EDX
0040DA6F 85F6 TEST ESI,ESI
0040DA71 75 04 JNZ SHORT pdfspme_.0040DA77
0040DA73 33C0 XOR EAX,EAX
0040DA75 5E POP ESI
0040DA76 C3 RETN
0040DA77 803E 00 CMP BYTE PTR DS:[ESI],0
0040DA7A 75 04 JNZ SHORT pdfspme_.0040DA80
0040DA7C 33C0 XOR EAX,EAX
0040DA7E 5E POP ESI
0040DA7F C3 RETN
0040DA80 56 PUSH ESI
0040DA81 E8 72221400 CALL pdfspme_.0054FCF8
0040DA86 59 POP ECX
0040DA87 83F8 10 CMP EAX,10
0040DA8A 74 04 JE SHORT pdfspme_.0040DA90
0040DA8C 33C0 XOR EAX,EAX
0040DA8E 5E POP ESI
0040DA8F C3 RETN
0040DA90 33D2 XOR EDX,EDX
0040DA92 8BC6 MOV EAX,ESI
0040DA94 0FBE08 MOVSX ECX,BYTE PTR DS:[EAX]
0040DA97 83F9 41 CMP ECX,41
0040DA9A 7C 05 JL SHORT pdfspme_.0040DAA1
0040DA9C 83F9 5A CMP ECX,5A
0040DA9F 7E 04 JLE SHORT pdfspme_.0040DAA5
0040DAA1 33C0 XOR EAX,EAX
0040DAA3 5E POP ESI
0040DAA4 C3 RETN
0040DAA5 42 INC EDX
0040DAA6 40 INC EAX
0040DAA7 83FA 10 CMP EDX,10
0040DAAA ^7C E8 JL SHORT pdfspme_.0040DA94
0040DAAC 0FBE56 06 MOVSX EDX,BYTE PTR DS:[ESI+6]
0040DAB0 0FBE4E 0B MOVSX ECX,BYTE PTR DS:[ESI+B]
0040DAB4 03D1 ADD EDX,ECX
0040DAB6 81FA 9B000000 CMP EDX,9B
0040DABC 74 04 JE SHORT pdfspme_.0040DAC2
0040DABE 33C0 XOR EAX,EAX
0040DAC0 5E POP ESI
0040DAC1 C3 RETN
0040DAC2 B0 01 MOV AL,1
0040DAC4 5E POP ESI
0040DAC5 C3 RETN
0040DA6D 8BF2 MOV ESI,EDX
0040DA6F 85F6 TEST ESI,ESI
0040DA71 75 04 JNZ SHORT pdfspme_.0040DA77
0040DA73 33C0 XOR EAX,EAX
0040DA75 5E POP ESI
0040DA76 C3 RETN
0040DA77 803E 00 CMP BYTE PTR DS:[ESI],0
0040DA7A 75 04 JNZ SHORT pdfspme_.0040DA80
0040DA7C 33C0 XOR EAX,EAX
0040DA7E 5E POP ESI
0040DA7F C3 RETN
0040DA80 56 PUSH ESI
0040DA81 E8 72221400 CALL pdfspme_.0054FCF8
0040DA86 59 POP ECX
0040DA87 83F8 10 CMP EAX,10
0040DA8A 74 04 JE SHORT pdfspme_.0040DA90
0040DA8C 33C0 XOR EAX,EAX
0040DA8E 5E POP ESI
0040DA8F C3 RETN
0040DA90 33D2 XOR EDX,EDX
0040DA92 8BC6 MOV EAX,ESI
0040DA94 0FBE08 MOVSX ECX,BYTE PTR DS:[EAX]
0040DA97 83F9 41 CMP ECX,41
0040DA9A 7C 05 JL SHORT pdfspme_.0040DAA1
0040DA9C 83F9 5A CMP ECX,5A
0040DA9F 7E 04 JLE SHORT pdfspme_.0040DAA5
0040DAA1 33C0 XOR EAX,EAX
0040DAA3 5E POP ESI
0040DAA4 C3 RETN
0040DAA5 42 INC EDX
0040DAA6 40 INC EAX
0040DAA7 83FA 10 CMP EDX,10
0040DAAA ^7C E8 JL SHORT pdfspme_.0040DA94
0040DAAC 0FBE56 06 MOVSX EDX,BYTE PTR DS:[ESI+6]
0040DAB0 0FBE4E 0B MOVSX ECX,BYTE PTR DS:[ESI+B]
0040DAB4 03D1 ADD EDX,ECX
0040DAB6 81FA 9B000000 CMP EDX,9B
0040DABC 74 04 JE SHORT pdfspme_.0040DAC2
0040DABE 33C0 XOR EAX,EAX
0040DAC0 5E POP ESI
0040DAC1 C3 RETN
0040DAC2 B0 01 MOV AL,1
0040DAC4 5E POP ESI
0040DAC5 C3 RETN
F8 đến 0040DA6F là lệnh TEST ESI,ESI. Kiểm tra xem chuỗi Key có NULL (rỗng) 0? Nếu NULL sẽ thực hiện lệnh XOR EAX,EAX làm cho AL=0
Vì chuỗi Key của ta là “123456” nên cứ nhấn F8 sẽ nhảy đến 0040DA77. Tại đây thực hiện lệnh CMP BYTE PTR DS:[ESI],0. Kiểm tra xem ký tự đầu trong chuỗi Key có NULL 0? Nếu NULL thì thực hiện XOR EAX,EAX làm cho AL=0
Vì ký tự đầu trong chuỗi Key của ta là “1” nên cứ nhấn F8 sẽ nhảy đến 0040DA80. F8 đến 0040DA87. Tại đây thực hiện lệnh CMP EAX,10. Kiểm tra xem chiều dài chuỗi Key có phải 16 ký tự 0? (10(Hex) = 16(Dec)). Nếu 0 thì thực hiện XOR EAX,EAX làm cho AL=0
Vì chuỗi Key của ta là “123456” chỉ có 6 ký tự nên cứ nhấn F8 sẽ trả về AL=0 mà ta đang cần AL=1
Giả sử chuỗi Key của ta là 16 ký tự thì cứ nhấn F8 sẽ nhảy đến 0040DA90:
Vì chuỗi Key của ta là “123456” nên cứ nhấn F8 sẽ nhảy đến 0040DA77. Tại đây thực hiện lệnh CMP BYTE PTR DS:[ESI],0. Kiểm tra xem ký tự đầu trong chuỗi Key có NULL 0? Nếu NULL thì thực hiện XOR EAX,EAX làm cho AL=0
Vì ký tự đầu trong chuỗi Key của ta là “1” nên cứ nhấn F8 sẽ nhảy đến 0040DA80. F8 đến 0040DA87. Tại đây thực hiện lệnh CMP EAX,10. Kiểm tra xem chiều dài chuỗi Key có phải 16 ký tự 0? (10(Hex) = 16(Dec)). Nếu 0 thì thực hiện XOR EAX,EAX làm cho AL=0
Vì chuỗi Key của ta là “123456” chỉ có 6 ký tự nên cứ nhấn F8 sẽ trả về AL=0 mà ta đang cần AL=1
Giả sử chuỗi Key của ta là 16 ký tự thì cứ nhấn F8 sẽ nhảy đến 0040DA90:
Code:
0040DA90 33D2 XOR EDX,EDX
0040DA92 8BC6 MOV EAX,ESI
0040DA94 0FBE08 MOVSX ECX,BYTE PTR DS:[EAX]
0040DA97 83F9 41 CMP ECX,41
0040DA9A 7C 05 JL SHORT pdfspme_.0040DAA1
0040DA9C 83F9 5A CMP ECX,5A
0040DA9F 7E 04 JLE SHORT pdfspme_.0040DAA5
0040DAA1 33C0 XOR EAX,EAX
0040DAA3 5E POP ESI
0040DAA4 C3 RETN
0040DAA5 42 INC EDX
0040DAA6 40 INC EAX
0040DAA7 83FA 10 CMP EDX,10
0040DAAA ^7C E8 JL SHORT pdfspme_.0040DA94
0040DA92 8BC6 MOV EAX,ESI
0040DA94 0FBE08 MOVSX ECX,BYTE PTR DS:[EAX]
0040DA97 83F9 41 CMP ECX,41
0040DA9A 7C 05 JL SHORT pdfspme_.0040DAA1
0040DA9C 83F9 5A CMP ECX,5A
0040DA9F 7E 04 JLE SHORT pdfspme_.0040DAA5
0040DAA1 33C0 XOR EAX,EAX
0040DAA3 5E POP ESI
0040DAA4 C3 RETN
0040DAA5 42 INC EDX
0040DAA6 40 INC EAX
0040DAA7 83FA 10 CMP EDX,10
0040DAAA ^7C E8 JL SHORT pdfspme_.0040DA94
Tại 0040DA94 sẽ đưa từng ký tự trong chuỗi Key vào thanh ghi ECX.
Tại 0040DA97 sẽ tiến hành check ký tự đó bằng lệnh CMP ECX,41 (CMP=Compare; 41 là giá trị Hex của ký tự “A”)
Lệnh nhảy ngay dưới JL (Jump if Lower) nghĩa là nếu ký tự đó thấp hơn ký tự “A” sẽ nhảy đến 0040DAA1 (mà tại 0040DAA1 là thực hiện lệnh XOR EAX,EAX làm cho AL=0)
Nếu thõa mãn ĐK này thì tiếp tục check bằng lệnh CMP ECX,5A (5A là giá trị Hex của ký tự “Z”)
Lệnh nhảy ngay dưới JLE (Jump if Lower or Equal) nghĩa là nếu ký tự đó cao hơn ký tự “Z” sẽ thực hiện lệnh XOR EAX,EAX tại 0040DAA1 làm cho AL=0
Nếu cả 16 ký tự này đều thỏa mãn thì sẽ đến đoạn code:
Tại 0040DA97 sẽ tiến hành check ký tự đó bằng lệnh CMP ECX,41 (CMP=Compare; 41 là giá trị Hex của ký tự “A”)
Lệnh nhảy ngay dưới JL (Jump if Lower) nghĩa là nếu ký tự đó thấp hơn ký tự “A” sẽ nhảy đến 0040DAA1 (mà tại 0040DAA1 là thực hiện lệnh XOR EAX,EAX làm cho AL=0)
Nếu thõa mãn ĐK này thì tiếp tục check bằng lệnh CMP ECX,5A (5A là giá trị Hex của ký tự “Z”)
Lệnh nhảy ngay dưới JLE (Jump if Lower or Equal) nghĩa là nếu ký tự đó cao hơn ký tự “Z” sẽ thực hiện lệnh XOR EAX,EAX tại 0040DAA1 làm cho AL=0
Nếu cả 16 ký tự này đều thỏa mãn thì sẽ đến đoạn code:
Code:
0040DAAC 0FBE56 06 MOVSX EDX,BYTE PTR DS:[ESI+6]
0040DAB0 0FBE4E 0B MOVSX ECX,BYTE PTR DS:[ESI+B]
0040DAB4 03D1 ADD EDX,ECX
0040DAB6 81FA 9B000000 CMP EDX,9B
0040DABC 74 04 JE SHORT pdfspme_.0040DAC2
0040DABE 33C0 XOR EAX,EAX
0040DAC0 5E POP ESI
0040DAC1 C3 RETN
0040DAB0 0FBE4E 0B MOVSX ECX,BYTE PTR DS:[ESI+B]
0040DAB4 03D1 ADD EDX,ECX
0040DAB6 81FA 9B000000 CMP EDX,9B
0040DABC 74 04 JE SHORT pdfspme_.0040DAC2
0040DABE 33C0 XOR EAX,EAX
0040DAC0 5E POP ESI
0040DAC1 C3 RETN
Tại 0040DAAC sẽ đưa giá trị của ký tự thứ 7 trong chuỗi Key vào thanh ghi EDX
Tại 0040DAB0 sẽ đưa giá trị của ký tự thứ 12 trong chuỗi Key vào thanh ghi ECX
Tại 0040DAB4 sẽ cộng 2 giá trị này với nhau và lưu trong thanh ghi EDX
Tại 0050DAB6 sẽ so sánh tổng này với 9B (9B(Hex) = 155(Dec))
Nếu tổng này khác 9B sẽ thực hiện lệnh XOR EAX,EAX làm cho AL=0
Còn nếu tổng này = 9B sẽ nhảy đến đoạn code:
Tại 0040DAB0 sẽ đưa giá trị của ký tự thứ 12 trong chuỗi Key vào thanh ghi ECX
Tại 0040DAB4 sẽ cộng 2 giá trị này với nhau và lưu trong thanh ghi EDX
Tại 0050DAB6 sẽ so sánh tổng này với 9B (9B(Hex) = 155(Dec))
Nếu tổng này khác 9B sẽ thực hiện lệnh XOR EAX,EAX làm cho AL=0
Còn nếu tổng này = 9B sẽ nhảy đến đoạn code:
0040DAC2 B0 01 MOV AL,1
0040DAC4 5E POP ESI
0040DAC5 C3 RETN
0040DAC4 5E POP ESI
0040DAC5 C3 RETN
Chính là đoạn mà AL được gán giá trị = 1
Như vậy chuỗi Key của chúng ta phải có 16 ký tự. Các ký tự phải là các ký tự từ A->Z
Tổng của ký tự 7 và ký tự 12 phải bằng 155
Ví dụ: ILIKENGUYENTUANH
Như vậy chuỗi Key của chúng ta phải có 16 ký tự. Các ký tự phải là các ký tự từ A->Z
Tổng của ký tự 7 và ký tự 12 phải bằng 155
Ví dụ: ILIKENGUYENTUANH
Lưu ý: Ký tự A->Z sẽ nhận các giá trị từ 65->90
Để viết KeyGen thì chúng ta cho các ký tự 1->11 và 13->16 RANDOM từ A->Z
Còn ký tự 12 sẽ gán bằng 155 – đi giá trị ký tự 7
Còn ký tự 12 sẽ gán bằng 155 – đi giá trị ký tự 7
Đoạn code sau viết trong VB6:
Private Sub cmdGen_Click()
Dim Key(1 To 16) As String
Dim i As Integer
Dim Key(1 To 16) As String
Dim i As Integer
txtKey.Text = “”
For i = 1 To 16
If i = 12 Then
Key(i) = Chr$(155 – Asc(Key(7)))
Else
Randomize
Key(i) = Chr$(Int((26 * Rnd) + 65))
End If
txtKey.Text = txtKey.Text & Key(i)
Next i
End Sub
For i = 1 To 16
If i = 12 Then
Key(i) = Chr$(155 – Asc(Key(7)))
Else
Randomize
Key(i) = Chr$(Int((26 * Rnd) + 65))
End If
txtKey.Text = txtKey.Text & Key(i)
Next i
End Sub
1 phần mềm chức năng cực hay (ai đã từng đọc truyện chưởng thì chắc 0 phản đối ) nhưng Function check Key thì cực gà
Tự làm k.e.y.g.e.n 61 comments
Chào mừng bạn đến vớiSáng kiến kinh nghiệm hay
XEM ĐIỂM CHUẨN VÀO LỚP 10 CÁC TỈNH
Xem điểm chuẩn lớp 10
Hướng dẫn mua bán BITCOIN => Bấm vào đây
Sách hay bấm vào đây
0 nhận xét Blogger 0 Facebook
Post a Comment
Cám ơn bạn đã phản hồi