02.07 ดึกแล้วแต่ก็ยังไม่ได้นอนช่วงนี้สอบ เหนือยมากมาย ตอนนี้กำลังค้นหาคำตอบของแนวข้อสอบที่อาจารย์ให้มา วันนี้ไปติวกับเพื่อนก็งงอยู่ว่า Reverse Engineering คืออะไร ได้รู้คราวๆดังนี้
วิศวกรรมย้อนกลับ หรือ Reverse Engineering
เป็นคนละคำกับคำว่า Reengineering ที่หมายถึงการจัดการองค์กรใหม่ โดยอาจมีเรื่องการลดจำนวนพนักงานเข้ามาเกี่ยวข้อง แต่คำว่าวิศวกรรมย้อนกลับเป็นขบวนการค้นหาหลักการหรือวิธีการทำงานของอุปกรณ์หรือระบบหรือซอฟแวร์ โดยการวิเคราะห์โครงสร้าง หน้าที่การทำงาน, วิธีการใช้งานหรือโปรแกรม ส่วนใหญ่ จะเป็นการค้นหาที่เกี่ยวข้องกับอุปกรณ์อิเลกทรอนิกส์หรืออุปกรณ์จักรกลหรือโปรแกรม จากการวิเคราะห์ขั้นตอนการทำงานแล้วนำมาสร้างเป็นอุปกรณ์หรือระบบใหม่ที่ทำหน้าที่ได้เหมือนกับระบบที่ถูกวิเคราะห์โดยไม่ต้องมีทำการลอกแบบหรือทราบวิธีการทำงานจริง ๆ ของระบบที่ถูกทำการวิเคราะห์
ในสหรัฐและอีกหลาย ๆ ประเทศขบวนการผลิตและวิธีการประดิษฐ์สิ่งของทางการค้าจะปิดเป็นความลับทางการค้า วิธีการทำวิศวกรรมย้อนกลับกับสิ่งประดิษฐ์หรือขบวนการเป็นวิธีการที่ถูกกฎหมายตราบเท่าที่ขั้นตอนวิธีการที่ทำให้ได้มาซึ่งขั้นตอนยังถูกต้องตามกฎหมาย สำหรับสิ่งของที่มีสิทธิบัตร (Patent) ต้องมีการแสดงวิธีการหรือขั้นตอนการประดิษฐ์ก่อนที่จะทำการจดทะเบียน ดังนั้นไม่มีความจำเป็นต้องทำวิศวกรรมย้อนกลับเพื่อให้ได้มาซึ่งขั้นตอนวิธีการทำสำหรับสิ่งของที่มีการจดสิทธิบัตร แต่ส่วนหนึ่งที่เป็นแรงจูงใจให้มีการทำการวิเคราะห์โดยวิศวกรรมย้อนกลับคือการหารายละเอียดในผลิตภัณฑ์ของคู่แข่งว่ามีการละเมิดลิขสิทธิ์ (Copyright Infringements) หรือละเมิดสิทธิ์บัตรหรือไม่ (Patent Infringements)
ตัวอย่างของซอฟแวร์แซมบ้า (Samba) เป็นตัวอย่างที่น่าสนใจตัวอย่างหนึ่งของการทำวิศวกรรมย้อนกลับ โดยการที่ระบบซอฟแวร์จะสามารถทำให้มีการแชร์หรือการให้เครื่องคอมพิวเตอร์ที่อยู่ต่างเครื่องกันใช้แฟ้มข้อมูลเดียวกันได้กับระบบแฟ้มข้อมูลของไมโครซอฟท์วินโดส์ โดยตัวซอฟแวร์เองจะมีการทำงานอยู่บนระบบปฏิบัติการลีนุกซ์ (Linux) ซอฟแวร์มีการทำงานที่เป็นการเลียนแบบการทำงานของระบบปฏิบัติการวินโดส์โดยมีฟังก์ชั่นการทำงานที่สามารถทำได้เหมือนกัน ซอฟแวร์มีการอนุญาตให้เครื่องต่างระบบหรือเครื่องคอมพิวเตอร์ที่เป็นคนละประเภทสามารถทำการแชร์แฟ้มข้อมูลกับระบบวินโดส์ได้
การทำวิศวกรรมย้อนกลับสำหรับซอฟแวร์บางครั้งจะเรียกว่า การทำวิศวกรรมย้อนกลับของรหัส Reverse Code Engineering หรือ RCE ตัวอย่างเช่น ในการใช้งานซอฟแวร์หรือโปรแกรมที่เราใช้งานทุกวันนี้นั้นจะอยู่ในรูปที่เป็นรหัสไบนารี่หรืออยู่ในรูปของภาษาเครื่องแล้ว แต่ก่อนที่จะอยู่ในรูปนี้ได้จะต้องผ่านขั้น ตอนการที่เรียกว่า การคอมไพล์ (Compile) ซึ่งเป็นการแปลงโปรแกรมภาษาให้อยู่ในรูปรหัสไบนารี่ ตัวอย่างของซอฟแวร์ที่ทำวิศวกรรมย้อนกลับกับรหัสไบนารี่ของภาษาจาว่าได้แก่ซอฟแวร์ที่ชื่อ Jade ซอฟแวร์จะทำขั้นตอนที่เป็นการย้อนกลับหรือที่เรียกว่า Decompile โดยจะเป็นการแปลงให้รหัสไบนารี่หรือรหัสภาษาเครื่องให้กลับมาอยู่ในรูปโปรแกรม ภาษาที่สามารถอ่านเข้าใจได้

เทคนิคในการจัดการกับรหัสไบนารี่ในขบวนการวิศวกรรมย้อนกลับ
ในการพัฒนาโปรแกรมนั้นจะต้องใช้ขั้นตอนหรือวิธีการซึ่งในภาษาคอมพิวเตอร์เรียกว่า อัลกอริทึม (Algorithms) ซึ่งจะเป็นส่วนสำคัญที่ทำให้โปรแกรมที่ออกแบบมานั้นสามารถทำงานได้ตามที่ต้องการ หรือมีความรวดเร็วต่างกันก็จะมาจากส่วนนี้ วิศวกรรมย้อนกลับจะเป็นเสมือนการทดสอบกล่องดำเพื่อดูว่าขั้นตอนของการทำงานของซอฟแวร์นั้นๆ เป็นอย่างไร เพื่อที่จะได้ทราบถึงวิธีการทำงานของโปรแกรมหรือซอฟแวร์นั้นขั้นตอนการทำวิศวกรรมย้อนกลับของซอฟแวร์ สามารถวิเคราะห์ได้คร่าวๆ มีดังนี้
1. วิเคราะห์โดยสังเกตข้อมูลที่เปลี่ยนแปลง โดยขั้นตอนนี้จะมีการวิเคราะห์ข้อมูลที่วิ่งอยู่ในสายซึ่งอาจเป็นการวิเคราะห์บัสหรือสายข้อมูลที่เชื่อมต่อซึ่งอาจใช้ Protocol Analyzer หรือ packet sniffer ในการวิเคราะห์ตรวจจับข้อมูล โดยข้อมูลที่วิ่งไปมาในสายจะบอกให้ทราบถึงรายละเอียดของสิ่งที่ต้องการซึ่งบางครั้งไม่จำเป็น ต้องมีการเชื่อมต่อเป็นเน็ตเวิร์ดจริง ๆ อาจเป็นเพียงการใช้งานเครื่องเดียว (Stand-Alone) แล้วดูพฤติกรรมในสายสัญญาณ บางครั้งการทำวิศวกรรมย้อนกลับในระบบที่เป็นแบบผนวกรวมหรือที่เรียกว่า Embedded System ก็สามารถวิเคราะห์ได้ง่ายโดยเครื่องมือที่ผู้ผลิตผลิตภัณฑ์ให้มา เช่น โปรแกรมที่ใช้ตรวจหาที่ผิด (Debugger) อย่าง JTAG ตัวอย่างของการทำวิศวกรรมย้อนกลับในระบบไมโครซอฟท์วินโดส์สำหรับการหาที่ผิด (Debug) ที่ระดับไบนารี่ ได้แก่ซอฟแวร์ที่ชื่อ SoftICE
2. การวิเคราะห์โดยการทำให้อยู่ในรูปโค้ดของภาษาแอสแซมบลี หรือภาษาเครื่องที่โปรแกรมอ่านแล้วสามารถทำงานได้โดยตรง การทำให้อยู่ในรูปของภาษาแอสแซมบลี แล้วดูวิธีการทำงานของโปรแกรมจากการทำงานในแต่ละขั้นตอนก็จะสามารถทำให้ทราบวิธีการทำงานของซอฟแวร์ที่ต้องการทำวิศวกรรมย้อนกลับได้
3. การทำการแปลงรหัสกลับไปเป็นซอสโปรแกรมหรือการดีคอมไพล์ (Decompile) เป็นขั้นตอนที่เป็นเหมือนการลองผิดลองถูกซึ่งจะได้ผลลัพธ์ที่แตกต่างกันไปในแต่ละครั้ง
เพื่อที่จะให้ได้รหัสซอสโค้ดของภาษาชั้นสูงหรือโปรแกรมภาษาจากขั้นตอนการแปลง ในกรณีที่มีเพียงแค่รหัสไบนารี่สำหรับทำการวิเคราะห์
นอกจากนี้การทำวิศวกรรมย้อนกลับของซอฟแวร์ยังเกี่ยวข้องกับการตรวจสอบระบบรักษาความปลอดภัย (Security audit) หรือแม้นกระทั่งการพยายามกันส่วนที่ป้องกันการแก้ไขในซอฟแวร์ (Cracking)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น