Gần cuối dự án nên mình cũng rảnh hơn một chút, nên lên hỏi Chatgpt về game Idle nào hay để chơi giải trí một tí không, được nó đưa đến trang Crazy Games, giới thiệu qua 1 chút để có nhiều chữ thì "Crazy Games là một nền tảng chơi game trực tuyến miễn phí, cung cấp hàng nghìn trò chơi đa dạng từ hành động, mô phỏng, giải đố, đến thể thao. Người dùng có thể chơi ngay trên trình duyệt mà không cần tải về, rất tiện lợi và phù hợp cho mọi lứa tuổi.", tôi vừa copy từ AI ra
Tôi chọn thử 1 game Mage Tower Idle Defense để chơi thì thấy nó cũng ổn chơi cũng vui
"Mage Tower Idle Defense là một game chiến thuật nhàn rỗi trên Crazy Games, nơi bạn nhập vai pháp sư bảo vệ tòa tháp khỏi những đợt quái vật tấn công. Người chơi có thể mở khóa phép thuật mạnh mẽ, nâng cấp rune và kỹ năng, hoàn thành nhiệm vụ hàng ngày để tăng sức mạnh ngay cả khi không trực tuyến. Game được phát triển bởi JellyBeans Studios, chơi trực tiếp trên trình duyệt, không cần tải về."
Biết là chơi game trong giờ làm việc là không đúng, nhưng hôm nay ở đây chúng ta trao đổi học thuật, cụ thể là cheat vì cái game này nếu chơi tử tế phải cày cuốc cực kì mệt nên là mình không đủ kiên nhẫn mặc dù là game Idle 😢
Sau khi chơi vài ván thì theo thói quen nghề nghiệp mình mở Inspect lên để nghiên cứu qua qua 1 chút về trò chơi thì thấy như sau
- https://sdk.crazygames.com/crazygames-sdk-v3.js
- https://play.jellybeansstudios.com/crazygames/magetower/16227719/assets/MageTower.82b9a147.loader.js
- https://play.jellybeansstudios.com/crazygames/magetower/16227719/assets/MageTower.82b9a147.framework.js
sau đó refresh trang 1 lần để tìm kiếm thông tin thấy
một thông báo ở console
dò đến request tìm kiếm thử thì thấy có 1 request
Bên Storage thì thế này
Giải mã base64 thì sẽ có nội dung đọc được nhưng ta sẽ chỉ tập trung vào mấy trường như gold, soulds, gems ở đây thôi nhé
{\"Id\":\"gold\",\"Type\":\"Currency\",\"Balance\":AAAAA},{\"Id\":\"souls\",\"Type\":\"Currency\",\"Balance\":BBBBB},{\"Id\":\"xp\",\"Type\":\"Experience\",\"Balance\":CCCCC},{\"Id\":\"gems\",\"Type\":\"Currency\",\"Balance\":DDDDD},{\"Id\":\"level\",\"Type\":\"Experience\",\"Balance\":EEEEE},}
Giờ phân tích lên kế hoạch gian lận 1 chút nào: trước mắt thì mình thấy có 2 cách,
- Cách 1 là đặt break point bên trong javascript code để từ đó ghi đè dữ liệu vào bộ nhớ game khi game vừa chạy.
- Cách thứ 2 là dùng 1 cái proxy bắt request chỉnh sửa trước trước khi dữ liệu nhận hoặc gửi đi giữa game và server
Mình sẽ làm bằng cách 1 trước, bằng 1 chút nghiệp vụ mày mò, mình vào xem file game sdk trước
Đọc được vài thông tin "Cloud data missing but has local data, initialize with local data", "Cloud data and local data missing, initialize with empty data", mình đoán được sơ sơ phần if bên trên liên quan đến data của game nên mình đặt breakpoint ở đó và khởi động lại game
sau khi dừng ở breakpoint, mình kiểm tra trước
Tiếp theo gán lại giá trị vào bộ nhớ, sau đó cho chạy
Chúc mừng, game đã bị cheat thành công, và hoàn toàn được đồng bộ vào dữ liệu, tương tự thì mấy giá trị còn lại thì làm tương tự
Cách 2 để cheat thì đơn giản hơn, không cần mày mò code để hiểu vì một lúc sẽ có 1 request gửi dữ liệu đồng bộ với server
Ta sẽ dùng công cụ để bắt request đó, sửa nó trước khi nó được gửi đi, ở đây mình dùng Burp Suite, bật Intercept chỉnh sửa request đó, sau khi sửa xong và ấn Forward thế là hoàn thành
0 Nhận xét