อะไรคือข้อดีของการปล่อยรหัสที่ทำให้งงงวย?


12

ตัวอย่างที่เฉพาะเจาะจงที่ฉันมีอยู่ในใจนั้นเกี่ยวข้องกับ Minecraft เกมอัลฟาในปัจจุบัน แต่นี่เป็นคำถามทั่วไปที่ฉันคิดว่ารับประกันการสนทนา

Minecraft เขียนขึ้นใน Java และโดยปกติจะมีลักษณะดังนี้ (ตัวอย่างจริง):

java.lang.NullPointerException
    at d.a(SourceFile:247)
    at gi.b(SourceFile:92)
    at bd.a(SourceFile:33)
    at bn.a(SourceFile:69)
    at bn.e(SourceFile:115)
    at bn.d(SourceFile:103)
    at net.minecraft.client.Minecraft.i(SourceFile:1007)
    at net.minecraft.client.Minecraft.run(SourceFile:596)
    at java.lang.Thread.run(Unknown Source)

เห็นได้ชัดว่านี่ไม่ใช่ชื่อแพ็คเกจและวิธีการที่นักพัฒนาซอฟต์แวร์ใช้เมื่อเขาเขียน เนื่องจากเขาอยู่ในช่วงอัลฟาดูเหมือนว่าผู้พัฒนาควรจะสามารถเข้าใจถึงร่องรอยสแต็กของเขาได้โดยเฉพาะอย่างยิ่งหากมีคนสามารถจัดทำรายงานบั๊กได้ มันย่อมาจากนี้

เราจะได้ประโยชน์อะไรจากการทำให้รหัสของเขางงงวยเช่นนี้ซึ่งเอาชนะข้อบกพร่องของการระบุบั๊กที่ยากขึ้น


1
เพียงแค่ทำให้สับสนการเปลี่ยนแปลงทางเศรษฐศาสตร์ของวิศวกรรมย้อนกลับรหัสของคุณไม่มีอะไรเพิ่มเติม
Mark Booth

คำตอบ:


22

เราทำให้งงงวยโค้ด Java ของเราด้วย ....

ข้อได้เปรียบคือทำให้ยากที่จะทำวิศวกรรมย้อนกลับ (ถ้าคุณกังวลว่ามีคนขโมยรหัสของคุณและใช้เป็นฐานในการสร้างผลิตภัณฑ์คู่แข่งที่คล้ายคลึงกันเป็นต้น)

คุณสามารถรับการติดตามสแต็กดั้งเดิมกลับมาได้: มีเครื่องมือทำให้งงงวยอยู่ที่นั่นซึ่งสร้างไฟล์อ้างอิงพิเศษซึ่งคุณสามารถใช้เพื่อเรียกใช้การติดตามสแต็กที่ยุ่งเหยิงผ่านมาและมันจะออกมาพร้อมกับการติดตามสแต็กต้นฉบับ สิ่งเหล่านี้สร้างขึ้นโดยกระบวนการทำให้งงงวยเองดังนั้นคุณจึงไม่สามารถรับการติดตามสแต็กดั้งเดิมกลับมาได้เว้นแต่ว่าคุณมีมือในไฟล์อ้างอิงที่คุณใช้ในการทำให้งงงวยรหัสในตอนแรก

นี่ไม่มีข้อเสียจริงๆ :)


3
ที่น่าสนใจฉันไม่เคยรู้ว่าพวกเขามาพร้อมกับ "stack trace un-obfuscation" (ไม่เคยใช้ obfuscator) ... เป็นความคิดที่เป็นระเบียบ :-)
Dean Harding

1
ข้อเสียเปรียบเพียงอย่างเดียวที่ฉันเคยพบคือบางครั้ง obfuscator (หนึ่งใน. NET ในกรณีนี้) ทำให้งงงวยจนถึงจุดที่กระวนกระวายใจไม่สามารถอ่านได้ (คำแนะนำที่ผิดกฎหมาย) ล้มเหลวอย่างมาก
vcsjones

@ vcsjones: นั่นไม่ทำให้งงงวยจริงๆแล้ว ...
กำหนดค่า

3
  • ปกป้องทรัพย์สินทางปัญญาของคุณ

obfuscator ส่วนใหญ่ยังปรับปรุงรหัสของคุณลบข้อมูลเมตาที่ไม่จำเป็นหรือไม่ได้ใช้รหัสการบีบอัดการกำจัดรหัสที่ตายแล้วหรือการกำจัดที่ซ้ำกัน


หากมีการใช้ obfuscator สำหรับ optimzations ดังกล่าวคอมไพเลอร์ที่ใช้จะต้องเป็นซอฟต์แวร์ที่ขี้เกียจจริงๆ
phresnel

@phresnel: ใช่ obfuscator สามารถทำงานได้ดีทีเดียว

@phresnel: ไม่สมบูรณ์อาจ แต่เส็งเคร็ง ...

คุณพูดถูก ให้ฉัน repost
phresnel

1
ไม่ใช่ว่าฉันไม่เชื่อคุณ ฉันทำ! แต่การเพิ่มประสิทธิภาพเหล่านั้นมักจะใช้โดยคอมไพเลอร์สมัยใหม่ อย่างน้อยฉันก็รู้ว่า gcc มีทุกอย่าง ดังนั้นความคิดเห็นของฉันคือ: หากผู้ obfuscator ให้ความเร็วที่สำคัญกับคุณมากกว่าผู้รวบรวม [ผู้ขาย] ก็ไม่ได้พยายามอย่างหนักพอหรือไม่ได้รับแฟล็กการเพิ่มประสิทธิภาพที่เหมาะสม
phresnel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.