Giới thiệu
Trong bài viết trước, chúng ta đã cùng nhau giải quyết hai thử thách CubeMadness1 và CubeMadness2 khá đơn giản. Ở bài viết này, chúng ta sẽ đối mặt với thử thách CubeBreaker, một bài thi có độ khó trung bình nhưng rất thú vị trên nền tảng Hackthebox: CubeBreaker Challenge.
Tổng quan về thử thách CubeBreaker
Thử thách CubeBreaker có hình ảnh đồ họa tương tự như hai thử thách trước. Trong thử thách này, có tổng cộng 20 hộp (box) được chia ra thành hai nhóm: 10 hộp bên trong vùng cho phép di chuyển và 10 hộp bên ngoài. Mục tiêu chính của chúng ta là tìm cách thoát ra ngoài vùng hình chữ nhật để thu thập các hộp bên ngoài.
Phân tích và giải quyết thử thách CubeBreaker
Để thoát ra khỏi vùng hình chữ nhật, bước đầu tiên chính là xác định tọa độ của đối tượng mà chúng ta điều khiển. Tương tự như trong thử thách hướng dẫn sử dụng Cheat Engine, tôi đã quét và tìm được giá trị tọa độ theo chiều ngang, gọi là X. Dù có khoảng 14 địa chỉ tương tự như X, nhưng chỉ có một địa chỉ thực sự cho phép chúng ta thay đổi tọa độ trong game.
Khi thử nghiệm bằng cách thay đổi giá trị của X để thu thập hộp bên ngoài, tôi phát hiện rằng đối tượng bị đưa về trung tâm của hình chữ nhật. Tôi đã thử chỉnh sửa đoạn mã điều khiển giá trị của X mà khiến đối tượng bị đưa về vị trí trung tâm thành do nothing
, nhưng kết quả không khả quan. Để tiếp tục thử nghiệm, tôi cần khôi phục mã nguồn gốc của đoạn mã đã chỉnh sửa.
Tiếp tục tìm kiếm, tôi đã tìm thấy tọa độ Y. Khi chỉnh sửa giá trị của Y để đưa đối tượng ra ngoài hình chữ nhật, điều này diễn ra bình thường. Tuy nhiên, khi cố gắng di chuyển ra xa quá giới hạn chiều dài hình chữ nhật, đối tượng vẫn lại bị đưa về vị trí trung tâm. Chính vì vậy, có vẻ như trò chơi đã thiết lập một ngưỡng cố định để kiểm soát vị trí của đối tượng.
Để xác định giá trị ngưỡng này, tôi đã sử dụng công cụ debug và đặt điểm dừng ở đoạn mã kiểm tra giá trị X khi di chuyển vượt quá ngưỡng. Qua quá trình này, tôi tìm ra địa chỉ lưu trữ giá trị ngưỡng và thấy rằng giá trị ngưỡng tương ứng là 14.5
, và cũng có giá trị đối diện là -14.5
. Khi tôi thay đổi các giá trị này thành 30 và -30, khu vực di chuyển của đối tượng đã được mở rộng lên đáng kể.
Khám phá thêm thông tin từ bộ nhớ
Tuy nhiên, bước tiếp theo tôi nhận ra rằng khi điều khiển đối tượng để thu thập hộp bên ngoài hình chữ nhật, đối tượng vẫn có thể đi xuyên qua mà không thu được hộp nào. Do đó, tôi đã quyết định khám phá thêm vùng bộ nhớ (Browse memory region) của X và phát hiện ra một địa chỉ thay đổi mỗi khi va chạm với hình chữ nhật hoặc hộp.
Sau một thời gian theo dõi, tôi tìm thấy một đoạn mã xử lý việc phân biệt giữa hộp đã thu thập điểm và hộp chưa thu thập, và tôi đã tìm được cách để can thiệp mã nhằm sửa giá trị cần thiết cho hộp chưa thu thập để trở thành hộp đã thu thập.
Kết thúc thử thách
Cuối cùng, khi tôi thu thập đủ 20 hộp, flag đã xuất hiện, xác nhận rằng tôi đã hoàn thành thử thách này.
Kết luận
Thử nghiệm CubeBreaker không chỉ là một bài thử thách về kỹ năng mà còn đòi hỏi sự kiên nhẫn và khả năng phân tích tỉ mỉ từng chi tiết. Qua bài viết này, tôi đã chia sẻ quá trình tìm kiếm địa chỉ, sử dụng breakpoint và phân biệt giữa các loại hộp để hoàn thành mục tiêu của mình. Hy vọng rằng những chia sẻ này sẽ hữu ích cho những ai đang tham gia giải quyết các thử thách tương tự trên Hackthebox trong tương lai.
Nếu bạn có cách giải quyết nào hiệu quả hơn hoặc ý tưởng sáng tạo, đừng ngần ngại chia sẻ với cộng đồng để chúng ta cùng học hỏi nhé!
source: viblo