Crack game Dò mìn - Windows XP version

Discussion in 'Resource Engineer Windows Application' started by admin, Feb 21, 2018.

  1. admin

    admin Administrator Staff Member

    WRITE UP game :Winmine__XP.exe
    LINK: http://www.minesweeper.info/downloads/WinmineXP.html
    Md5 checksum: 9C45D38B74634C9DED60BEC640C5C3CA

    I. Yêu cầu

    Rervese Engineering Tools:
    +peid 0.95
    +Cheat Engine ( bản của mình là 6.6)
    +OllyDbg ( bản mình đang dùng là của R4nDom)

    Coding Tools( chọn 1 trong 2 cái dưới đây ):
    +Visual Studio ( bản của mình là 2015 enterprise with Update 3 )
    +FreePascal ( bản của mình là bản FPC 3.0.0 được tích hợp trong Lazarus 1.6.4)

    II. Thực hiện
    Bước 1: Xác định mục tiêu.

    +Ta cần viết một trainer cho game, ta sẽ tìm cách đọc trạng thái của tất cả các ô trong bảng của trò chơi.
    +Kiểm tra qua peID có

    [​IMG]


    Ta thấy chương trình được viết bằng Visual C++ 7.0 và như các bạn thấy … debug T_T kèm theo một số thông tin cơ bản
    Bước 2: Tìm phương pháp tiếp cận.

    +Nhận thấy trò chơi sắp các quả bom vào trong bảng của game bắt buộc phải lấy được số bom hoặc kích thước của bảng.
    +Sau đó ta sẽ đặt breakpoint, mỗi khi có sự truy cập vào kích thước của bảng thì ta sẽ bắt.
    +Tìm hàm sắp bomb và tìm được cách thức bảng hoạt động.
    +Hoàn thiện các trạng thái của bảng và viết trainer.
    Bước 3. Tìm các thông tin cơ bản.

    Sử dụng cheat engine, ta dễ dàng tìm ra địa chỉ của số cột và số hàng, số bom, số cờ và cả timer nữa.
    [​IMG]
    Bước 4. Tìm cơ chế sắp xếp trong bảng.

    Ta sử dụng OllyDbg để làm điều này.
    Chuyển game về chế độ beginner. (do chế độ này ít mìn nhất, số hàng, cột cũng ít nhất).
    Quan sát trên CE ta thấy các giá trị đã được thay đổi.

    [​IMG]

    Ta sẽ đặt Hardware Breakpoint tại cả 3 địa chỉ trên , tại sao đặt cả flag left nữa ? . vì Flagleft cũng có giá trị tương đương với số lượng bomb nên ta cũng cần quan tâm.
    [​IMG]

    Chạy và bấm F2 để start a new game, vì ta có thể chắc chắn rằng chương trình sẽ truy cập vào các thông số như rows, cols, numBomb để tạo lại bảng . Chương trình sẽ dừng ở breakpoint và đưa ta ngay đến một đoạn code lạ như sau.

    [​IMG]
    Ở đây sử dụng 2 hàm call tới 0x01003940 ta sẽ soi xem trong này có gì.

    [​IMG]
    Nhìn thấy đoạn này thực sự như bố đẻ em bé , đã thấy 2 hàm random rồi, vậy thì 99% ta phán đoán đấy là đoạn code để sắp bom ( trong vạn thứ bất biến, chỉ có vị trí bom là vạn biến).
    Sau đó ta phân tích đoạn code… (comment trong ảnh)

    [​IMG]

    Ta cũng tìm ra rằng , ô nhớ nào là bomb thì sẽ có giá trị 0x8F . Sau khi rand() chắc chắn sẽ có giá trị sẽ mang giá trị 0 nên +1 để cho nó thực tế. Còn chính xác tại sao nó shl 5 thì mình không rõ, tuy nhiên ta thấy rằng nó shl để tạo ra một khoảng không gian bộ nhớ blah blah blah…

    Ta có thể xác định địa chỉ một ô 1 BYTE (row,col) trong bảng như sau

    (row << 5) + col + 0x1005340

    Vậy là xong, giờ ta viết lên code và dần dần ta lấy được bảng giá trị như sau.
    0xF = ô an toàn
    0x8F = ô có bomb
    0x40 = ô đã được mở ( không có bomb và không có số)
    0x41 … 0x48 = ô đã mở và cố số (1,2,3,4,…,8)
    0x8E = ô đã được cắm cờ.
    0x8D = ô đã được cắm dấu ?
    0xCC = khi bạn click vào một ô chứa bom thì nó sẽ mang giá trị thế này (bom nổ)
    0x8A = sau khi bạn click vào một ô chứa bom thì các ô bom chưa nổ sẽ xuất hiện và sẽ mang giá trị này.
    Bước 5: Code.

    Mình code C++ trên VS studio. Tạo 1 c++ empty project, mình chỉ code nhanh một file source.cpp duy nhất:http://pastebin.com/emqD1qaS
    Ngoài ra mình cũng code trên FreePascal, cũng một file duy nhất. Các bạn có thể tham khảo, chạy với FreePascal hay Lazarus thì tùy: http://pastebin.com/VmDjpL45
    Mình cũng có code lại trên Assembly nữa: https://pastebin.com/7FzRVaPm
    Bước 6: Tận hưởng.
    [​IMG]
    ----------------------------------------------------------------------
    Best regard
    Sherly.Cracker

    Nguồn: Nguồn là đây chứ đâu =))))

    Last edited: Jan 8, 2018
    https://www.facebook.com/Sherly.Cracker
     

Share This Page