น่าเสียดายที่ฉันทำซอร์สโค้ดของฉันหายและฉันเพิ่งมีไฟล์เอาต์พุตที่สร้างด้วย gcc ใน linux และฉันไม่มีสิทธิ์เข้าถึงพีซีของฉันเลยตอนนี้มีวิธีแปลงไฟล์เอาต์พุตเป็นไฟล์ต้นฉบับ (ใน c ภายใต้ linux) หรือไม่
น่าเสียดายที่ฉันทำซอร์สโค้ดของฉันหายและฉันเพิ่งมีไฟล์เอาต์พุตที่สร้างด้วย gcc ใน linux และฉันไม่มีสิทธิ์เข้าถึงพีซีของฉันเลยตอนนี้มีวิธีแปลงไฟล์เอาต์พุตเป็นไฟล์ต้นฉบับ (ใน c ภายใต้ linux) หรือไม่
คำตอบ:
ดังนั้นคุณมีวัว แต่คุณแปลงมันเป็นแฮมเบอร์เกอร์โดยไม่ได้ตั้งใจและตอนนี้คุณต้องการวัวของคุณกลับมา
ขออภัยมันไม่ทำงานอย่างนั้น
เพียงกู้คืนไฟล์ต้นฉบับจากข้อมูลสำรองของคุณ
อาคุณไม่มีข้อมูลสำรอง น่าเสียดายที่เอกภพไม่ได้หยุดพักสำหรับสิ่งนั้น
คุณสามารถคอมไพล์ไบนารี ที่จะไม่ให้รหัสที่มาของคุณ แต่มันจะทำให้คุณบางรหัสที่มาที่มีพฤติกรรมเดียวกัน คุณจะไม่ได้รับชื่อตัวแปรยกเว้นว่าเป็นไบนารีการดีบัก คุณจะไม่ได้รับตรรกะเดียวกันที่แน่นอนเว้นแต่ว่าคุณจะรวบรวมโดยไม่มีการเพิ่มประสิทธิภาพ เห็นได้ชัดว่าคุณจะไม่ได้รับความคิดเห็น
ฉันใช้บูมเมอร์แรงเพื่อคอมไพล์โปรแกรมบางโปรแกรมและผลลัพธ์นั้นสามารถอ่านได้ง่ายกว่ารหัสเครื่อง ฉันไม่รู้ว่ามันเป็นเครื่องมือที่ดีที่สุดหรือไม่ อย่างไรก็ตามอย่าคาดหวังปาฏิหาริย์
เครื่องมือหลายอย่างเป็นเรื่องธรรมดาในวิศวกรรมย้อนกลับที่ปฏิบัติการได้
ในกรณีส่วนใหญ่ที่ฉันเห็นรหัสจำเป็นต้องเขียนใหม่ตั้งแต่ต้นรักษาเป็นภาษาแอสเซมบลีภาษาหรือสร้างขึ้นใหม่โดยใช้การร้องขอการเปลี่ยนแปลงอีกครั้งกับเวอร์ชันที่เก่ากว่า
สิ่งที่คุณต้องการทำเรียกว่า "decompiling" มี decompilers มากมายอยู่ที่นั่นและมันก็ไม่เชิงที่จะครอบคลุมพวกมันทั้งหมดที่นี่
อย่างไรก็ตามตามข้อสังเกตทั่วไป: การแปลงจากซอร์ส C ไปเป็นรหัสเครื่องที่ใช้งานได้นั้นสูญเสียไป ตัวอย่างเช่น
มันเป็นเรื่องยากสำหรับรหัสที่จะรวบรวมเป็นเขียน คอมไพเลอร์ส่วนใหญ่วันนี้จะเปลี่ยนรหัสของคุณอย่างมากเพื่อเพิ่มประสิทธิภาพ ดังนั้นเมื่อคุณถอดรหัสคอมไพเลอร์สามารถคาดเดาได้ว่าซอร์สโค้ดจะต้องมีหน้าตาเป็นอย่างไรมันไม่มีทางรู้ว่าโค้ดของคุณคืออะไรเพราะมันหายไป หาก decompiler ดีรหัสอย่างน้อยคุณจะสามารถคอมไพล์กลับคืนสู่การปฏิบัติการที่เทียบเท่าได้และจากนั้นคุณสามารถเริ่มต้นการปรับโครงสร้างใหม่อย่างช้าๆเพื่อให้สามารถอ่านได้ แต่มีแนวโน้มที่ decompiler จะสร้างรหัสสปาเก็ตตี้ที่อ่านไม่ได้อย่างแน่นอนและมันจะปวดหัวมากในการถอดรหัส บางครั้งอาจจบลงด้วยการทำงานน้อยลงเพียงแค่เขียนโปรแกรมใหม่ตั้งแต่ต้น