Java obfuscator ที่ดีที่สุด? [ปิด]


108

ฉันกำลังพัฒนาซอฟต์แวร์รักษาความปลอดภัยและต้องการทำให้โค้ดจาวาของฉันสับสนดังนั้นจึงไม่สามารถทำวิศวกรรมย้อนกลับได้ java obfuscator ที่น่าเชื่อถือที่สุดคืออะไร?


213
ฉันมีเพื่อนร่วมงานบางคนที่สร้างโค้ดที่สับสนอย่างหนัก แต่นั่นไม่ใช่ความตั้งใจของพวกเขา
Steve McLeod

11
@Mnementh: การทำวิศวกรรมย้อนกลับมีราคาแพงสำหรับแอปเฉพาะของคุณก็เพียงพอแล้ว
Dmitry Leskov

4
@ Robert Harvey: ไม่แน่ใจว่าทำไมคุณถึงคิดว่าคำถามนี้ไม่สร้างสรรค์ มันเกี่ยวข้องกับการเขียนโปรแกรมและในความคิดของฉันมันเป็นคำถามที่ดีพอ ๆ กับคำถามเกี่ยวกับโปรแกรมอื่น ๆ
Xinus

คำตอบ:


100

ขั้นแรกคุณต้องจำไว้ว่ามันเป็นไปไม่ได้เลยที่จะทำวิศวกรรมย้อนกลับบางสิ่งบางอย่าง ทุกอย่างสามารถแฮ็กได้ นักพัฒนาที่ชาญฉลาดที่ใช้ Smart IDE สามารถไปได้ไกลพอสมควร

ดีที่คุณสามารถหาได้ที่นี่รายการ ProGuard ค่อนข้างดี ฉันใช้มันด้วยตัวเอง แต่เพื่อ "ย่อขนาด" โค้ด Java เท่านั้น


1
@BalusC: คุณใช้เครื่องมืออะไรในการทำให้โค้ดจาวาสับสน? คุณทำให้รหัสจาวาของคุณสับสนไม่ 'คุณ?
Thinhbk

@Thinhbk Obfuscation ทำให้การรับสแต็กเทรซที่เป็นประโยชน์ทำได้ยากขึ้น
Thorbjørn Ravn Andersen

เห็นด้วย. IMO การทำให้ยุ่งเหยิงจะทำให้สแต็กเทรซกลายเป็นส่วนใหญ่ไร้ประโยชน์ ในกรณีนั้นฉันใช้เคล็ดลับบางอย่างกับข้อความบันทึกซึ่งสามารถช่วยได้
Thinhbk

2
@Thinhbk Proguard สร้างแผนที่เพื่อแปลสแต็กเทรซที่สับสนกลับไปเป็นโค้ดดั้งเดิม ไม่เช่นนั้นอย่างที่คุณพูดการติดตามสแต็กจะไร้ประโยชน์ (แต่ใครจะได้รับข้อยกเว้นที่ไม่ถูกจับอยู่ดี ... ;-))
Matthieu

@ Matthieu: เป็นไปได้ไหมที่จะแปลการติดตามสแต็กที่สำรองไว้เป็นรหัสต้นฉบับโดยอัตโนมัติ? มันจะดีมากและใหม่สำหรับฉัน ฉันเพิ่งรู้ว่าการแปลกลับด้วยตนเองอาจเป็นเรื่องยากหากฐานรหัสมีขนาดใหญ่
Thinhbk

33

หากคอมพิวเตอร์สามารถทำงานได้มนุษย์ที่มีแรงจูงใจที่เหมาะสมสามารถทำวิศวกรรมย้อนกลับได้


3
มีกี่คนที่สามารถอ่านโค้ดที่สับสนและเข้าใจตรรกะได้ ฉันมีเพื่อนวิศวกรมากมายและพวกเขาทำอย่างนั้นไม่ได้ มีเพียงจอห์นแนชเท่านั้นที่ทำได้;)
kodmanyagha

5
@kodmanyagha ถ้าพวกเขามีแรงจูงใจมากพอพวกเขาจะเรียนรู้มัน มันไม่ยาก
Thorbjørn Ravn Andersen

1
ในแง่ทางคณิตศาสตร์มันเป็นไปได้ที่จะเรียกใช้โดยไม่มีทางที่จะทำวิศวกรรมย้อนกลับได้ นี่คือสิ่งที่เกี่ยวกับการเข้ารหัส homomorphic แต่มีอุปสรรคเล็กน้อยที่ต้องแก้ไขเพื่อให้สามารถใช้งานได้จริงบนซอฟต์แวร์คอมพิวเตอร์เมื่อเทียบกับ SaaS เรากำลังเคลื่อนไปที่นั่นอย่างช้าๆ ผลงาน Seminal ของ Gentry เกี่ยวกับการเข้ารหัสโฮโมมอร์ฟิกอย่างสมบูรณ์และ "จิ๊กซอว์ทางคณิตศาสตร์" โดย Amit Sahai et al ก้าวกระโดดอย่างมากในทิศทางนั้น มีองค์ประกอบที่ขาดหายไปเพียงองค์ประกอบเดียว (ซึ่งฉันเรียกว่า "ฟังก์ชันกั้น") ที่จะทำให้ทั้งโครงการเป็นไปได้ สิ่งที่เป็นไปไม่ได้ในตอนนี้จะเป็นไปได้ในอนาคต
ogggre

30

ลองอ่านบทความของฉันปกป้องรหัส Java ของคุณ - ผ่าน Obfuscators And Beyond [ที่เก็บถาวร]สำหรับการอภิปรายเกี่ยวกับความสับสนกับวิธีอื่น ๆ อีกสามวิธีในการทำให้วิศวกรรมย้อนกลับของแอปของคุณมีราคาแพงขึ้นและชุดลิงก์ไปยังเครื่องมือและสื่อการอ่านเพิ่มเติม


1
นี่คือสิ่งที่ฉันต้องการจริงๆ ฉันต้องการเขียน PHP obfuscator สำหรับโครงการของฉัน ตรรกะเหมือนกันทุกที่ ขอบคุณ ...
kodmanyagha

1
บทความที่น่าสนใจและครอบคลุมเกี่ยวกับ Java obfuscation และ Software collection
m3nda

15

ผมคิดว่า Proguard ดีที่สุด นอกจากนี้ยังเป็นไปได้ที่จะรวมเข้ากับ IDE ของคุณ (เช่น NetBeans) อย่างไรก็ตามโปรดพิจารณาว่าหากคุณทำให้โค้ดของคุณสับสนอาจเป็นเรื่องยากที่จะติดตามปัญหาในบันทึกของคุณ ..


6
+1 สำหรับ "พิจารณาว่าหากคุณทำให้โค้ดของคุณสับสนอาจเป็นเรื่องยากที่จะติดตามปัญหาในบันทึกของคุณ" เมื่อคุณคิดว่าการดีบักนั้นยากพอ ...
Adam Paynter

7
obfuscator ที่ดีที่เปลี่ยนชื่อและข้อมูลหมายเลขบรรทัดควรสร้างบันทึกที่จะย้อนกระบวนการ วิธีนี้อย่างน้อยสแต็กเทรซยังคงมีประโยชน์สำหรับไบนารีที่สับสน
Joachim Sauer

3
ProGuard สร้างไฟล์ย้อนกลับดังกล่าวสำหรับการดีบัก :-)
Malax

11

ดังที่กล่าวไว้ที่อื่นที่นี่proguardเป็นสิ่งที่ดี แต่สิ่งที่อาจไม่รู้ก็คือมีปลั๊กอิน maven ของบุคคลที่สามที่นี่http://pyx4me.com/pyx4me-maven-plugins/proguard-maven-plugin/ ... ฉันใช้ทั้งสองอย่างร่วมกันและมันดีมาก



7

เป็นความจริงที่ว่ามันเป็นไปได้ที่จะทำวิศวกรรมย้อนกลับรหัสบางอย่างเช่นเดียวกับที่มันเป็นไปไม่ได้ที่จะปกป้องบ้านเพื่อให้ไม่มีใครสามารถขโมยไปได้ นั่นไม่ได้ป้องกันไม่ให้ฉันล็อคประตู จริงๆแล้วฉันไม่ได้อยู่ในโลก java ฉันใช้BitHelmetสำหรับ. net


7
+1 เพื่อนำคุณกลับสู่ net 0 คำตอบนี้ไม่ได้ช่วยอะไร
HaloWebMaster

6

ฉันเคยทำงานกับKlassmasterใน บริษัท ก่อนหน้านี้และทำงานได้ดีมากและสามารถรวมเข้ากับระบบการสร้างได้ค่อนข้างดี (การรองรับ maven นั้นยอดเยี่ยมมาก) แต่ก็ไม่ฟรีแม้ว่า


6

เราโชคดีกว่ามากในการเข้ารหัสขวดโหลแทนที่จะทำให้สับสน เราใช้Classguard


7
หากคุณยังไม่ได้อ่าน "การถอดรหัสการเข้ารหัส Java byte-code" ( javaworld.com/javaworld/javaqa/2003-05/01-qa-0509-jcrypt.html ) โดย Vladimir Roubtsov คุณอาจต้องการดำเนินการในตอนนี้
Dmitry Leskov

6

ฉันไม่รู้แน่ชัดว่าโซลูชันนี้ปลอดภัยหรือไม่ แต่เกี่ยวกับโซลูชันClassGuardคุณควรอ่านบทความและความคิดเห็นที่: http://www.javaworld.com/community/?q=node/1604#comment -12296


และอีกทางเลือกหนึ่งที่ใช้โค้ดเนทีฟแทน defineClass คือJarCrypt
Renato

การเรียนการสอนบทความวิธีการ crack ClassGuard : setrst.blogspot.com/2010/04/classguard-unguarded.html ฉันไม่รู้ว่ายังใช้งานได้กับเวอร์ชันล่าสุดหรือไม่
Renato
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.