<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Chuyện Nghề on Vũ Văn</title><link>https://vuvtdhh.pages.dev/categories/chuy%E1%BB%87n-ngh%E1%BB%81/</link><description>Recent content in Chuyện Nghề on Vũ Văn</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>Vũ Văn</copyright><lastBuildDate>Sun, 19 Apr 2026 22:40:59 +0700</lastBuildDate><atom:link href="https://vuvtdhh.pages.dev/categories/chuy%E1%BB%87n-ngh%E1%BB%81/index.xml" rel="self" type="application/rss+xml"/><item><title>Tôi làm "Hacker"</title><link>https://vuvtdhh.pages.dev/p/t%C3%B4i-l%C3%A0m-hacker/</link><pubDate>Sun, 19 Apr 2026 22:40:59 +0700</pubDate><guid>https://vuvtdhh.pages.dev/p/t%C3%B4i-l%C3%A0m-hacker/</guid><description>&lt;p&gt;Gọi là &amp;ldquo;hack&amp;rdquo; nghe cho nguy hiểm, thật ra việc này gần với &lt;em&gt;Reverse Engineering&lt;/em&gt; và &lt;em&gt;Protocol Analysis&lt;/em&gt; hơn (&lt;em&gt;về sau tôi mới biết các khái niệm này&lt;/em&gt;). Đây là một nhiệm vụ được công ty giao, không gây thiệt hại cho bất cứ ai hay tổ chức nào vì&amp;hellip; đọc hồi sau sẽ rõ!&lt;/p&gt;
&lt;p&gt;Sau khi tốt nghiệp, tôi gia nhập phòng R&amp;amp;D của công ty cung cấp giải pháp IoT về năng lượng.&lt;/p&gt;
&lt;p&gt;Ngày đó, chúng tôi có một hệ thống đang chạy. Do một số vấn đề khách quan trong quá trình lưu trữ. Không còn bất kỳ thông tin gì để xác định được nó đang chạy trên phiên bản nào (&lt;em&gt;chúng tôi có nhiều phiên bản với các chức năng khác nhau&lt;/em&gt;). Hơn nữa, cũng chưa có một công cụ nào có thể giao tiếp hiệu quả với các hệ thống dạng này.&lt;/p&gt;
&lt;p&gt;Tôi được giao một source code mà không chắc có trùng khớp với hệ thống kia hay không. Nhiệm vụ của tôi là cố gắng hiểu nó đang chạy thế nào và giao tiếp để lấy được thông tin, ít nhất là số hiệu phiên bản.&lt;/p&gt;
&lt;p&gt;Tôi nhận source code và bắt đầu nghiên cứu, xem ra cũng khá phức tạp, hệ thống này là một server giao tiếp với các thiết bị IoT thông qua socket.&lt;br&gt;
Giao thức giữa server và client được định nghĩa trên các mảng byte. Mỗi vị trí byte ẩn chứa một ý nghĩa riêng: một số vị trí là mã lệnh, một số là checksum, một số là payload. Toàn bộ gói tin được mã hóa.&lt;/p&gt;
&lt;p&gt;Tôi bắt đầu dựng lab và viết một chương trình giả lập thiết bị IoT để giao tiếp với source code kia.&lt;br&gt;
Trải qua hơn một tuần thử và sai, tìm và thiết lập hàng trăm hàm mã hóa, đặt hàng nghìn breakpoint. Cuối cùng, tôi đã có thể giao tiếp và lấy được thông tin, bao gồm cả số hiệu phiên bản.&lt;/p&gt;
&lt;p&gt;Tôi vui mừng báo lại với sếp, chuyển sang giao tiếp với server thật thay vì lab đã dựng. Và&amp;hellip; không nhận được bất kỳ phản hồi nào.&lt;br&gt;
Có thể là server kia đang chạy một phiên bản khác chăng? Hoặc&amp;hellip;?! À, tôi nhớ ra là cần NAT port, giao thức này yêu cầu server phải chủ động kết nối ngược lại client, và nếu máy tôi nằm sau Router mà không NAT port thì gói tin phản hồi sẽ &amp;ldquo;mất tích&amp;rdquo; ngoài cửa ngõ.&lt;/p&gt;
&lt;p&gt;Nhưng&amp;hellip; thử nhiều cách, tôi vẫn không thể giao tiếp được với server kia như tôi đã làm được với lab.&lt;br&gt;
Tôi chấp nhận rằng mọi chuyện không đơn giản như vậy. Chỉ dựa vào lượng thông tin ít ỏi tôi có để tìm cách giao tiếp với server kia là không thể.&lt;br&gt;
Không có gì đảm bảo phiên bản source code tôi có, hàm mã hóa và giao thức tôi reverse thành công là trùng khớp với phiên bản đang chạy.&lt;/p&gt;
&lt;p&gt;Dẫu vậy, công cụ tôi phát triển để giao tiếp với server kia vẫn rất hữu ích, nó mở ra nhiều thứ. Nhờ đó, chúng tôi giao tiếp với các server và thiết bị IoT khác một cách linh hoạt hơn.&lt;/p&gt;
&lt;p&gt;Sau lần này, tôi học được nhiều kiến thức mà lúc đi học ở trường không dạy, cả về chuyên môn lẫn kỹ năng giải quyết vấn đề.&lt;br&gt;
Tôi bắt đầu có hứng thú với bảo mật, mã hóa và các loại giao thức. Những kiến thức này giúp ích cho tôi nhiều và như một kim chỉ nam trong quá trình thiết kế các hệ thống phần mềm về sau.&lt;/p&gt;
&lt;p&gt;Dù kết quả cuối cùng không như mong đợi ban đầu, nhưng những gì học được đối với tôi là vô giá.&lt;br&gt;
Tôi nhận ra rằng, để thiết kế một hệ thống thực sự an toàn, cần phải thấu hiểu tường tận cơ chế vận hành của nó.&lt;br&gt;
Cách tốt nhất để bảo vệ hệ thống chính là hiểu được cách mà nó có thể bị tấn công. Mà cách nhanh nhất để hiểu, không gì bằng tự mình mày mò như cách tôi đã làm.&lt;/p&gt;
&lt;p&gt;Cũng từ đó mà tôi mắc &amp;ldquo;bệnh nghề nghiệp&amp;rdquo;, mỗi khi được nhờ thử nghiệm một hệ thống nào đó, tôi lại không nhịn được mà &amp;ldquo;chọc ngoáy&amp;rdquo; một chút, để xem có vô tình kích hoạt được &amp;ldquo;tính năng ẩn&amp;rdquo; nào không &amp;#x1f606;.&lt;/p&gt;</description></item></channel></rss>