Thứ Hai, 22 tháng 9, 2014

Solution for Greedy_Fly's CrackMe v1.2

1 crackme khá thú vị nhưng không quá khó. Chi tiết về crackme xem tại đây

Tuy nhiên tôi đã upload crackme lên google drive cho tiện download (dành cho những ai không có tài khoản trên crackmes.de hoặc làm biếng đăng nhập trên crackmes.de)


Tool: OllyDBG, Keygen Assistant

Nếu bạn scan crackme bằng PEiD hay RDG Packer Detector thì sẽ cho kết quả là AsPack (Kết quả giả). Nguyên nhân vì một đoạn code thú vị trông giống AsPack được chạy trước khi đến code thật sự của chương trình. Đoạn code thật bắt đầu từ địa chỉ 004025A1. Bạn có thể dùng LordPE chỉnh lại EP cho đỡ rắc rối cũng được hoặc không chỉnh cũng không vấn đề gì :)

Dùng plugin Krypto analyze của PEiD để biết ta sẽ phải đối đầu với những gì :)


Dùng String search không cho kết quả khả quan lắm. Lướt qua các hàm API mà chương trình dùng thấy có hàm GetDlgItem thấy nghi lập tức đặt breakpoint tại API này. Chạy Crackme và nhập vào fake serial





Nhấn check OllyDBG break tại bp mà ta đã đặt trước đó




Toàn bộ code hình trên làm nhiệm vụ như sau
- Lấy Handle của textbox bằng API GetDlgItem
- Lấy địa chỉ API SendMessageA bằng API GetProcAddress và LoadLibraryA
- Gọi SendMessageA với Message là WM_GETTEXT

Serial được lưu vào địa chỉ 4041D8

Các đoạn code tiếp theo có chức năng như sau
- CALL 00401119: Đảo ngược chuỗi serial mà ta nhập vào
- CALL 00401150: Lấy độ dài chuỗi serial mà chúng ta nhập vào
- CALL 004011AA: Thực hiện SHA-1 chuỗi serial đã đảo ngược. Kết quả chuỗi hash SHA-1 này được lưu ở địa chỉ 4041F8.

Sau đây là những dòng code tôi đã comment rõ ràng hơn.




Vậy là crackme đã tạo một chuỗi SHA-1 từ serial mà chúng ta nhập vào. Ý tưởng ở đây là crackme sẽ so sánh chuỗi SHA-1 mới tạo được với một chuỗi hardcode SHA-1 có sẵn. Nhiệm vụ bây giờ của chúng ta là tìm ra chuỗi hardcode SHA-1 được dấu trong crackme. Tiến hành trace các đoạn code tiếp theo ta sẽ tới được đoạn check đầu tiên.



Không khó để đoán ra đoạn hardcode SHA-1  bắt đầu bằng 9DD06A22. Tiếp tục tới đoạn check tiếp theo




Một đoạn check đơn giản sử dụng xor và phép trừ.

(73C82B40h - X) xor 4A2C6D45h = 79B00F88h

==> X =73C82B40h - (79B00F88h xor 4A2C6D45h) = 402BC873h

Vậy đoạn tiếp theo của chuỗi hardcode SHA-1 là 402BC873

Đoạn code tiếp theo:





Có vẻ khá rắc rối nhưng thật ra chỉ là 2 phép tính xor đơn giản
Gọi đoạn hardcode SHA-1 tiếp theo có dạng là XY (X, Y chiếm 2 byte)

Y xor D312h= D9A8h
===> Y = 0ABAh

X xor 80E4h = 3600h
===> X = B6E4h

Vậy đoạn tiếp theo của chuỗi hardcode SHA-1 là B6E40ABA


Code đoạn check cuối cùng



Đoạn cuối cùng sẽ sử dụng NEWDES để kiểm tra serial. Đoạn SHA-1 còn lại sẽ được mà hóa với key là "Unregistered!!!" rồi so sánh với 26377DDF302D922E. NEWDES là kiểu mã hóa đối xứng với key mã hóa và key giải mã là một. Dùng Keygen Assistant để thực hiện giải mã ta được phần cuối cùng



Đoạn SHA-1 hoàn chỉnh "9DD06A22402BC873B6E40ABA4E390DB9E0E00F20"

Sử dụng các trang SHA-1 crack hoặc đơn giản hơn chỉ cần paste dòng hash vào google và nhấn search. Kết quả tìm kiếm dẫn đến địa chỉ sau

http://sha1.znaet.org/sha1/9dd06a22402bc873b6e40aba4e390db9e0e00f20

Vậy serial chúng ta cần tìm là zaq12345



Lưu ý: SHA-1 không thể dịch ngược được. Vì đây là một crackme nên tác giả cố tình chọn một serial thông dụng sẵn có trong bộ từ điển khổng lồ của các trang SHA-1 crack. Nếu tác giả chọn serial phức tạp như "$#&!%#hsdg236" thì đến 10 đời cũng chả crack nổi :D

Tut kết thúc ở đây. Chúc bạn một ngày tốt lành :)

Best thank to: Jagged1600 ( Long time to see you!!! )

Thank to:
All REPT, Cin1, SND, Tuts4you, STC, REiS, URET,.... members

Elvis
Quy Nhơn 22/09/2014