Chào mừng đến với Ma trận

Việc hack phần cứng thường bị che giấu trong bí ẩn và được coi là một chủ đề cực kỳ phức tạp. Mặc dù có rất nhiều thành phần hack phần cứng phức tạp chuyên sâu, nhưng việc bắt chúng tôi thực sự khá đơn giản. Máy tính ngày nay vô cùng mạnh mẽ. Điều này cho phép họ xây dựng các tính năng và biện pháp an toàn bổ sung vào các giao thức liên lạc của mình để đảm bảo rằng các thông báo được truyền đi một cách đáng tin cậy. Hãy nghĩ về Giao thức điều khiển truyền tải (TCP), có nhiều dự phòng tại chỗ! Nó thậm chí còn gửi ba gói đầy đủ chỉ để bắt đầu liên lạc!

Trong thế giới của vi mạch, chúng ta thường không có được sự xa xỉ này. Để đảm bảo các giao thức liên lạc của chúng tôi hiệu quả nhất có thể, chúng tôi cần giữ chúng đơn giản nhất có thể. Để làm được điều đó, chúng ta cần bước vào thế giới của các số 0 và 1. Điều này sau đó đặt ra câu hỏi, làm thế nào để phần cứng lấy điện và tạo tín hiệu? Trong nhiệm vụ này, chúng tôi sẽ tập trung vào truyền thông kỹ thuật số. Đối với giao tiếp phần cứng, chúng tôi sử dụng một thiết bị có tên là Bộ phân tích logic để phân tích các tín hiệu. Thiết bị này có thể được kết nối với dây điện thực tế được sử dụng để liên lạc giữa hai thiết bị sẽ thu và giải thích các tín hiệu được gửi đi. Trong nhiệm vụ này, chúng tôi sẽ sử dụng bộ phân tích logic để xác định giao tiếp giữa hai thiết bị trong bộ cấy giả mạo.

Nhịp tín hiệu điện

Quay lại câu hỏi của chúng ta, nếu có điện, làm thế nào chúng ta có thể tạo ra tín hiệu số? Cách tiếp cận mà hầu hết các thành phần phần cứng thực hiện là chỉ cần bật và tắt nguồn. Nếu bật nguồn, chúng tôi đang truyền số 1. Nếu tắt nguồn, chúng tôi đang truyền số 0. Chúng tôi gọi đây là các bit 1 và 0. Để thực hiện giao tiếp, chúng ta chỉ cần bật và tắt nguồn theo một trình tự cụ thể để truyền một loạt các số 0 và 1. Nếu chúng tôi gửi 8 bit, chúng tôi đang gửi một byte! Chúng tôi vừa thực hiện giao tiếp phần cứng kỹ thuật số! Đây là những dòng nguệch ngoạc tuyệt vời mà bạn sẽ thấy trên máy phân tích logic.

Chúng tôi có thể truyền dữ liệu văn bản bằng cách sử dụng bảng ASCII. Gửi biểu diễn nhị phân của mỗi ký tự, chúng ta có thể truyền dữ liệu! Tuy nhiên, nó thực sự không chỉ đơn giản như vậy. Nếu chúng tôi muốn nỗ lực bằng không trong giao tiếp của mình, chúng tôi sẽ cần một dây điện cho mỗi 0 hoặc 1 mà chúng tôi muốn truyền. Xét rằng một ký tự đơn là một byte dữ liệu (do đó có 8 dây điện), điều này có thể trở thành một mớ dây rất nhanh! Để làm cho điều này hiệu quả hơn, chúng tôi cần sử dụng ít dây hơn và sau đó yêu cầu cả hai chip phần cứng đồng ý với một giao thức và cấu hình kỹ thuật số cụ thể sẽ được sử dụng để truyền dữ liệu. Hãy xem xét một số giao thức phổ biến nhất và cách chúng hoạt động để gửi dữ liệu tĩnh trong khi giảm số lượng dây chúng ta cần.

USART

Giao tiếp Universal Synchronous/Asynchronous Receiver-Transmitter (USART), hay được biết đến nhiều hơn, giao tiếp nối tiếp, là một giao thức sử dụng hai dây. Một dây được sử dụng để transmit (TX) từ thiết bị A sang thiết bị B và dây còn lại được sử dụng để receive (RX) trên thiết bị A từ thiết bị B. Về bản chất, chúng tôi kết nối cổng truyền từ một thiết bị với thiết bị nhận port từ thiết bị kia và ngược lại.

Điều thú vị về giao thức này là không có dòng đồng hồ nào đồng bộ hóa giao tiếp của các thiết bị. Không có đồng hồ, các thiết bị phải đồng ý với cấu hình giao tiếp, chẳng hạn như sau:

  • Tốc độ giao tiếp – Đây còn được gọi là tốc độ truyền hoặc tốc độ bit và chỉ ra tốc độ gửi byte dữ liệu. Việc đồng ý với một tốc độ cụ thể sẽ cho mỗi thiết bị biết tốc độ lấy mẫu dữ liệu để có được thông tin liên lạc chính xác. Mặc dù có các tiêu chuẩn cố định cho tốc độ truyền, các thiết bị có thể chọn sử dụng bất kỳ tốc độ nào khác miễn là cả hai thiết bị đều hỗ trợ tốc độ đó.
  • Số bit trên mỗi lần truyền – Giá trị này thường được đặt thành 8 bit tạo nên một byte, nhưng nó có thể được cấu hình thành thứ khác, chẳng hạn như 16 bit.
  • Các bit Stop và Start – Vì không có đồng hồ nên một thiết bị phải gửi tín hiệu đến thiết bị kia trước khi thiết bị đó có thể gửi hoặc kết thúc truyền dữ liệu. Cấu hình của các bit bắt đầu và dừng chỉ ra cách thực hiện điều này.
  • Các bit chẵn lẻ – Vì có thể có lỗi trong quá trình truyền thông, các bit chẵn lẻ có thể được sử dụng để phát hiện và sửa các lỗi đó trong quá trình truyền.

Tuy nhiên, có một vài lưu ý. Các thiết bị không thực sự có cách để xác định xem thiết bị kia đã sẵn sàng để liên lạc hay chưa. Để giải quyết vấn đề này, một số kết nối USART sẽ sử dụng hai đường bổ sung có tên Clear To Send (CTS) và Request to Send (RTS) để liên lạc với thiết bị kia xem thiết bị đó đã sẵn sàng nhận hay sẵn sàng truyền. Ngoài ra, để thống nhất mức điện áp nào là nhị phân 1 hoặc 0, cần có dây thứ ba được gọi là dây Ground (GND) để cho phép các thiết bị có cùng tham chiếu điện áp.

Tuy nhiên, bất chấp tất cả những điều này, USART là một giao thức cực kỳ phổ biến trong các bộ vi xử lý do tính đơn giản của nó.

SPI

Giao thức giao tiếp Serial Peripheral Interface (SPI) chủ yếu được sử dụng để giao tiếp giữa các bộ vi xử lý và các thiết bị ngoại vi nhỏ như cảm biến hoặc thẻ SD. Trong khi giao tiếp USART có đồng hồ tích hợp trong các dòng TX RX, SPI sử dụng một dây đồng hồ riêng. Việc tách đồng hồ (SCK) khỏi đường dữ liệu (DATA) cho phép giao tiếp đồng bộ, nhanh hơn và đáng tin cậy hơn. Vì vậy, sự đánh đổi là thêm một dây bổ sung, nhưng chúng tôi đạt được tốc độ và độ tin cậy tăng lên. Một ví dụ về cùng một chữ “S” được truyền bằng SPI:

Dòng đồng hồ cho thiết bị nhận biết chính xác thời điểm nó cần đọc dòng dữ liệu. Giao tiếp hai chiều cũng có thể thực hiện được, nhưng phức tạp hơn một chút so với giao tiếp nối tiếp. Về cơ bản, một trong các thiết bị được dán nhãn là bộ điều khiển. Đây là thiết bị duy nhất được phép gửi tín hiệu đồng hồ. Tất cả các thiết bị khác trở thành thiết bị phụ phải tuân theo tín hiệu đồng hồ của bộ điều khiển để truyền dữ liệu trở lại. Nếu sử dụng giao tiếp hai chiều, thay vì có một đường dữ liệu duy nhất, hai đường được sử dụng, đó là Peripheral-In Controller-Out (PICO), có nghĩa là giao tiếp được gửi từ bộ điều khiển và Peripheral-Out Controller-In (POCI), có nghĩa là thông tin liên lạc được gửi từ thiết bị phụ trở lại bộ điều khiển. Sử dụng điều này, bộ điều khiển sẽ gửi tín hiệu đồng hồ và lệnh ra thiết bị bằng đường PICO, sau đó giữ tín hiệu đồng hồ, bộ điều khiển nhận lại dữ liệu trên đường PICO.

Có một thay đổi bổ sung có thể được thực hiện. Mặc dù chỉ có thể có một bộ điều khiển, nhưng có thể có nhiều thiết bị phụ. Để tiết kiệm dây và cổng, tất cả các thiết bị có thể sử dụng cùng một đường SCK, PICO POCI. Dây thứ tư, được gọi là dây Chip Select (CS), được sử dụng để phân biệt thiết bị mà giao tiếp dành cho. Bộ điều khiển có thể sử dụng dòng này để chỉ ra thiết bị cụ thể mà nó muốn giao tiếp với nó.

Giao tiếp SPI phức tạp hơn một chút so với USART, nhưng việc có một đường đồng hồ chuyên dụng sẽ tăng tốc độ chúng ta có thể giao tiếp và cải thiện độ tin cậy.

I2C

Giao thức truyền thông Inter-Integrated Circuit (I2C) được tạo ra để giải quyết các nhược điểm của cả giao thức truyền thông USART SPI. Vì USART không đồng bộ và có đồng hồ tích hợp trong các đường truyền và nhận, các thiết bị phải đồng ý trước về cấu hình giao tiếp. Hơn nữa, tốc độ được giảm xuống để đảm bảo thông tin liên lạc vẫn đáng tin cậy. Mặt khác, mặc dù SPI nhanh hơn và đáng tin cậy hơn, nhưng nó yêu cầu nhiều dây hơn để liên lạc và mỗi thiết bị ngoại vi bổ sung đều yêu cầu thêm một dây CS.

I2C cố gắng giải quyết những vấn đề này. Tương tự như USART, I2C chỉ sử dụng hai đường để liên lạc. I2C sử dụng đường Serial Data (SDA) và đường Serial Clock (SCL) để liên lạc. Tuy nhiên, thay vì sử dụng dây CS để xác định thiết bị ngoại vi nào đang được giao tiếp, I2C sử dụng tín hiệu Địa chỉ được gửi trên dây SDA. Địa chỉ này cho tất cả các bộ điều khiển và thiết bị ngoại vi biết thiết bị nào đang cố gắng giao tiếp và thiết bị đó đang cố gắng giao tiếp với thiết bị nào. Sau khi tín hiệu được gửi, tín hiệu Dữ liệu có thể được sử dụng để gửi giao tiếp thực tế. Để thông báo cho các bộ điều khiển và thiết bị ngoại vi khác rằng giao tiếp đang diễn ra và ngăn các thiết bị này nói chuyện với nhau, tín hiệu Bắt đầu và Dừng được sử dụng. Mỗi thiết bị có thể theo dõi các tín hiệu Bắt đầu và Dừng này để xác định xem các đường dây có đang bận liên lạc hay không. Một ví dụ về việc truyền dữ liệu như sau:

Do đường dây đồng hồ bên ngoài được sử dụng nên giao tiếp vẫn nhanh hơn và đáng tin cậy hơn USART và mặc dù chậm hơn một chút so với SPI, nhưng việc sử dụng tín hiệu Địa chỉ có nghĩa là có thể kết nối tối đa 1008 thiết bị với hai đường dây giống nhau và sẽ có thể giao tiếp

Pháp y phần cứng

Quan sát sơ đồ mạch điện pháp y đã được phân tích sau đây:

Dựa trên sơ đồ, có vẻ như có một bộ vi xử lý được kết nối với chip ESP32. Chúng ta có thể biết rằng các chip ESP32 cho phép các bộ vi xử lý giao tiếp qua WiFi và mạng Di động. Vì vậy, bất kể bộ phận cấy ghép này đang làm gì, nó chắc chắn đang giao tiếp với người khác. Nếu chúng tôi có thể chặn liên lạc giữa bộ vi xử lý và chip ESP32, chúng tôi sẽ có thể xem những lệnh và thông tin nào đang được gửi.

Pháp y nhận ra rằng con chip này có thể sử dụng giao tiếp kỹ thuật số có thể bị chặn bằng Logic Analyser. Nhìn vào dây giữa các chip, chúng ta thấy một dây màu đen được kết nối với một chân có tên là GND và một dây màu đỏ được kết nối với một chân có tên là VIN. Từ kinh nghiệm, đây sẽ lần lượt là dây Nối đất và dây Điện áp vào, nghĩa là những dây này được sử dụng để cung cấp năng lượng cho chip. Còn lại các dây màu xanh lá cây và màu tím sẽ được sử dụng để truyền dữ liệu. Thấy rằng chúng được kết nối với các chân RX0 và ​​TX0, ta có thể suy luận rằng điều này đề cập đến các đường Truyền và Nhận của giao tiếp USART.

Phân tích logic

Để phân tích logic data dump, chúng ta sẽ cần sử dụng công cụ logic analyser có tên là Saleae.

Chọn tùy chọn Open a Capture và chọn tệp logic data dump từ pháp y cung cấp. Sau khi tải, bạn sẽ có thể xem các capture. Nếu bạn giữ Ctrl lăn chuột để thu nhỏ một chút, bạn sẽ thấy các tín hiệu kỹ thuật số:

D0 và D1 đề cập đến các kênh kỹ thuật số của hai dòng đã được thăm dò. A0 và A1 đề cập đến dữ liệu tương tự từ đầu dò. Di chuột qua tín hiệu dày đầu tiên trên kênh D1 1 và sử dụng Ctrl lăn chuột để phóng to lại, bạn sẽ thấy toàn bộ quá trình truyền tín hiệu:

Điều rất thú vị từ màn hình này là bạn có thể thấy dữ liệu điện áp analog tương ứng với tín hiệu kỹ thuật số được nhìn thấy như thế nào. Nhìn vào Kênh 1 A1 so với Kênh 1 D1, bạn có thể thấy rằng có một số lỗi nhỏ trong dữ liệu tương tự đã được sửa trong kênh kỹ thuật số. Bây giờ chúng ta có thể xem dữ liệu tín hiệu kỹ thuật số, chúng ta có thể tìm cách sử dụng bộ phân tích logic để đọc nội dung của dữ liệu. Nhấp vào tab Trình phân tích ở bên phải:

Vì chúng ta biết giao thức là USART, nên hãy xem cách định cấu hình bộ phân tích Async Serial cho cả Kênh 1 và 0. Trước tiên, hãy định cấu hình bộ phân tích của Kênh 1. Nếu chúng ta là kỹ sư đảo ngược phần cứng thực sự, trước tiên chúng ta phải tìm ra tốc độ truyền dữ liệu cũng như cấu hình cụ thể chẳng hạn như bit chẵn lẻ và khung. Thay đổi cấu hình của bạn như sau và nhấn Save.

Sau khi lưu, chúng ta có thể thấy rằng dữ liệu đang được phân tích. Nhấp vào biểu tượng Terminal để xem được dữ liệu đã phân tích!

Chúng tôi thấy trình tự khởi tạo của dòng nối tiếp và sau đó ba dòng dữ liệu được gửi. Điều này chưa có ý nghĩa gì vì chúng ta chỉ nhìn thấy một phần của dữ liệu. Để xem các thông tin khác, chúng tôi cần thêm một bộ phân tích khác vào Kênh 0. Nhấp vào biểu tượng dấu cộng bên cạnh Bộ phân tích và thêm một bộ phân tích Async Serial khác có cùng cấu hình, và chọn Kênh 0. Kết quả phân tích sẽ như sau:

Bây giờ chúng tôi đang bắt đầu ghép các thông tin lại với nhau! Có vẻ như bộ vi xử lý đang thiết lập phiên làm việc với thiết bị ESP32 để cho phép giao tiếp với máy chủ điều khiển! Bây giờ chúng ta có thể thấy cuộc thảo luận đầy đủ giữa hai thiết bị. Bộ xử lý yêu cầu ESP32 khởi động lại kết nối của nó với máy chủ điều khiển. ESP32 rất sẵn lòng bắt buộc nhưng yêu cầu gửi mã bảo mật để cho phép kết nối với máy chủ điều khiển. Khi mã bảo mật đã được truyền đi, ESP32 cho phép bộ vi xử lý thương lượng tốc độ truyền mới được sử dụng để liên lạc. Thật thú vị, một khi tốc độ truyền mới này được chấp nhận, chúng ta không thể đọc phần còn lại của đầu ra! Tuy nhiên, chúng ta có thể chỉ cần chỉnh sửa bộ phân tích Kênh 0 của mình thành tốc độ truyền mới để đọc phần còn lại của thông tin liên lạc đã được gửi.

Đây là tiến bộ tuyệt vời! Chúng tôi có thể đọc giao tiếp ban đầu giữa hai thiết bị này được sử dụng để thiết lập kết nối với máy chủ điều khiển. Bây giờ chúng tôi có thông tin này, chúng tôi có thể tiếp tục theo dõi các dòng và phân tích logic để xem bất kỳ tin nhắn nào được gửi.

Leave a Reply

This site uses cookies to offer you a better browsing experience. By browsing this website, you agree to our use of cookies.