การแยกข้อมูล RGB ในการดักจับ USB
บทช่วยสอนนี้จะแสดงวิธีถอดรหัสข้อมูล USB เพื่อนำอุปกรณ์มาใช้งานใน SignalRGB
การจัดเรียงข้อมูล
หัวข้อที่มีชื่อว่า “การจัดเรียงข้อมูล”ก่อนที่เราจะพยายามตีความข้อมูล USB ที่ดักจับได้ เราจะต้องจัดเรียงข้อมูลเพื่อค้นหาแพ็กเก็ตที่เฉพาะเจาะจง
ใน Wireshark:
- เปิดไฟล์ข้อมูล USB ที่ดักจับไว้
- คลิกที่ส่วนหัว ‘Info’ เพื่อจัดเรียงตามประเภทแพ็กเก็ต
- เลื่อนดูจนกว่าจะพบประเภท URB_INTERRUPT OUT หรือ SET_REPORT Request
หากคุณไม่พบคำสั่งใดข้างต้น คุณอาจกำลังทำงานกับอุปกรณ์ RAWUSB หรืออาจดักจับข้อมูลไม่ถูกต้อง หากคุณมีอุปกรณ์ RAWUSB คุณจะเห็นคำสั่ง URBBULK_OUT หรือ URB_CONTROL OUT หากคุณมีอุปกรณ์ RAWUSB โปรดเข้าร่วมเซิร์ฟเวอร์ Discord นี้เพื่อรับความช่วยเหลือด้านการพัฒนา
การค้นหาแพ็กเก็ต RGB
หัวข้อที่มีชื่อว่า “การค้นหาแพ็กเก็ต RGB”แพ็กเก็ตที่เราจะมองหาเป็นอันดับแรกคือแพ็กเก็ตที่มีค่า RGB ที่เราตั้งไว้ขณะดักจับแพ็กเก็ต USB
หมายเหตุ: ตอนนี้เราจะตั้งใจละเว้นแพ็กเก็ตการเริ่มต้นอุปกรณ์ไปก่อน แพ็กเก็ตเหล่านี้อาจจำเป็นในภายหลัง
ข้อมูลที่ถูกส่งในแต่ละแพ็กเก็ตจะอยู่หลังข้อมูลส่วนหัวของโปรโตคอล USB ทั้งหมด หากต้องการดูข้อมูลนี้ เราจะต้องค้นหาส่วน Data Fragment
- เลือกแพ็กเก็ต
- เลือกฟิลด์ HID Data หรือขยายส่วน Setup Data แล้วเลือกฟิลด์ Data Fragment
- การคลิกที่ฟิลด์จะไฮไลต์ส่วนข้อมูลเป็นสีน้ำเงินที่ด้านล่างของ Wireshark ด้วย
- ฟิลด์ที่เลือกจะแสดงข้อมูลที่ส่งโดยไม่มีการเว้นวรรค ในมุมมองนี้ทุก 2 ตัวอักษรคือหนึ่งไบต์

หมายเหตุ: ค่าที่เรากำลังดูจะอยู่ในรูปแบบ HEX (ฐาน 16) ซึ่งเป็นรูปแบบข้อมูลที่แทนค่า 0 ถึง 255 ในฐานสิบด้วยค่า 0x00 ถึง 0xFF
โครงสร้างแพ็กเก็ต
หัวข้อที่มีชื่อว่า “โครงสร้างแพ็กเก็ต”เนื่องจากเราตั้งค่าสีแดง เขียว และน้ำเงินเป็นค่าสูงสุดในคู่มือการดักจับข้อมูล USB เราจึงจะมองหาค่า 0xFF ในข้อมูลแพ็กเก็ตที่ดักจับได้ หากคุณใช้สีอื่นในการดักจับ คุณจะต้องทราบค่าสี HEX ที่ใช้ หรือดักจับใหม่ด้วยสีที่ทราบค่า
โดยทั่วไปแพ็กเก็ตไฟของอุปกรณ์จะประกอบด้วยส่วนหัวที่ระบุว่าแพ็กเก็ตนั้นใช้สำหรับคำสั่งใด และกำลังระบุโซนไฟใดของอุปกรณ์ ตามด้วยข้อมูล RGB และในบางกรณีอาจมีข้อมูลส่วนท้าย เช่น CRC checksum
ข้อมูล RGB มักอยู่ในรูปแบบไม่กี่แบบ ซึ่งเราสามารถตรวจสอบได้โดยมองหาสีที่เราตั้งไว้ในการดักจับ:
- R, G, B, R, G, B, R, G, B (แดง -> เขียว -> น้ำเงิน -> ซ้ำ)
- RRR, GGG, BBB (แดงหลายตัว -> เขียวหลายตัว -> น้ำเงินหลายตัว -> ซ้ำ)
- Br, R, G, B (ความสว่าง -> แดง -> เขียว -> น้ำเงิน -> ซ้ำ)
หมายเหตุ: อุปกรณ์บางรุ่นจะใช้ลำดับสีที่ต่างออกไป แม้ว่าส่วนใหญ่จะใช้ RGB แต่คุณอาจพบว่าอุปกรณ์ของคุณใช้ GBR, BGR หรือการผสมแบบอื่น
ในกรณีของเรา ค่าที่เรากำลังมองหาจะเป็น:
- 0xff, 0x00, 0x00 | 0x00, 0xff, 0x00 | 0x00, 0x00, 0xff (หากอุปกรณ์ใช้ลำดับแพ็กเก็ตแบบ R,G,B)
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 (หากอุปกรณ์ใช้ลำดับแพ็กเก็ตแบบ RRR,GGG,BBB)
- 0xff, 0xff, 0x00, 0x00 | 0xff, 0x00, 0xff, 0x00 | 0xff, 0x00, 0x00, 0xff (หากอุปกรณ์ใช้ลำดับแพ็กเก็ตแบบ Br,R,G,B)
หมายเหตุ: ตัวอย่างข้างต้นเป็นเพียงโครงสร้างแพ็กเก็ตทั่วไปบางแบบของอุปกรณ์ และอาจไม่ได้ใช้ได้เสมอไป คุณจะต้องเปรียบเทียบและมองหาความคล้ายคลึงกัน
การตรวจสอบแพ็กเก็ต
หัวข้อที่มีชื่อว่า “การตรวจสอบแพ็กเก็ต”เมื่อเลื่อนลงดูแพ็กเก็ต เราพบว่าแพ็กเก็ต 271 ในข้อมูลที่ดักจับมีไบต์ที่ดูคล้ายกับโครงสร้างแพ็กเก็ตแบบ R,G,B
หมายเหตุ: อุปกรณ์บางรุ่นอาจใช้หลายแพ็กเก็ตในการตั้งค่าสีทั่วทั้งอุปกรณ์ โปรดดูแพ็กเก็ตถัด ๆ ไปและตรวจสอบให้แน่ใจว่าคุณพบจุดที่แพ็กเก็ตแรกเริ่มซ้ำ

เราจะทำเครื่องหมายแพ็กเก็ตนี้โดยใช้ฟังก์ชัน MARK/UNMARK Packet ใน Wireshark ซึ่งทำได้โดยกดปุ่ม CTRL + M พร้อมกัน หรือคลิกขวาที่แพ็กเก็ตแล้วคลิก MARK/UNMARK Packet
เพื่อยืนยันว่าแพ็กเก็ตนี้เป็นหนึ่งในแพ็กเก็ตข้อมูลสีของเราจริง ๆ เราจะเลื่อนลงต่อไปเพื่อมองหาแพ็กเก็ตอื่นที่ตรงกับโครงสร้าง R,G,B ของเรา เราจะดูด้วยว่าแพ็กเก็ตเหล่านี้เป็นไปตามลำดับที่เราตั้งสีไว้ในซอฟต์แวร์ต้นฉบับหรือไม่ นี่เป็นจังหวะที่ดีในการดูส่วนหัวของแพ็กเก็ตว่ามีการเปลี่ยนแปลงหรือไม่ หากมีการเปลี่ยนแปลงเป็นรูปแบบ มีความเป็นไปได้สูงว่าคุณจะต้องใช้หลายแพ็กเก็ตในการตั้งค่า LED ทั้งหมดบนอุปกรณ์
เมื่อดูแพ็กเก็ต 271, แพ็กเก็ต 273 และแพ็กเก็ต 275 เทียบกัน เราจะเห็นว่าข้อมูล RGB ดูเหมือนจะเป็นสีแดงเท่านั้นในแพ็กเก็ต 271 (0xFF, 0x00, 0x00) สีเขียวเท่านั้นในแพ็กเก็ต 273 (0x00, 0xFF, 0x00) และสีน้ำเงินเท่านั้นในแพ็กเก็ต 275 (0x00, 0x00, 0xFF) เมื่อดูข้อมูลส่วนหัวที่อยู่เหนือส่วน RGB เราจะเห็นว่าข้อมูลนี้ ไม่ เปลี่ยนแปลงระหว่างทั้งสามแพ็กเก็ต ซึ่งน่าจะหมายความว่าเรากำลังเปลี่ยนโซนสีเดียวกันในแพ็กเก็ตเหล่านี้
- นอกจากนี้ เรายังสามารถใช้แพ็กเก็ตสีเพื่อระบุว่าอุปกรณ์มีกี่โซน โดยตรวจสอบว่าค่าที่เราทราบปรากฏขึ้นกี่ครั้งในแพ็กเก็ตข้อมูล RGB จากตัวอย่างด้านล่าง เราจะเห็นว่าอุปกรณ์มี 4 โซนที่เราสามารถระบุได้อย่างแน่นอน


เราจะไล่ดูแพ็กเก็ตต่อไปจนกว่าจะพบแพ็กเก็ตทั้งหมดที่มีข้อมูลสีและทำเครื่องหมายไว้ หลังจากนั้นเราจะไปต่อที่การสร้างไฟล์ปลั๊กอิน