ฉันมีคำถามที่ไร้เดียงสา / มือใหม่:
- วิศวกรรมย้อนกลับดีอย่างไร
- ในฐานะโปรแกรมเมอร์ฉันควรเรียนรู้ศิลปะของวิศวกรรมย้อนกลับหรือไม่
- โปรแกรมเมอร์ที่ได้รับผลประโยชน์มีประโยชน์อะไรบ้าง?
ฉันมีคำถามที่ไร้เดียงสา / มือใหม่:
คำตอบ:
วิศวกรรมย้อนกลับคืออะไรดี?
Reverse Engineering นั้นดีสำหรับการถอดรหัสและการแฮ็ก (ลบการป้องกันหมายเลขซีเรียลหรือการขอรหัสผ่าน) แต่ยังสำหรับการทำความเข้าใจไวรัสหรือปาฏิหาริย์ที่โปรแกรมอื่น ๆ สามารถทำได้ บางครั้งมันเป็นทักษะที่มีประโยชน์ที่จะมีเพื่อหาข้อบกพร่องในโปรแกรมที่คุณไม่ได้มีแหล่งที่มาและเพื่อแก้ไขพวกเขา
ในฐานะโปรแกรมเมอร์ฉันควรเรียนรู้ศิลปะของวิศวกรรมย้อนกลับหรือไม่
ใช่ลองเรียนรู้แอสเซมเบลอร์และใช้ดีบั๊ก มันจะทำให้คุณเป็นนักพัฒนาที่ดีขึ้นโดยการทำความเข้าใจกับสิ่งต่าง ๆ ในระดับที่ต่ำกว่าซึ่งอยู่ใกล้กับโลหะ
ประโยชน์ของโปรแกรมเมอร์ที่มีประสบการณ์ด้านวิศวกรรมย้อนกลับเป็นอย่างไร
คุณจะเป็นแฮ็กเกอร์ / แคร็กเกอร์ที่ดี คุณสามารถทำงานกับผู้ผลิตแอนตี้ไวรัสรายอื่นได้ เป็นตัวอย่างส่วนตัว: เมื่อฉันย้อนกลับออกแบบซอฟต์แวร์เพื่อติดตามข้อผิดพลาดที่เกิดขึ้นขณะสร้างการเชื่อมต่อ oracle ไม่มีใครสามารถแก้ปัญหาได้ดังนั้นฉันจึงมีชื่อเสียง
นอกจากนี้ฉันยังต้องการอ้างถึงความคิดเห็น@ johannesเนื่องจากเขาพูดถูก:
ฉันจะไม่ จำกัด เฉพาะการแคร็กที่ "ไม่ดี" การแยกส่วนจะมีประโยชน์ในการคิดออกว่าคอมไพเลอร์เป็นบ้าหรือไม่
ฉันชอบคำตอบของ Falconแต่ฉันต้องการเพิ่มว่าในวิศวกรรมย้อนกลับของแอปพลิเคชันธุรกิจเก่าที่น่าเบื่อบางอย่างจะช่วยให้คุณพ้นจากปัญหาที่น่ารังเกียจ
ที่ทำงานเราทำมันมากเมื่อทำการรวมข้อมูลกับระบบของบุคคลภายนอกที่ไม่มีการบำรุงรักษาใหม่ดังนั้นเราจึงสามารถรู้ได้ว่าควรจะอยู่ที่ไหนหรือไม่ควรหยุด
นอกจากนี้เรายังใช้วิศวกรย้อนกลับเพื่อตรวจสอบคุณภาพของรหัส (ด้วยข้อ จำกัด บางประการ) ในส่วนประกอบของบุคคลที่สามที่เราซื้อหากไม่ได้รวมซอร์สโค้ดไว้
จุดที่แท้จริงของฉันคือ: วิศวกรรมย้อนกลับไม่ได้ผูกติดอยู่กับเทคโนโลยีเดียวหรือภาษา แต่เป็นกระบวนการที่คุณเรียนรู้ internals ของ "กล่องดำที่" หากคุณมีรหัสที่คุณต้องพึ่งพา แต่คุณไม่ไว้ใจหรือไม่สามารถไว้ใจได้คุณควรตรวจสอบรหัสและดูว่ารหัสนั้นทำอะไรอยู่
นอกจากนี้ยังมีด้านที่น่าเบื่อแบบเลื่อนลงของวิศวกรรมย้อนกลับ นี่คือเมื่อ บริษัท ที่คุณอยู่มีรหัสหรือโปรแกรมที่ยังใช้อยู่ แต่ไม่มีใครอ้างว่ารู้อะไรเกี่ยวกับมัน ดังนั้นคุณต้องผ่านมันบันทึกมันเขียนการทดสอบและทุกอย่างของวิศวกรรมที่ควรทำก่อนเริ่มโครงการ คุณทำสิ่งนี้กับซอฟต์แวร์ที่เขียนขึ้นแล้วดังนั้นจึงเป็น "วิศวกรรมย้อนกลับ"
มันง่ายกว่ามากเมื่อคุณมีรหัส แต่ก็ยังมีวิศวกรรมย้อนกลับทางเทคนิค เป็นหนึ่งในเงื่อนไขเหล่านั้นที่ปรากฏขึ้นจำนวนมากในการประชุมทางธุรกิจเมื่อพวกเขากำลังพูดถึงโครงการมรดก
เพียงเพื่อขยายมูลค่าทางธุรกิจของวิศวกรรมย้อนกลับ - มากกว่าครึ่งหนึ่งของลูกค้าใหม่ที่เราพบมีระบบ / แอพที่มีอยู่ (ไม่เสมอไปในการผลิตคำนึงถึงคุณ) แต่ที่ความสัมพันธ์กับผู้พัฒนาซอฟต์แวร์ก่อนหน้านี้ลื่นไถล
ในกรณีประมาณ 30% ที่ลูกค้าไม่ได้รับแหล่งที่มาสำหรับระบบของพวกเขาและในหลายกรณีกระบวนการทางธุรกิจจริงกฎเกณฑ์และความรู้ส่วนใหญ่ถูกล็อคไว้ในรหัส
และในบางกรณีที่ผู้ค้ารายก่อนหน้านี้ได้รับอันตรายที่เป็นอันตรายทำให้ยุ่งเหยิงไบนารีบีบอัดรหัสอื่น ๆ เพื่อให้ลูกค้าไม่ติดขัด
ดังนั้นเพื่อตอบคำถามของคุณวิศวกรรมย้อนกลับมักจะเป็นจุดเริ่มต้นสำหรับการนัดหมายใหม่ที่มีลูกค้าที่สิ้นหวัง (และเผาไหม้) และมันอาจเป็นปัจจัยแห่งความสำเร็จที่สำคัญทางธุรกิจ
ฉันขอยืนยันว่าชุดทักษะสำหรับวิศวกรรมย้อนกลับและชุดทักษะสำหรับการแก้ไขข้อบกพร่องนั้นเหมือนกัน - ถ้าคุณเป็นนักดีบักที่ยอดเยี่ยมคุณก็เป็นวิศวกรย้อนกลับที่ยอดเยี่ยมและในทางกลับกัน
บางครั้งมันก็ใช้เพื่อให้ได้ชิ้นส่วน / ซอฟต์แวร์เพื่อทำงานร่วมกันเท่าที่ฉันเข้าใจ อินเทอร์เฟซแปลก ๆ ข้อบกพร่องในการใช้งาน
แต่จากสิ่งที่ฉันเข้าใจมันเป็นเรื่องที่ลื่นมากดังนั้นกฎหมายที่ซับซ้อนของการพัฒนาซอฟต์แวร์จึงถูกนำไปใช้อย่างสุดขั้วกับวิศวกรรมย้อนกลับ
ด้วยวิศวกรรมย้อนกลับคุณสามารถนำโค้ดกลับมาใช้งานได้น้อยที่สุดตัวอย่างเช่นใน Symfony2 คุณสามารถแปลงฐานข้อมูลที่สร้างจาก MySQL ปกติและแปลงเป็นรูปแบบหลักคำสอนและนี่เป็นกระบวนการวิศวกรรมย้อนกลับที่ทำได้ใน Symfony .... และด้วยวิศวกรรมย้อนกลับคุณสามารถดูโค้ดที่บอกว่า 'in 2D'
ฉันกำลังยกตัวอย่างจริงจากประสบการณ์ของฉัน
เมื่อ บริษัท ของเรารับงานจาก บริษัท อื่น ประมาณครึ่งปีในโครงการเราตระหนักว่าโครงการย่อยไม่มีรหัส เมื่อเราขอให้ บริษัท เดิมส่งรหัสพวกเขาตอบอย่างสุภาพว่าพวกเขาไม่สามารถหารหัสสำหรับโครงการย่อยได้ เราต้องการรหัสเพราะเราต้องการเปลี่ยนบางสิ่งในโครงการย่อยนั้น
ฉันต้องทำโครงการย่อยกลับรายการ
ครั้งแรกที่ฉันแยกส่วนประกอบแอสเซมบลี (ใช่มันเป็นโครงการ. NET) ผลลัพธ์ของแอสเซมบลีที่ถูกคอมไพล์คือความอ่อนหวานและสับสนโดยไม่มีชื่อของตัวแปรโลคัลและโครงสร้างการควบคุมที่ซับซ้อน เนื่องจากการรวบรวมทิ้งข้อมูลที่สำคัญซึ่งไม่สามารถแยกย่อยได้
จากนั้นฉันก็ลองหาจุดเปลี่ยนรหัส เมื่อต้องการทำสิ่งนี้ฉันปรับปรุงโค้ดให้ทำงานเหมือนเดิม แต่ในทางที่กระชับยิ่งขึ้น ฉันเดาชื่อตัวแปรจากพฤติกรรมของมัน ฉันเดินผ่านรหัสหลาย ๆ ครั้งจนกระทั่งฉันคิดว่ามันกำลังทำอะไรอยู่
ฉันไม่ได้ทำวิศวกรรมย้อนกลับทุกอย่างเพียงแค่ส่วนที่เราต้องเปลี่ยน มันไม่ได้เลวร้ายเกินไปรหัส VB ประมาณ 200 บรรทัด ใช้เวลาประมาณห้าวันในการทำงาน