Defeating a simple CD - Check
Mục đích của bài viết này.
Mục đích của bài viết này là học làm thế nào để vô hiệu việc kiểm tra CD đơn giản , trong một trò chơi “Extremely Goofy Skateboarding”. Bài viết này nhẳm MỤC ĐÍCH HỌC TẬP, nếu ai có ý định bẻ khóa trò chơi này và kiếm lợi ích từ nó, thì tôi sẽ không chịu bất kỳ trách nhiệm nào hết.
Tôi không có ý định làm ảnh hưởng không tốt đến người viết ra trò chơi này.
Nếu như ai đó không thích quan điểm của tôi, thì sau đó vui lòng đóng bài viết này và làm điều gì đó hữu dụng hơn. (Nghiên cứu về lượng tử chẳng hạn).
(Riêng người dịch là tôi thì ủng hộ hết mình về quan điểm này).
7 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 2085 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Defeating a simple CD - Check, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Defeating a simple CD-check
A tutorial from GooglePlex
Mục đích của bài viết này.
Mục đích của bài viết này là học làm thế nào để vô hiệu việc kiểm tra CD đơn giản ,
trong một trò chơi “Extremely Goofy Skateboarding”. Bài viết này nhẳm MỤC ĐÍCH
HỌC TẬP, nếu ai có ý định bẻ khóa trò chơi này và kiếm lợi ích từ nó, thì tôi sẽ không
chịu bất kỳ trách nhiệm nào hết.
Tôi không có ý định làm ảnh hưởng không tốt đến người viết ra trò chơi này.
Nếu như ai đó không thích quan điểm của tôi, thì sau đó vui lòng đóng bài viết này và
làm điều gì đó hữu dụng hơn. (Nghiên cứu về lượng tử chẳng hạn).
(Riêng người dịch là tôi thì ủng hộ hết mình về quan điểm này).
Ứng dụng thử nghiệm và công cụ:
Target: Extremely Goofy Skateboarding
Tools: OllyDBG 1.0.1, PeID 0.94, và trí tưởng tượng.
Sự chuẩn bị:
Ngày nay, Hầu hết những chương trình được đóng gói (Packed) bởi các trình bảo vệ như:
Armadillo, UPX,.. cá trình này có thể nén chương trình, đại khái là chèn vào những đoạn
mã mà sẽ làm nao núng các crackers hoặc làm cho trình debugger của họ bị “bẻ khóa
ngược lại”. Vì thế, bước đầu tiên, hãy nghiên cứu trình thử nghiệm của chúng ta với
PEID để có cái nhìn rõ về trình bảo vệ, nếu như nó được bảo vệ.
Đích của chúng ta không được tạo “bộ bọc” (hì hì dịch zdậy cho đỡ chán!!!)
PeID chỉ ra rằng trình trò chơi được biên dịch bằng Microsoft Visual C++ 6.0 (cái gì
cũng được, nhìn vào đó là biết ngay nó được viết bằng ngôn ngữ lập trình C, mặc dù tôi
không phải dân trong nghề). Ừm công việc đến đây cũng dễ thở hơn, vui hơn, phấn khởi
hơn. Vì C++ rất dễ để reverse.
Kiểm tra trình trò chơi
Hãy làm bước này vì nó sẽ cho ta biết chương trình sẽ làm gì khi khi không có CD, serial
hay bất kỳ cái gì.
Hãy đốt trò chơi của chúng ta heng.
(Ậy, khổ quá, tôi quên mất, tôi chưa bỏ CD vào. Chán quá!!)
BÀ xã yêu!! Sao anh đãng trí quá.
Nó nói rằng chúng ta cần cho đĩa CD của trò chơi vào ổ đĩa Compact Disk. Nhưng không
(tôi ghét nhất khi muốn nghiên cứu, học tập, chơi bời mà cứ message thì mất thì giờ quá,
mặc dù chỉ mất 10 s để bỏ đĩa vào), hãy “xử cái đó” heng.
Dùng OLLY
Hãy mở OLLY, load trình trò chơi.
Bây giờ có vài cách để tháo nút. Bạn có thể ngưng sự thực thi của chương trình khi thông
điệp báo lỗi hiện ra, nhìn vào cửa sổ “lời gọi ngăn xếp” (callstack) rồi từng bước xem xét
mã bằng các F8.
Tôi chọn cách khác nhanh hơn. Thông minh hơn.
Tôi quan sát thông điệp báo lỗi. Nó làm tôi nghĩ : Hey, hãy thử GetDriveTypeA! Hàm
này là một hàm mà sẽ giúp đỡ cho trình trò chơi tìm kiếm tất cả ổ đĩa từ A -> Z cùng với
nhãn của ổ đĩa (Tên của CD gốc). Khi tiến trình tìm kiếm tất cả ổ đĩa, bao gồm luôn ổ
cứng. Hề hề, nếu ai đó có ý định đổi tên ổ ứng thành trùng tên với nhãn ổ đĩa, thì làm ơn
quên sáng kiến đó đi, chỉ đơn giản bạn sẽ không thể có quá nhiều Giga bytes để chứa hết
tất cả chương trình mà cần có CD. Nhưng bạn có làm hay không?
Hãy làm như sau heng:
Thiết lập điểm ngắt trên hàm GetDriveTypeA.
Giờ hãy F9, và chờ đợi “cá mắc câu”.
BÙM một cái! Ta thấy dừng tại vị trí hàm GetDriveTypeA:
Nhìn sang cửa sổ Thanh ghi, ta thấy:
Bạn có nghĩ rằng chúng ta vừa mới tìm thấy nhãn ổ đĩa không?
Hãy F8 cho đến khi Olly quay trở lại mã chương trình chính. Giống thế này:
Tôi cảm thấy Rất thú vị khi từng bước tìm ra nhiều thứ !!
Có một sự so sánh:
Thanh ghi EAX lúc này có giá trị là 1 (Cái này tôi giải thích sau) . Nếu bạn F8, chúng ta
sẽ thấy cái nì:
Lệnh JNZ sẽ làm rối chúng ta, nếu ai đó nghĩ rằng :jump nếu không bằng ZERO, thì là
quá là rắc rối thật; mà nó có nghĩa là :jmp nếu không bằng.
Vì vậy, EAX là mọi thứ (chỉ có điều khác 5) thôi, ta jump thôi. F8 để thấy được xa hơn.
Bạn sẽ thấy rằng vòng lặp cứ tiếp tục, chỉ thay đổi ký tự “A” thành “B”. Điều này sẽ
được thực hiện (Từ “A” đến “Z”) hoặc cho đến khi nào EAX = 5 tức CD được tìm thấy.
Tuy nhiên chúng ta không tìm được thông điệp tệ hại trong vùng mã lân cận. Vì vậy, tôi
yêu cầu chúng ta cần đào bới sâu hơn.
Đến đây tôi xin giải thích chi tiết hơn về hàm GetDriveTypeA trước khi chúng ta tiếp tục.
GetDriveTypeA sẽ tìm kiếm phương tiện cùng với nhãn như đã nói trước đó
“SKATMFED”, trong trình trò chơi này sẽ tìm kiếm mỗi ỗ đĩa có thể có, và sẽ trả về mã
nhất định trong EAX. Hãy xem ý nghĩa của các mã đó (0 -> 6).
• 0: Loại ổ đĩa này không có.
• 1: Nhãn cần tìm không có.
• 2: Vâng, đã tìm thấy một ổ đĩa di động với nhãn của nó.
• 3: Oh, tìm thấy một ổ đĩa cứng.
• 4: Áh, một ổ đĩa mạng.
• 5: yeah, tìm thấy một CD/DVD cùng với nhãn.
• 6: jiii, tìm thấy một ổ đĩa bộ nhớ (ram disk) .
Oh, vậy ra EAX không bao giờ là 5, cho đến khi chúng ta bỏ đĩa CD Game vào.
Giờ thì F8, (hoặc nhanh hơn thì ta CTL+F9) bạn ở đây:
Hãy phóng to hình lên nhé, trông như thừơng trình tạo ra BAD message.
F8, để xem như thế nào:
Nhìn vào 2 dòng sau:
Thủ tục này rất phổ biến trong các trình kiểm tra cd/serial/Dongles. Hãy nhìn vào
0x00434FBB, giá trị trong AL sẽ từ lời gọi hàm nàay mà ra (cũng chính là hàm mà ta đã
nghiên cứu). Al = 2, hãy quyết định patch.
PATCHING ( đoạn này chính là brian)
Chúng ta có một vài cách để làm việc này. Chúng ta có thể thay đổi nhãn mà ta muốn
thành nhãn của một ổ đĩa cứng . (thông minh?) Không may là, n1o chỉ có thể hoạt động
trên máy của bạn, đặc biệt hơn nếu nó có nhãn “đẹp” (ví dụ: P0rN-7331)
Cách khác, là so sánh EAX với 1, Nó chỉ cho phép bạn chơi trò chơi khi không có đĩa
CD. Giả sử một ngày đẹp trời nào đó, bạn đột nhiên bỏ đĩa CD vào, và cái mess tệ hại kia
hiện ra, mà bạn quên mất bạn đã Patch vào tháng trước, ah thế là bạn “đập máy” áh. Cách
patch không thỏa mãn tí nào.
Hì hì, theo tôi chúng ta hãy patch lệnh nhảy JNZ thành JMP để nó luôn luôn nhảy bỏ qua
đoạn mã “BAD – BOY” :
Thế là xong, hãy làm việc còn lại là save lại sự thay đổi đó.
Hy vọng bạn sẽ thích thú với bài viết này ! Nếu bạn có lời khuyên hay ý kiến nào thì
đừng lưỡng lự mà hãy PM cho tôi tại forum
Chúc các Bạn may mắn.
Các file đính kèm theo tài liệu này:
- ARTeam-Defeating CD Check.pdf