6 คะแนน โดย GN⁺ 2024-07-26 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Reverse Engineering For Everyone คือชุดบทแนะนำที่สร้างขึ้นเพื่อให้ผู้เริ่มต้นเรียนวิศวกรรมย้อนกลับสามารถทำความเข้าใจแนวคิดและลำดับของการฝึกปฏิบัติได้
  • วิศวกรรมย้อนกลับคือกระบวนการแยกชิ้นส่วนสิ่งประดิษฐ์เพื่อเปิดเผย การออกแบบ สถาปัตยกรรม โค้ด หรือดึงความรู้ออกมา
  • หลักสูตรครอบคลุม x86, x64, ARM-32, ARM-64 และมุ่งเป้าไปทั้งผู้อ่านมือใหม่และผู้ที่ต้องการทบทวนแนวคิด
  • เนื้อหาถูกจัดเรียงให้เริ่มได้แม้ไม่มีพื้นฐานมาก่อน ทำให้สามารถเรียนรู้แบบค่อยเป็นค่อยไปจนถึง พื้นฐานระดับกลาง ของวิศวกรรมย้อนกลับ
  • ชุดบทแนะนำทั้งหมดสามารถดาวน์โหลดได้ในรูปแบบ PDF และ MOBI และเมื่อมีการเพิ่มบทแนะนำใหม่ เวอร์ชันอีบุ๊กก็จะอัปเดตโดยอัตโนมัติ

เป้าหมายของวิศวกรรมย้อนกลับ

  • วิศวกรรมย้อนกลับยังถูกเรียกว่า backwards engineering หรือ back engineering
  • เป็นกระบวนการแยกชิ้นส่วนสิ่งประดิษฐ์เป้าหมายเพื่อเปิดเผย การออกแบบ สถาปัตยกรรม โค้ด ภายใน หรือสกัดความรู้ออกมา
  • คล้ายกับการวิจัยทางวิทยาศาสตร์ แต่แตกต่างกันตรงที่การวิจัยทางวิทยาศาสตร์ศึกษาปรากฏการณ์ทางธรรมชาติ
  • ชุดบทแนะนำนี้มุ่งเน้นให้เรียนรู้วิศวกรรมย้อนกลับได้แบบ เรียบง่ายที่สุดเท่าที่เป็นไปได้

หลักสูตรและกลุ่มเป้าหมายการเรียนรู้

  • กระบวนการหลักที่ครอบคลุมมีดังนี้
  • เหมาะทั้งสำหรับ ผู้เริ่มต้น ที่ต้องการเรียนรู้การรีเวิร์ส และผู้อ่านที่ต้องการทบทวนแนวคิดที่เคยเรียนมาแล้ว
  • ผู้เริ่มต้นสามารถเรียนรู้ได้ตั้งแต่ไม่มีความรู้พื้นฐานไปจนถึง พื้นฐานระดับกลาง ของวิศวกรรมย้อนกลับ
  • สามารถตรวจสอบส่วนต่าง ๆ ที่ครอบคลุมไปแล้วผ่านแถบด้านข้าง และทบทวนแนวคิดที่จำเป็นได้

รูปแบบที่ให้บริการ

  • ชุดบทแนะนำทั้งหมดสามารถรับได้ในรูปแบบอีบุ๊ก
  • เมื่อมีการเพิ่มบทแนะนำใหม่ เวอร์ชันอีบุ๊กจะอัปเดตโดยอัตโนมัติ

1 ความคิดเห็น

 
GN⁺ 2024-07-26
ความคิดเห็นบน 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 ขึ้นมา

    • คงพูดไม่ได้เต็มปากว่า Linus “โง่” ที่ใช้ BitKeeper ตอนนั้นเขาเลือกเครื่องมือที่ดีที่สุดในบรรดาตัวเลือกที่มีอยู่ และแม้จะไม่รู้ว่าเป็นตัวที่ดีที่สุดอย่างสัมบูรณ์หรือไม่ แต่ Linus ก็ได้พิจารณาและประเมินเครื่องมือหลายตัวแล้ว
      การที่ help แสดงรายการคำสั่งออกมาเป็น การตัดสินใจด้านวิศวกรรม/UI ที่ดีของนักพัฒนา BitKeeper แต่ก็น่ากังวลว่าบทเรียนที่ได้จะกลายเป็นว่า “อย่าทำให้ซอฟต์แวร์เป็นมิตรเกินไป”
      อีกอย่าง การคุยกับซอฟต์แวร์ผ่านเครือข่ายก็น่าจะถือว่าเป็นการ “ใช้งาน” ซอฟต์แวร์นั้นอย่างชัดเจนไม่ใช่หรือ
    • เหมือน Andrew ช่วยพวกเราไว้ไม่ใช่ครั้งเดียว แต่สองครั้ง แสดงให้เห็นว่าถึงจะต้องมีคนทำประตู แต่ก็ต้องมีคนจ่ายบอลสำคัญให้ด้วย
    • จำได้ว่าตอนเรียนปริญญาตรี เคยได้ฟัง เรื่อง BitKeeper/git จาก Tridge โดยตรงแบบบังเอิญในโรงอาหารของภาควิชา
  • ผมไม่เคยคิดว่า reverse engineering เป็นสาขาที่เรียนจากหนังสือได้ ตั้งแต่เด็กก็เรียนจากการลงมือทำเองทั้งหมด
    ผมเรียนรู้วิธีใช้ Cheat Engine สแกนและแก้ไขหน่วยความจำของโปรเซสเกมวิดีโอ วิธีอ่านและส่งแพ็กเก็ต MMO ซ้ำเพื่อพยายามโกง วิธีสร้าง DLL กับ hook แล้ว inject เข้าโปรเซส และวิธีทำแพตช์ไฟล์ executable เพื่อแก้โจทย์ crackme
    ลองเล่นกับซอฟต์แวร์จริงที่ต้องใช้ license key เพื่อทำให้ไม่ต้องใช้คีย์หรือยอมรับคีย์อะไรก็ได้ วิเคราะห์ฟอร์แมตไบนารีอย่างไฟล์เซฟเกมเพื่อเอาไปใช้โกง แล้วสุดท้ายก็ใช้ทักษะและความรู้นั้นหางานจริงและทำเงินได้

    • ผมเองก็เรียน reverse engineering จากการจ้อง CE/IDA นานเกินไปตั้งแต่เด็กเหมือนกัน พอมีคนถามว่าควรเรียนยังไงดี จึงไม่ค่อยมีคำตอบที่ดีนัก
      ในทางปฏิบัติ มันเป็นสิ่งที่ต้องลองทำเองและใช้เวลา บทเรียนต้นฉบับดูเว้นช่วงมากเกินไป และแม้จะพยายามครอบคลุมหลายอย่าง แต่ก็รู้สึกว่าไม่ได้สอนทักษะ reverse engineering ได้มากกว่าระดับที่คนส่วนใหญ่จะเรียนรู้ได้หลังลองเล่นไม่กี่ชั่วโมง
      ในทางกลับกัน beginners.re มีเนื้อหามหาศาล แต่ลึกกว่าและค่อยเป็นค่อยไปมากกว่า ส่วนแบบฝึกหัดภาคปฏิบัติ crackmes อาจเหมาะกว่า
    • จะกระโดดเข้า reverse engineering เลยก็ทำได้ แต่ถ้าไม่มี พื้นฐานวิศวกรรม ไม่ว่าจะจากการศึกษาในระบบหรือเรียนเอง ก็จะยากขึ้นมาก
      ในโปรเจกต์ 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

    • Secrets of Reverse Engineering เป็นหนังสือปี 2005 มีหนังสือใหม่กว่านี้ที่แนะนำไหม
  • สำหรับคนที่เพิ่งเริ่มรู้จักหัวข้อนี้ ดูเหมือนเป็น ภาพรวมระดับสูง ที่ใช้ได้
    ยังมีลิงก์นี้เป็นแหล่งข้อมูลที่ลึกกว่า: 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 แปลก ๆ

    • ถ้า Java มีเครื่องมือเทียบเท่า DnSpyEx ก็คงดี ตอนนี้กำลังรอให้ Recaf4 พร้อมใช้งานอยู่
  • ผมรู้จักคนเขียนไกด์นี้ เห็นขึ้น 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 เข้าแล้ว?