วิศวกรรมย้อนกลับสำหรับทุกคน
(0xinfection.github.io)- Reverse Engineering For Everyone คือชุดบทแนะนำที่สร้างขึ้นเพื่อให้ผู้เริ่มต้นเรียนวิศวกรรมย้อนกลับสามารถทำความเข้าใจแนวคิดและลำดับของการฝึกปฏิบัติได้
- วิศวกรรมย้อนกลับคือกระบวนการแยกชิ้นส่วนสิ่งประดิษฐ์เพื่อเปิดเผย การออกแบบ สถาปัตยกรรม โค้ด หรือดึงความรู้ออกมา
- หลักสูตรครอบคลุม x86, x64, ARM-32, ARM-64 และมุ่งเป้าไปทั้งผู้อ่านมือใหม่และผู้ที่ต้องการทบทวนแนวคิด
- เนื้อหาถูกจัดเรียงให้เริ่มได้แม้ไม่มีพื้นฐานมาก่อน ทำให้สามารถเรียนรู้แบบค่อยเป็นค่อยไปจนถึง พื้นฐานระดับกลาง ของวิศวกรรมย้อนกลับ
- ชุดบทแนะนำทั้งหมดสามารถดาวน์โหลดได้ในรูปแบบ PDF และ MOBI และเมื่อมีการเพิ่มบทแนะนำใหม่ เวอร์ชันอีบุ๊กก็จะอัปเดตโดยอัตโนมัติ
เป้าหมายของวิศวกรรมย้อนกลับ
- วิศวกรรมย้อนกลับยังถูกเรียกว่า backwards engineering หรือ back engineering
- เป็นกระบวนการแยกชิ้นส่วนสิ่งประดิษฐ์เป้าหมายเพื่อเปิดเผย การออกแบบ สถาปัตยกรรม โค้ด ภายใน หรือสกัดความรู้ออกมา
- คล้ายกับการวิจัยทางวิทยาศาสตร์ แต่แตกต่างกันตรงที่การวิจัยทางวิทยาศาสตร์ศึกษาปรากฏการณ์ทางธรรมชาติ
- ชุดบทแนะนำนี้มุ่งเน้นให้เรียนรู้วิศวกรรมย้อนกลับได้แบบ เรียบง่ายที่สุดเท่าที่เป็นไปได้
หลักสูตรและกลุ่มเป้าหมายการเรียนรู้
- กระบวนการหลักที่ครอบคลุมมีดังนี้
- เหมาะทั้งสำหรับ ผู้เริ่มต้น ที่ต้องการเรียนรู้การรีเวิร์ส และผู้อ่านที่ต้องการทบทวนแนวคิดที่เคยเรียนมาแล้ว
- ผู้เริ่มต้นสามารถเรียนรู้ได้ตั้งแต่ไม่มีความรู้พื้นฐานไปจนถึง พื้นฐานระดับกลาง ของวิศวกรรมย้อนกลับ
- สามารถตรวจสอบส่วนต่าง ๆ ที่ครอบคลุมไปแล้วผ่านแถบด้านข้าง และทบทวนแนวคิดที่จำเป็นได้
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
การทำ reverse engineering สามารถทำได้โดยไม่จำเป็นต้องเข้าไปดูตัวเป้าหมายโดยตรงเสมอไป
บทความที่ Andrew Tridgell อธิบายกระบวนการทำ reverse engineering โปรโตคอล SMB ของ Microsoft ด้วย “French cafe technique”: https://www.samba.org/ftp/tridge/misc/french_cafe.txt
Tridge ยังเคยทำ reverse engineering ซอฟต์แวร์ proprietary อย่าง BitKeeper ซึ่ง Linus เคยใช้โฮสต์การพัฒนาเคอร์เนล Linux อยู่ช่วงหนึ่งด้วย เขาค้นพบว่าถ้าเชื่อมต่อด้วย telnet ไปยังที่อยู่:พอร์ตของ BitKeeper แทนที่จะใช้ไคลเอนต์เฉพาะ ก็สามารถพิมพ์
helpได้ และจะมีรายการคำสั่งที่ลองใช้ได้แสดงออกมาเมื่อใช้คำสั่งเหล่านั้นสอบถาม repository ก็สามารถเข้าใจโครงสร้างข้อมูลภายในทั้งหมดได้โดยไม่ต้องใช้หรือ disassemble ซอฟต์แวร์ proprietary และเมื่อ Larry McVoy เจ้าของ BitKeeper ถอนสิทธิ์การใช้งานจากชุมชน Linux เพราะการทำ reverse engineering นี้ Linus จึงสร้าง git ขึ้นมา
การที่
helpแสดงรายการคำสั่งออกมาเป็น การตัดสินใจด้านวิศวกรรม/UI ที่ดีของนักพัฒนา BitKeeper แต่ก็น่ากังวลว่าบทเรียนที่ได้จะกลายเป็นว่า “อย่าทำให้ซอฟต์แวร์เป็นมิตรเกินไป”อีกอย่าง การคุยกับซอฟต์แวร์ผ่านเครือข่ายก็น่าจะถือว่าเป็นการ “ใช้งาน” ซอฟต์แวร์นั้นอย่างชัดเจนไม่ใช่หรือ
ผมไม่เคยคิดว่า reverse engineering เป็นสาขาที่เรียนจากหนังสือได้ ตั้งแต่เด็กก็เรียนจากการลงมือทำเองทั้งหมด
ผมเรียนรู้วิธีใช้ Cheat Engine สแกนและแก้ไขหน่วยความจำของโปรเซสเกมวิดีโอ วิธีอ่านและส่งแพ็กเก็ต MMO ซ้ำเพื่อพยายามโกง วิธีสร้าง DLL กับ hook แล้ว inject เข้าโปรเซส และวิธีทำแพตช์ไฟล์ executable เพื่อแก้โจทย์ crackme
ลองเล่นกับซอฟต์แวร์จริงที่ต้องใช้ license key เพื่อทำให้ไม่ต้องใช้คีย์หรือยอมรับคีย์อะไรก็ได้ วิเคราะห์ฟอร์แมตไบนารีอย่างไฟล์เซฟเกมเพื่อเอาไปใช้โกง แล้วสุดท้ายก็ใช้ทักษะและความรู้นั้นหางานจริงและทำเงินได้
ในทางปฏิบัติ มันเป็นสิ่งที่ต้องลองทำเองและใช้เวลา บทเรียนต้นฉบับดูเว้นช่วงมากเกินไป และแม้จะพยายามครอบคลุมหลายอย่าง แต่ก็รู้สึกว่าไม่ได้สอนทักษะ reverse engineering ได้มากกว่าระดับที่คนส่วนใหญ่จะเรียนรู้ได้หลังลองเล่นไม่กี่ชั่วโมง
ในทางกลับกัน beginners.re มีเนื้อหามหาศาล แต่ลึกกว่าและค่อยเป็นค่อยไปมากกว่า ส่วนแบบฝึกหัดภาคปฏิบัติ crackmes อาจเหมาะกว่า
ในโปรเจกต์ reverse engineering เกมวิดีโอที่กำลังทำอยู่ ผมได้คุยกับ modder สายเรียนเองที่ไม่รู้การเขียนโปรแกรม หลังจากคุยกันผ่าน Discord ไม่กี่ครั้งและเปิดโปรเจกต์ Ghidra ดูด้วยกัน พร้อมอธิบายพื้นฐานวิศวกรรมโปรแกรมคอมพิวเตอร์ให้ฟัง เขาก็เรียนรู้ได้มากกว่าสมัยที่พลิกบิตด้วย Cheat Engine มาก
หลังจากนั้นเขาก็สร้างม็อดที่ค่อนข้างทะเยอทะยานซึ่งเคยปรากฏเฉพาะในวิดีโอ YouTube เมื่อ 15 ปีก่อนและไม่เคยเผยแพร่ขึ้นมาใหม่ได้ แม้ผมจะช่วยชี้ทิศทาง แต่พอเขาเห็นว่าชิ้นส่วนต่าง ๆ ประกอบกันอย่างไร เขาก็ทำม็อดแบบเดียวกันในภาคต่อได้ด้วยตัวเอง
ประสบการณ์ด้านวิศวกรรมให้ มุมมอง เวลาทำ reverse engineering
อีกประเด็นสำคัญคือ แม้จะมีหนังสือมากมาย แต่หนังสือที่ “ดี” จริง ๆ มีเพียงหยิบมือ
อ่านไปแค่ 5 นาทีก็เห็นข้อผิดพลาด แนวคิดที่เข้าใจผิด และคำอธิบายที่ผิดโดยสิ้นเชิงมากเกินไป จึงแนะนำได้ยาก ดูเหมือนเป็นงานเขียนของมือสมัครเล่นที่มีประสบการณ์ในสาขานี้น้อยอย่างชัดเจน
แหล่งข้อมูลที่ดีกว่ามี Secrets of Reverse Engineering ของ Eldad Eilam, ฝั่ง Windows คือ Practical Reverse Engineering และถ้าเป็นพื้นฐานจริง ๆ ก็มี Computer Organization and Design ของ Patterson
สำหรับคนที่เพิ่งเริ่มรู้จักหัวข้อนี้ ดูเหมือนเป็น ภาพรวมระดับสูง ที่ใช้ได้
ยังมีลิงก์นี้เป็นแหล่งข้อมูลที่ลึกกว่า: https://github.com/mytechnotalent/Reverse-Engineering
แก้ไข: อ้าว ดูเหมือนส่วนใหญ่จะลิงก์กลับไปยังต้นฉบับ
นึกถึงสมัยอ่าน tutorial การ reversing บน searchlores.org และ fravia.com
ตอนนี้อยู่ในเว็บอาร์ไคฟ์แล้ว: https://web.archive.org/web/20191201105759/http://search.lor...
Java reverse engineering ก็สนุกเหมือนกัน โดยเฉพาะแอป Android น่าสงสัยที่ใช้ควบคุมเครื่องใช้ไฟฟ้าผ่านโปรโตคอล Bluetooth แปลก ๆ
ผมรู้จักคนเขียนไกด์นี้ เห็นขึ้น HN แล้วดีใจ ถ้ามี feedback ที่เป็นรูปธรรม ผมส่งต่อให้ได้
องค์ประกอบที่ชวนให้มีส่วนร่วมและสื่อภาพมีน้อยเกินไป มีแต่คำอธิบายเยอะและเป็นกำแพงข้อความมากเกินไป แค่นี้ก็ทำให้มันไม่ใช่ทรัพยากร “สำหรับทุกคน” แล้ว
เช่น คำอธิบาย static analysis/dynamic analysis ในภาค 2, การแนะนำ IDA และ disassembler, รวมถึงคำอธิบายสถานการณ์ ABC Biochemicals สามารถเขียนให้กระชับกว่านี้ได้มาก
“ในการวิเคราะห์มัลแวร์มีเทคนิคพื้นฐานสองแบบคือ static analysis และ dynamic analysis static analysis คือการตรวจสอบไฟล์ executable โดยไม่รัน ซึ่งจะไม่กล่าวถึงที่นี่และจะไปกล่าวในหลักสูตรถัดไป dynamic analysis คือการวิเคราะห์ไบนารีมัลแวร์ที่กำลังรันอยู่ด้วย disassembler และ debugger disassembler จะแปลงไบนารีที่รันได้ให้เป็นคำสั่งภาษา assembly ที่ debug และปรับแก้ได้ มีเครื่องมืออย่าง Hopper, OllyDbg และ IDA โดย IDA เป็น disassembler และ debugger ยอดนิยมที่รองรับหลายแพลตฟอร์มและโปรเซสเซอร์ reverse engineering เป็นสาขาที่กว้างกว่าการวิเคราะห์มัลแวร์มาก ช่วงท้ายเราจะใช้ IDA ในสถานการณ์สมมติว่ามีการแฮ็กอย่างมีจริยธรรมกับระบบควบคุมประตูกันกระสุนของห้องปฏิบัติการวิจัยชีวเคมีอ่อนไหวชื่อ ABC Biochemicals เป็นโปรเจกต์พื้นฐาน แต่จะแสดงกระบวนการ reverse engineering ไบนารีแบบ black box และการหาแนวทางออกแบบโค้ดให้ปลอดภัยขึ้น บทเรียนถัดไปจะกล่าวถึงมัลแวร์หลายประเภท” ประมาณนี้ก็น่าจะลดได้
ลิงก์หนังสือเปิดไม่ได้สำหรับผม หรือว่าโดน ทราฟฟิกถล่มจาก HN เข้าแล้ว?