Đảo ngược kỹ thuật thiết bị ME2: Khi súng nhiệt và con dao giúp khôi phục mã nguồn đã mất
Một hành trình đầy thú vị để phục hồi chức năng của thiết bị cầm tay ME2 ra mắt năm 2008 thông qua việc phân tích phần cứng và firmware. Bằng cách sử dụng súng nhiệt để tháo chip và kỹ thuật decapsulation, tác giả đã xác định được vi điều khiển ẩn và giải mã giao thức USB bí mật. Kết quả là một công cụ dòng lệnh cho phép tương tác hoàn toàn với thiết bị mà không cần phần mềm gốc.

Trong thế giới bảo tồn phần mềm và trò chơi điện tử cũ, việc tìm thấy một thiết bị mà không có bất kỳ tài liệu hay driver nào đi kèm là một thách thức đáng gờm. Gần đây, một dự án thú vị đã thu hút sự chú ý của cộng đồng kỹ thuật: quá trình đảo ngược kỹ thuật (reverse engineering) thiết bị cầm tay ME2 — một món đồ chơi ra mắt năm 2008 với khả năng đồng bộ hóa dữ liệu qua USB.
Thiết bị ME2
Bài viết này sẽ đi sâu vào hành trình đầy mồ hôi và sáng tạo của tác giả, người đã sử dụng những công cụ bất ngờ như súng nhiệt và con dao để "mổ xẻ" phần cứng, nhằm mục đích giải mã giao thức liên lạc đã thất lạc của thiết bị này.
Bối cảnh và thách thức
ME2 là một thiết bị cầm tay nhỏ gọn kết nối với máy tính để đồng bộ hóa điểm số và vật phẩm ảo vào một thế giới trực tuyến. Tuy nhiên, trò chơi này quá ngách và phần mềm kèm theo (có tên gọi ME2 Desktop Buddy) đã biến mất khỏi internet từ lâu. Không có driver, không có phần mềm, và không có tài liệu kỹ thuật nào còn sót lại.
Tác giả, người đứng đầu dự án Miuchiz Reborn — một nỗ lực bảo tồn các trò chơi tương tự — đã quyết định đưa ME2 lên bàn mổ. Mục tiêu là tái tạo máy chủ và tìm cách giao tiếp với thiết bị cầm tay để khôi phục đầy đủ trải nghiệm trò chơi.
Mổ xẻ phần cứng
Thiết bị sở hữu một cổng mini-USB và cấu tạo khá đơn giản. Tuy nhiên, thách thức lớn nhất nằm ở bên trong vỏ nhựa.
Bo mạch PCB của ME2
Bộ nhớ chính của ME2 nằm trên chip flash SST39VF3201 (dung lượng 4MB). Tuy nhiên, vi điều khiển chính (microcontroller) lại bị ẩn dưới một khối epoxy cứng — một kỹ thuật gọi là Chip-on-Board (CoB) nhằm tiết kiệm chi phí. Điều này đồng nghĩa với việc không có bất kỳ ký hiệu hay số model nào để nhận diện chip. Vì các vi điều khiển loại này thường chứa ROM nội bộ lưu trữ mã khởi động và mã USB, việc không biết chip là gì đồng nghĩa với việc không biết cách đọc dữ liệu từ nó.
Trích xuất dữ liệu và tìm kiếm kiến trúc
Cách duy nhất để tiến lên là tháo chip flash ra khỏi bo mạch. Sau vài lần thất bại với bàn là hàn thông thường, tác giả đã phải sử dụng đến một trạm hàn nhiệt (heat gun) có thể đạt tới 500°C để làm chảy dây hàn và tháo chip an toàn.
Chip flash sau đó được đưa vào một bộ lập trình (flash programmer) thương mại để dump toàn bộ nội dung. Dữ liệu thu được rất khả quan, bao gồm cả các hình ảnh bitmap được nhúng trong firmware.
Hình ảnh được tìm thấy trong firmware
Tuy nhiên, vấn đề vẫn chưa giải quyết xong. Tác giả cần biết bộ lệnh (instruction set) của vi điều khiển để phân tích mã. Ghidra — công cụ phân tích mã nổi tiếng — đã thử mọi kiến trúc phổ biến như ARM, MIPS, 6502 nhưng đều thất bại.
Decapsulation: Súng nhiệt và con dao
Không còn lựa chọn nào khác, tác giả quyết định thực hiện một kỹ thuật "thô bạo" nhưng hiệu quả: loại bỏ lớp epoxy bảo vệ chip. Với nhiệt độ tối đa của súng nhiệt và sự trợ giúp của một con dao, khối epoxy đã được tách ra một cách sạch sẽ.
Chip sau khi được loại bỏ epoxy
Mặc dù không có ký hiệu trên bề mặt silicon, nhưng bằng cách sử dụng một kính hiển vi kỹ thuật số giá rẻ và so sánh hình ảnh với cơ sở dữ liệu Siliconprawn (nơi lưu trữ hàng nghìn bức ảnh die shot), tác giả đã nhận ra chip này là GeneralPlus GPL162002A/B. Đây là một vi điều khiển sử dụng bộ lệnh μ'nSP — một kiến trúc khá phổ biến trong các đồ chơi của thời điểm đó nhưng khá lạ lẫm với nhiều người.
Đảo ngược giao thức USB
Sau khi xác định được kiến trúc, tác giả đã sử dụng các plugin của bên thứ ba cho Ghidra để bắt đầu quá trình disassemble firmware. Mục tiêu là tìm hiểu cách thiết bị giao tiếp qua USB.
ME2 tự nhận diện mình là một thiết bị lưu trữ hàng loạt (USB Mass Storage), nhưng chỉ hiển thị một tệp tin hướng dẫn người dùng tải phần mềm (đã không còn tồn tại). Tuy nhiên, sâu trong mã firmware, tác giả đã phát hiện các lệnh riêng của nhà sản xuất (vendor commands) được ẩn giấu.
Các lệnh này cho phép:
- Đọc dữ liệu từ flash.
- Ghi (program) dữ liệu vào flash.
- Xóa (erase) sector flash.
Tất cả đều sử dụng ID lệnh dự phòng 0xFF, đi kèm với các tham số con. Bằng cách sử dụng thư viện libusb, tác giả đã viết một chương trình riêng để gửi các lệnh này trực tiếp từ máy tính, bỏ qua hoàn toàn driver gốc.
Tận dụng lỗi bảo mật để đọc ROM nội bộ
Trong quá trình thử nghiệm, tác giả phát hiện một lỗ hổng quan trọng: hàm xử lý lệnh đọc flash không thực hiện kiểm tra giới hạn địa chỉ bộ nhớ (bounds checking).
Giao diện USB và phân tích
Bằng cách gửi yêu cầu đọc tại một địa chỉ rất cao, bộ đếm địa chỉ của vi điều khiển sẽ bị tràn (wrap around) và quay về đầu không gian địa chỉ. Điều này cho phép đọc toàn bộ bộ nhớ, bao gồm cả 128KB ROM nội bộ "embadded" mà trước đó không thể truy cập.
Nhờ lỗi này, tác giả không chỉ đọc được mã khởi động mà còn quan sát được bộ nhớ RAM (framebuffer của màn hình) và các thanh ghi GPIO để theo dõi trạng thái nút bấm theo thời gian thực.
Kết quả và ý nghĩa
Cuối cùng, dự án đã thành công rực rỡ. Tác giả đã xây dựng một công cụ dòng lệnh hoàn chỉnh có khả năng:
- Đọc/Ghi flash.
- Đọc/Thiết lập điểm số và gems trong game.
- Dump bộ nhớ nhờ vào lỗi bảo mật.
- Giám sát đầu vào từ các nút bấm.
Toàn bộ mã nguồn và công cụ đã được công khai trên repository ME2-Restoration. Đây là một minh chứng tuyệt vời cho thấy ngay cả khi phần mềm gốc đã mất tích hoàn toàn, thông qua sự kiên trì và kỹ thuật phần cứng, chúng ta vẫn có thể "hồi sinh" các thiết bị công nghệ cũ. Hành trình này không chỉ bảo tồn một món đồ chơi năm 2008, mà còn cung cấp nhiều bài học quý giá về kỹ thuật đảo ngược và bảo mật phần nhúng.



