Cách tái sử dụng đồng hồ thông minh: Hướng dẫn kỹ thuật đảo ngược và tùy chỉnh firmware


Summary

Bài viết này khám phá cách tái sử dụng đồng hồ thông minh qua kỹ thuật đảo ngược và tùy chỉnh firmware, mang lại giá trị lớn cho người dùng trong việc tối ưu hóa thiết bị. Key Points:

  • **Phân tích sâu mạch PCB:** Nắm vững các thành phần thụ động trên mạch PCB giúp bạn hiểu rõ hơn về cách chúng ảnh hưởng đến hiệu suất của đồng hồ thông minh. Tôi đã thử nghiệm và nhận ra rằng việc phân tích này mở ra nhiều cơ hội để cải thiện sản phẩm.
  • **Khai thác Firmware dựa trên AI:** Sử dụng công nghệ AI/ML để tự động hóa việc phân tích firmware không chỉ tiết kiệm thời gian mà còn giúp phát hiện các lỗ hổng bảo mật nhanh chóng hơn. Qua đó, tôi thấy rõ sự tiện lợi của những phương pháp hiện đại này.
  • **Xác định và khai thác các giao thức truyền thông không dây:** Tìm hiểu về các giao thức như Bluetooth và Wi-Fi có thể giúp bạn bảo vệ đồng hồ thông minh khỏi những rủi ro tiềm ẩn. Tôi từng gặp phải một số vấn đề liên quan đến điều này, và việc nắm rõ nó thực sự rất cần thiết.
Qua bài viết, bạn sẽ thu được nhiều kiến thức bổ ích về quy trình reverse engineering đồng hồ thông minh, từ phân tích linh kiện đến khai thác firmware.

Khám Phá Đồng Hồ Thông Minh Qua Reverse Engineering

Gần đây, tôi đã nhận được một lô đồng hồ thông minh có khả năng định vị địa lý, những thiết bị này đã ngừng hoạt động sau một lần thử nghiệm. Tôi quyết tâm tìm cách tận dụng chúng và bắt đầu hành trình khám phá đồng hồ thông minh qua reverse engineering! Trong bài viết này, tôi sẽ chia sẻ về quá trình đảo ngược kỹ thuật bằng cách đầu tiên nêu ra một số quan sát ban đầu về bề mặt và mạch điện của chiếc đồng hồ, trước khi đi vào chi tiết về cách tôi tái lập trình smartwatch và bước cuối cùng là vá firmware để nó có thể được sử dụng cho các mục đích khác.

Trong quá trình nghiên cứu, tôi nhận thấy rằng chiếc đồng hồ không chỉ đơn thuần là thiết bị theo dõi thời gian mà còn tích hợp nhiều cảm biến như cảm biến nhịp tim, gia tốc kế và GPS. Những cảm biến này cung cấp dữ liệu hữu ích cho người dùng như theo dõi sức khỏe và hoạt động thể chất. Vật liệu chế tạo cũng rất đa dạng với sự kết hợp giữa nhôm nhẹ, thép không gỉ bền bỉ và vật liệu polymer cao cấp giúp tăng tính thẩm mỹ cũng như độ bền cho sản phẩm.

Sau khi phân tích phần cứng của smartwatch, tôi tiến hành tái lập trình để thay đổi chức năng của nó sao cho phù hợp hơn với nhu cầu cá nhân. Một trong những điểm thú vị là việc tùy chỉnh firmware không chỉ giúp cải thiện hiệu suất mà còn mở ra nhiều khả năng mới cho người dùng. Qua đó, tôi hy vọng có thể mang đến trải nghiệm tốt hơn từ những chiếc đồng hồ này."

Những Quan Sát Ban Đầu Về Thiết Bị

Quan sát ban đầu cho thấy các chiếc đồng hồ được giao chỉ ở dạng cơ bản, đi kèm với một trang hướng dẫn đơn giản về cách sạc và sử dụng. Mỗi hộp chứa một bộ sạc và một chiếc đồng hồ. Thật không may, không có tài liệu hướng dẫn chi tiết, trang web hay cổng thông tin dành cho nhà phát triển nào cả. Các chiếc đồng hồ này chỉ có một cảm biến cảm ứng trên bề mặt để bật màn hình, cho phép người dùng xem nhịp tim của họ cũng như một số thông tin gỡ lỗi và thời gian trên các mặt đồng hồ khác nhau.

Thông tin gỡ lỗi cung cấp dữ liệu hữu ích để xác định mẫu đồng hồ. Tôi nhận thấy rằng địa chỉ IP hiển thị trên mặt đồng hồ gỡ lỗi là giống nhau giữa các chiếc đồng hồ cùng mẫu. Đoán chừng đây có thể là địa chỉ IP của máy chủ mà những chiếc đồng hồ này đang kết nối tới.

Những thiết bị này còn mang trong mình khả năng theo dõi sức khỏe nhờ vào cảm biến quang học hiện đại giúp ghi lại nhịp tim chính xác hơn hoặc thậm chí sử dụng cảm biến gia tốc để đo bước đi hàng ngày của người dùng. Bên cạnh đó, chất liệu chế tạo như kính Gorilla Glass làm cho màn hình bền bỉ hơn trước va đập, trong khi vỏ kim loại nhẹ không chỉ nâng cao độ bền mà còn tăng thêm tính thẩm mỹ cho sản phẩm.

Một điểm đáng lưu ý khác là khả năng tùy chỉnh firmware của những chiếc đồng hồ này, điều này giúp tối ưu hóa hiệu suất hoạt động và tạo ra trải nghiệm cá nhân hóa hơn đối với từng người dùng.
Extended Perspectives Comparison:
Kết luậnChi tiết
Khả năng định vị GPSĐồng hồ tích hợp cảm biến GPS, giúp theo dõi vị trí người dùng một cách chính xác hơn.
Chất liệu bền bỉVỏ kim loại nhẹ và kính Gorilla Glass đảm bảo độ bền và thẩm mỹ cho sản phẩm.
Tùy chỉnh firmwareViệc sửa đổi firmware mở rộng khả năng của đồng hồ, cho phép cá nhân hóa trải nghiệm sử dụng.
Thiết kế mạch thông minhPCB với chip nRF52832 và ESP8285 tối ưu hóa hiệu suất kết nối Bluetooth và WiFi.
Quá trình đảo ngược kỹ thuậtRút ra nhiều kiến thức về thiết bị ARM cùng các phương pháp phát triển, cải thiện khả năng xử lý dữ liệu.

Phân Tích Mạch PCB Của Đồng Hồ Thông Minh

Chiếc đồng hồ này có chỉ số IP67, nghĩa là nó chống nước, vì vậy tôi không thể tiếp cận những chiếc đồng hồ này (với dụng cụ hạn chế của mình) mà không làm hỏng chúng. Với tinh thần khám phá, tôi đã sử dụng một cặp kềm để mở một chiếc đồng hồ, bóc tách nó ra nhằm tìm hiểu bên trong có gì. Không dễ dàng chút nào, nhưng sau khoảng một tiếng đồng hồ chăm chú prying và cắt, cuối cùng tôi cũng đã gỡ bỏ được lớp vỏ bên ngoài của chiếc đồng hồ. Bên trong là một bảng mạch PCB đơn với pin LIPO. Có hai ăng-ten được nhúng trong vỏ máy và kết nối với các đầu nối u.FL trên bo mạch. Việc thiết kế mạch này rất quan trọng vì nó không chỉ đảm bảo hiệu suất hoạt động mà còn tối ưu hóa việc tiêu thụ năng lượng và tương thích với các cảm biến khác nhau. Chất liệu PCB như FR-4 hoặc Rogers cũng ảnh hưởng lớn đến độ bền và hiệu suất của chiếc đồng hồ thông minh này. Cuối cùng, cách bố trí linh kiện trên bảng mạch giúp giảm kích thước sản phẩm mà vẫn duy trì hiệu quả hoạt động tốt nhất.

Tìm Kiếm Các Chân Kết Nối và Chương Trình

Việc phân tích ngược mạch PCB của chiếc đồng hồ thông minh này cho thấy nó được điều khiển bởi một chip nRF52832 có khả năng kết nối Bluetooth, cùng với hai IC quan trọng khác: một chip ESP8285 có khả năng WiFi và một IC di động từ SIMCOM. Ban đầu, tôi cảm thấy bối rối về sự hiện diện của vi điều khiển WiFi vì không có dấu hiệu nào cho thấy chiếc đồng hồ này hỗ trợ WiFi. Tuy nhiên, sau đó tôi đã biết rằng nó được sử dụng để định vị trong môi trường đô thị. Do độ chính xác của GPS thường khá kém trong các khu vực đông dân cư, nên việc ước lượng vị trí của đồng hồ có thể được thực hiện bằng cách sử dụng dữ liệu từ các điểm truy cập WiFi và mạng di động kết hợp với dữ liệu GPS lịch sử.

Từ thiết kế mạch, rõ ràng rằng nRF52832 là IC chính của thiết bị và nó dùng chip WiFi để quét các điểm truy cập WiFi gần đó. Đồng thời, nRF52832 cũng giao tiếp với thiết bị SIMCOM qua giao thức UART (Universal Asynchronous Receiver-Transmitter), gửi lệnh để kết nối với mạng di động. Biết được điều này, tôi tập trung tìm kiếm bất kỳ chân UART hoặc chân lập trình nào trên nRF52832, vì đây là IC chính và những kết nối này thường được sử dụng để tương tác với vi điều khiển.

Các loại chân kết nối phổ biến như UART, I2C (Inter-Integrated Circuit) và SPI (Serial Peripheral Interface) đều đóng vai trò quan trọng trong việc truyền tải dữ liệu giữa các linh kiện điện tử trên bo mạch. Chẳng hạn như UART cho phép truyền dữ liệu theo dạng chuỗi không đồng bộ giữa hai thiết bị; còn I2C cung cấp giao tiếp đa điểm giúp nhiều thiết bị chia sẻ cùng một đường dây tín hiệu; SPI lại nổi bật nhờ tốc độ cao hơn trong việc trao đổi dữ liệu song công giữa các thành phần.

Về vật liệu dùng cho các chân kết nối thường là đồng hoặc hợp kim nhôm nhằm đảm bảo tính dẫn điện tốt và độ bền cao theo thời gian. Cuối cùng, việc tùy chỉnh firmware sẽ giúp tối ưu hóa hiệu suất hoạt động của chiếc đồng hồ thông minh dựa trên nhu cầu cá nhân người dùng.


Tìm Kiếm Các Chân Kết Nối và Chương Trình Free Images


Kết Nối Và Xác Nhận Dữ Liệu Debug

Trong trường hợp này, có khá nhiều chân UART và các chân lập trình được tiếp xúc trên bo mạch. Một đường dẫn thú vị mà tôi phát hiện là các điểm tiếp xúc bằng vàng tròn ở phía bên phải của PCB được kết nối với SWDIO và SWCLK trên IC nRF52832, bên cạnh những kết nối mà tôi đã mong đợi cho việc sạc pin của đồng hồ. SWDIO và SWCLK là các chân lập trình JTAG dùng để lập trình chip. Ngoài ra, còn có các chân pogo, tức là các đầu tiếp xúc điện lò xo, gắn ở mặt dưới của nắp trước đồng hồ sẽ tiếp xúc với những điểm này khi đồng hồ được đóng lại. Những chân pogo này đã được nối tới các điểm tiếp xúc mạ đồng trên bề mặt trước của đồng hồ, điều này có nghĩa là các chân lập trình cho chip chính đã được phơi bày ra ngoài mặt đồng hồ. Sự hiện diện của những chân lập trình phơi bày thực sự không bình thường vì thông thường firmware cho thiết bị sẽ được nhúng vào PCB tại nhà máy và sau đó cập nhật qua WiFi hoặc Bluetooth; hiếm khi cần thiết phải phơi bày các chân lập trình như vậy. Tính năng này hóa ra lại rất hữu ích sau này vì nó có nghĩa là tôi không cần mở đồng hồ để truy cập vào firmware. Nếu phải mở đồng hồ thì ý định tái sử dụng nó của tôi gần như chắc chắn sẽ thất bại, giống như lần thử mở nó trước đó: rõ ràng đó không phải việc dễ dàng để lắp lại ngay sau đó.

Điều thú vị hơn nữa là trên bộ sạc, các chân pogo kết nối với SWCLK và SWDIO trên mặt đồng hồ lại được liên kết với các chân D+ và D- trên cổng microUSB. Các chân D+ và D- thường dùng cho truyền dữ liệu. Điều này có nghĩa rằng tôi thậm chí không cần xây dựng một nền tảng lập trình tùy chỉnh nào để lập trình lại chiếc đồng hồ: tất cả những gì tôi cần làm chỉ là cắt một dây microUSB để tiếp xúc với các chân lập trình mỗi khi chiếc đồng hồ được kết nối với bộ sạc. Thật tuyệt vời! Khi tôi kết nối chiếc đồng hồ với bộ gỡ lỗi JLink qua bộ sạc, điều đầu tiên tôi nhận thấy là chiếc đồng hồ đang phát ra đầu ra debug thông qua công cụ xem RTT JLink. Thành công! Mặc dù việc quan sát đầu ra debug rất hữu ích nhưng do không có cách nào cấu hình đầu vào cho module RTT nên vẫn không thể gửi lệnh đến chiếc đồng hồ.

Khám Phá Firmware Của Đồng Hồ

Tuy nhiên, kết quả thu được đã xác nhận những giả định ban đầu của tôi về cách đồng hồ kết nối bên trong. Sau một vài thử nghiệm khám phá việc gửi lệnh qua JLink, tôi quyết định xem xét firmware. Với JLink gắn liền, tôi có thể lấy bản sao firmware bằng cách sử dụng lệnh `nrfjprog` với các cờ `--readcode` và `--readram`. Firmware không bị bảo vệ đọc hoặc ghi, vì vậy tôi đã có thể lấy toàn bộ bản sao firmware. Lúc này, tôi có hai lựa chọn để tái sử dụng đồng hồ: 1) Tôi có thể lập trình lại hoàn toàn bằng cách flash một firmware mới vào thiết bị, hoặc 2) Tôi có thể sửa đổi địa chỉ IP và cổng trong firmware để đồng hồ gửi dữ liệu trở lại một máy chủ mà tôi kiểm soát. Vì việc lập trình lại đồng hồ có khả năng là một công việc lớn nên tôi quyết định thử sửa đổi đồng hồ trước.

Firmware của chiếc đồng hồ này quản lý nhiều chức năng cơ bản như theo dõi sức khỏe và thông báo từ điện thoại đến người dùng. Nó cũng đảm nhiệm vai trò kết nối với các module khác như SIMCOM để truyền tải dữ liệu hiệu quả hơn. Người dùng cũng có khả năng tùy chỉnh giao diện người dùng hoặc thêm tính năng mới nhằm nâng cao trải nghiệm sử dụng hàng ngày. Đồng thời, vật liệu chế tạo và công nghệ cảm biến trong chiếc đồng hồ này còn góp phần cải thiện độ chính xác cho các chỉ số sức khỏe mà nó theo dõi, chẳng hạn như nhịp tim hay giấc ngủ, mang đến cho người dùng sự an tâm hơn khi sử dụng sản phẩm này.

Sử Dụng Ghidra Để Giải Mã Firmware

Tôi cần sử dụng Ghidra để dump cả RAM và flash nhằm có được một bản đồ chính xác về các hàm và biến trong mã nguồn. Vì đây là mã nhúng từ thiết bị Cortex M0+, tôi đã phải giải mã firmware dưới dạng ARM little-endian, và Ghidra đã giúp tôi tạo ra mã giả đọc được ở mức độ nhất định. Mục tiêu của tôi lúc này là điều tra vị trí của địa chỉ IP, mà tôi tin rằng nó được lưu trữ đâu đó trong mã. Chiếc đồng hồ gửi dữ liệu qua kết nối di động đến một máy chủ, địa chỉ của máy chủ này được hiển thị trên mặt debug của đồng hồ. Nếu tôi có thể cập nhật địa chỉ IP, thì tôi sẽ có khả năng chuyển hướng dữ liệu mà chiếc đồng hồ đang gửi đi tới một máy chủ mà tôi kiểm soát.

Tìm Kiếm Địa Chỉ IP Trong Mã Lệnh

Tuy nhiên, những nỗ lực ban đầu của tôi để tìm một chuỗi được mã hóa cứng liên quan đến địa chỉ IP mà tôi quan sát trên mặt đồng hồ đã không thành công. Cố gắng tiếp theo của tôi là tìm chuỗi gần nhất xuất hiện trong đầu ra gỡ lỗi mà tôi thấy trong trình xem RTT. Trong trường hợp này, đó là `AT+CIPOPEN=0`, lệnh tuần tự được gửi từ nRF52832 đến mô-đun SIMCOM, yêu cầu nó mở một kết nối đến một địa chỉ IP được chỉ định như là tham số. Bằng cách tìm thấy chuỗi này, vì nó sử dụng địa chỉ IP của máy chủ mà đồng hồ cần kết nối, tôi có thể xác định vị trí trong bộ nhớ nơi lưu trữ địa chỉ IP của máy chủ đó.
Tìm Kiếm Địa Chỉ IP Trong Mã Lệnh

Thực Hiện Patch Firmware Để Thay Đổi IP

Tôi đã thành công hơn trong việc tìm ra một chuỗi định dạng. Mẫu chuỗi này có dạng giống như địa chỉ IP. Nó được gọi trong một hàm trông có vẻ khả nghi như là một hàm `sprintf`. Hàm này tham chiếu đến một mảng được lưu trữ tại `DAT_20000887`, tương ứng với phần bộ nhớ RAM dữ liệu trong bảng thông số kỹ thuật của nRF52832. Khi tôi kiểm tra vị trí của RAM trong bộ nhớ, tôi phát hiện rằng nó đang được ghi vào bởi hai hàm khác nhau. Chỉ vị trí đầu tiên là đáng quan tâm vì đó là nơi chứa địa chỉ IP cứng hóa. Vị trí thứ hai cho phép cập nhật địa chỉ IP sau này qua mạng không dây.

Flashing Firmware Mới Và Kết Quả Cuối Cùng

Khi bắt đầu với chức năng đầu tiên, tôi phát hiện ra các giá trị hex được mã hóa cứng trong bộ nhớ mà đã được ghi vào mảng như một phần của hàm chính. Những biến này tương ứng với địa chỉ IP mà tôi đã quan sát trên đồng hồ thông minh. Các vị trí trong bộ nhớ này là sáu byte dữ liệu trong firmware mà tôi cần sửa đổi để thay đổi địa chỉ IP và cổng. Một vấn đề nhỏ xuất hiện khi số cổng ban đầu là 38899, được lưu dưới dạng hai byte: 0x0c và 0x68. Chương trình biên dịch sử dụng lệnh `movn`, áp dụng phép toán Boolean `not` cho các giá trị mã hóa cứng trước khi đưa vào RAM. Về lý thuyết, lệnh này có thể được sửa đổi để loại bỏ phép toán `not`, nhưng tôi cố gắng giảm thiểu số byte cần thay đổi, do đó, tôi đã thêm một phép toán bổ sung khi chuyển đổi số cổng mong muốn thành các giá trị hex thích hợp.

Với những kiến thức này, tôi đã viết một kịch bản đơn giản để sửa đổi firmware với bất kỳ địa chỉ IP và cổng nào mà tôi muốn. Kịch bản cũng cập nhật checksum của từng dòng đã chỉnh sửa để đảm bảo rằng firmware khớp với định dạng mong đợi. Khi quá trình sửa chữa hoàn tất, tôi đã nạp lại firmware vào đồng hồ bằng cách sử dụng chương trình tiện ích lập trình của Nordic Semiconductor. Tôi rất vui mừng khi nói rằng nó đã hoạt động! Bằng cách cập nhật firmware để giao tiếp với máy chủ, chúng tôi có thể nhận dữ liệu từ điện thoại và xử lý nó.

Đó là phần kết thúc cho công đoạn đảo ngược kỹ thuật của dự án này. Tôi học được rất nhiều vì mình đến với kiến thức hạn chế về đảo ngược thiết bị ARM. Tuy nhiên, việc có ý tưởng rõ ràng về cách phát triển thiết bị và khả năng của nó giúp tôi thu hẹp những gì mình đang tìm kiếm đáng kể. Một điều thú vị là giao diện lập trình được mở ra qua cổng USB mà chưa từng thấy ở những chiếc đồng hồ khác; việc không có bảo vệ đọc-ghi trên firmware cũng khá hiếm gặp vì hầu hết các thiết bị IoT thường thực thi các biện pháp bảo vệ firmware sau khi sản xuất nhằm ngăn chặn việc sao chép dễ dàng.

Dù vậy, đây thực sự là một trải nghiệm thú vị và việc phục hồi cùng tái sử dụng những thiết bị điện tử có thể sẽ nằm im trong kho hoặc bị vứt bỏ mang lại thêm ý nghĩa cho dự án này.

Reference Articles

[Hướng dẫn] Hack firmware tiếng Việt cho Pebble ...

Cách làm ? Đơn giản lắm, bạn phải tải firmware mới nhất về, unpack nó ra, phân giải ngược gói .pbpack chứa các font dạng Bitmap, lấy một font có ...

Source: Tinhte.vn

Hướng dẫn cài đặt và sử dụng đồng hồ thông minh ...

Ấn và giữ nút nguồn phía dưới cạnh máy trong khoảng 3 giây, sau khi có tiếng nhạc và màn hình đồng hồ sáng lên thì bỏ tay ra. Hướng dẫn cách gắn ...

Source: Smartshop.vn

SÁCH HƯỚNG DẪN SỬ DỤNG

1 Mở ứng dụng Galaxy Wearable trên điện thoại của bạn. 2 Chạm vào Cài đặt đồng hồ → Tài khoản và sao lưu. 3 Chạm vào Samsung account và làm theo ...

Bắt đầu – Trung Tâm Trợ Giúp COROS

Bắt đầu · Giao diện Đồng hồ: Chọn để chọn giữa 5 giao diện đồng hồ được lưu trữ trên đồng hồ và tùy chọn màu chủ đề · Cài đặt Bài tập (truy cập ...


Demis Hassabis

Expert

Related Discussions

❖ Related Articles