ปกป้อง. รหัส NET จากวิศวกรรมย้อนกลับ?


491

การทำให้งงงวยเป็นวิธีหนึ่ง แต่ก็ไม่สามารถป้องกันจากการทำลายการรักษาความปลอดภัยการป้องกันการละเมิดลิขสิทธิ์ของแอปพลิเคชัน ฉันจะแน่ใจได้อย่างไรว่าแอปพลิเคชันไม่ได้ถูกดัดแปลงและฉันจะแน่ใจได้อย่างไรว่ากลไกการลงทะเบียนไม่สามารถทำการวิศวกรรมย้อนกลับได้?

นอกจากนี้ยังเป็นไปได้ที่จะแปลงแอปพลิเคชัน C # เป็นโค้ดเนมและXenocodeมีราคาแพงเกินไป

C # มีคุณสมบัติมากมายและเป็นภาษาที่เหมาะสำหรับรหัสของฉันดังนั้นการเขียน codebase ทั้งหมดอีกครั้งใน C ++ ไม่เป็นไปตามคำถาม

ใบรับรองความปลอดภัยสามารถลบออกได้อย่างง่ายดายจากชุดประกอบที่ลงนามใน. NET


8
blogs.msdn.com/b/dotnet/archive/2014/04/02/…ทุกอย่างเปลี่ยนไป!
Andreas

@ Andreas: นี่มันยอดเยี่ยมมาก !! ฉันจะลองดู ใครใช้หรือไม่
แจ็ค

1
@ แจ็คสำหรับแอพที่เก็บหน้าต่างเท่านั้น ไม่มีไทม์ไลน์สำหรับแอพเดสก์ท็อป (เท่าที่ฉันจะบอกได้)
ไทเลอร์ลอง

ถ้าคุณต้องการเนทีฟที่ไม่มี C ++ แบบเก่าให้ใช้ Delphi ความง่ายของ. Net มาจาก Delphi อย่างไรก็ตาม
วิลเลียม Egge

คำตอบ:


671

คุณทำไม่ได้

มีขั้นตอนที่คุณสามารถทำได้เพื่อทำให้ยากขึ้นเล็กน้อยแต่ท้ายที่สุดการปฏิบัติการใด ๆ บนเครื่องโลคัลสามารถถอดรหัสได้ ในที่สุดรหัสนั้นจะต้องถูกแปลงเป็นรหัสเครื่องดั้งเดิมและทุกแอปพลิเคชันที่รันได้จะมีความเสี่ยง

สิ่งที่คุณต้องการทำคือทำให้มันยากพอที่จะทำให้แตกซึ่งไม่คุ้มกับปัญหาของคนอื่น

ฉันมีคำแนะนำให้คุณช่วยปกป้องใบสมัครของคุณ:

  • ทำให้งงงวยรหัสของคุณ Dotfuscatorมีรุ่นฟรีและมาพร้อมกับ Visual Studio
  • ใช้คีย์สาธารณะ / ส่วนตัวหรือการเข้ารหัสแบบอสมมาตรเพื่อสร้างไลเซนส์ผลิตภัณฑ์ของคุณ สิ่งนี้ทำให้มั่นใจได้ว่ามีเพียงคุณเท่านั้นที่สามารถสร้างรหัสใบอนุญาตของคุณ แม้ว่าแอปพลิเคชันของคุณจะแตก แต่คุณสามารถมั่นใจได้ว่าแอปพลิเคชันเหล่านี้จะไม่ปล่อยตัวสร้างคีย์สำหรับแอปพลิเคชันของคุณเนื่องจากเป็นไปไม่ได้ที่จะกลับอัลกอริทึมการสร้างคีย์
  • ใช้แพ็คเกจของบุคคลที่สามเพื่อแพ็ค. NET ของคุณปฏิบัติการลงในโปรแกรมประยุกต์ wrapper Win32 ที่เข้ารหัสลับ Themidaเป็นหนึ่งในคนที่ดีกว่า สิ่งนี้จะช่วยป้องกันไม่ให้ผู้อื่นสะท้อนแอปพลิเคชันของคุณใน. NET Reflectorและทำให้เกิดความเจ็บปวดในการแกะกล่องเพื่อย้อนกลับ
  • เขียนของคุณเองบรรจุหีบห่อที่กำหนดเอง หากผู้แบ่งบรรจุบุคคลที่สามแพงเกินไปให้ลองเขียนด้วยตนเอง บางครั้งผู้แบ่งบรรจุที่กำหนดเองอาจมีประสิทธิภาพมากเพราะไม่มีวิธีการเผยแพร่ที่ดีเกี่ยวกับวิธีแยกบรรจุภัณฑ์ การสอนวิธีการเขียนแพ็กเกอร์ของคุณเองให้ข้อมูลที่ดีมากมายเกี่ยวกับการเขียนแพคเกอร์ Win32 ของคุณเอง

แม้ว่าในท้ายที่สุดหากผู้คนต้องการให้ใบสมัครของคุณแตก ดูซอฟต์แวร์เชิงพาณิชย์ทั้งหมดที่มีทรัพยากรจำนวนมากเพื่อปกป้องแอปพลิเคชั่นของพวกเขาและพวกเขาจะแตกก่อนที่แอปพลิเคชันจะเปิดตัวต่อสาธารณะ

วิศวกรย้อนกลับที่มีทักษะสามารถดับIDA-Proและหั่นผ่านแอปพลิเคชันของคุณเช่นเนยไม่ว่าคุณจะทำอะไร แอปพลิเคชันที่บรรจุแล้วสามารถนำออกจากกล่องและทำให้สับสนได้เท่านั้นทำให้ไม่สามารถเดินเล่นในสวนได้ การทำงานอย่างหนักของคุณด้วยรหัสใบอนุญาตที่ซับซ้อนของคุณสามารถยกเลิกได้ด้วยแพทช์ไบต์เดียว

คุณเพียงแค่ต้องยอมรับว่ามีโอกาสจริงมากที่คนจะละเมิดลิขสิทธิ์ซอฟต์แวร์ของคุณ มีบางคนที่ไม่เคยจ่ายค่าสมัครไม่ว่าจะเป็นอะไรและคนเหล่านี้คือคนที่คุณไม่ต้องกังวล

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

ฉันเคยละเมิดลิขสิทธิ์แอปพลิเคชันของฉันมาก่อนและฉันเห็นว่าเป็นการดูถูกส่วนตัว ที่นี่ฉันเป็นนักพัฒนาเล็ก ๆ เวลาเทใจและวิญญาณของฉันลงในใบสมัครและคนเหล่านี้มีน้ำดีที่จะโจรสลัดจากฉัน! พวกเขารับเงินโดยตรงจากกระเป๋าของฉัน!

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

หลังจากการต่อสู้ที่ยาวนานฉันก็รู้ว่าฉันกำลังต่อสู้กับกระแสน้ำและทุกครั้งที่สูญเสียไปนั้นก็ไร้ค่า ฉันเอารหัสโทรศัพท์บ้านทั้งหมดออกยกเว้นฟังก์ชั่นการอนุญาตให้ใช้ของแบร์โบนและไม่เคยมองย้อนกลับไป


67
+1 นั่นมันเกือบ +2 ฉันหวังว่าผู้คนจำนวนมากจะได้รับในที่สุดคุณก็ไม่สามารถป้องกันซอฟต์แวร์ของคุณจากการโจมตีที่กำหนด
Bombe

102
คุณได้มาถึงการป้องกันซอฟต์แวร์นิพพาน: ไม่เกี่ยวกับการเพิ่มการป้องกันเพิ่มเติมมันเกี่ยวกับการมุ่งเน้นไปที่ผลิตภัณฑ์และทำให้ดีจนผู้คนต้องการจ่ายเงิน และสำหรับผู้ที่ละเมิดลิขสิทธิ์นั้นพวกเขาจะไม่เคยจ่ายเงินเลยดังนั้นมันจึงดูเหมือนว่าพวกเขาไม่เคยมีตัวตน
Arthur Chaparyan

6
@Arthur Chaparyan ฉันเห็นด้วย มันใช้เวลานานกว่าจะมาถึงที่นี่ แต่ในที่สุดฉันก็ได้เห็นแสงสว่าง ฉันเดินไปตามถนนที่มีการป้องกันที่เข้มงวดมากขึ้นและต่อสู้กับแครกเกอร์ ฉันเรียนรู้ทั้งหมดที่ฉันสามารถทำได้เกี่ยวกับวิศวกรรมย้อนกลับในความพยายามที่จะป้องกันตัวเอง ในที่สุดผมก็คิดออกอุดมการณ์ขวา
mmcdole

50
นรกฉันได้รับเกียรติที่จะหาใครบางคนคิดว่าซอฟต์แวร์ของฉันเป็นมูลค่าการละเมิดลิขสิทธิ์ ...
เอริคฟอร์บ

10
เมื่อคุณเริ่มพึ่งพาการขายซอฟต์แวร์ของคุณเป็นส่วนสำคัญของรายได้ของคุณมันเปลี่ยนแปลงสิ่งต่าง ๆ รู้สึกเหมือนมีคนขโมยของจากคุณ ฉันเข้าใจในสิ่งที่คุณพูด ฉันตกใจเมื่อพบรอยแตกเป็นครั้งแรกสำหรับซอฟต์แวร์ของฉันในเว็บไซต์ฝนตกหนัก
mmcdole

265

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

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

อีกตัวอย่างหนึ่งคือการทดลองแบบ จำกัด เวลา ไม่ต้องกังวลเกี่ยวกับสิ่งที่ง่ายเช่นถ้าผู้ใช้สามารถย้อนกลับนาฬิการะบบ คนที่รู้ว่าพวกเขาละเมิดใบอนุญาตของคุณและตราบใดที่ผู้ใช้รู้ว่าพวกเขาละเมิดคุณได้ทำพอ

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

เพื่ออธิบายว่ามันหมายถึงทำอะไรมากขนาดนั้น แต่ทำไมไม่ไปเพิ่มเติมอีกล่ะ ทำไมไม่ลองเสียบทุกช่องเล็ก ๆ ที่คุณเจอ? คำตอบนั้นเป็นสองส่วน ประการแรกถ้ามีคนจะข้ามเกณฑ์ทางจริยธรรมของสติที่จะหมดข้อตกลงใบอนุญาตของคุณ - แม้ในวิธีที่ง่าย - พวกเขายังจะยินดีที่จะทำบางสิ่งบางอย่างที่ยากมากขึ้นหรือเป็นอันตรายเหมือนดึงแอพลิเคชันของคุณจากฝนตกหนักไซต์ - และมีอันตรายจำนวนหนึ่งที่เกี่ยวข้องกับการรันแอปพลิเคชันที่ดาวน์โหลดจากแหล่งที่ไม่น่าเชื่อถือ การทำให้ยากขึ้นเป็นเพียงความรำคาญเล็กน้อยสำหรับผู้ใช้เหล่านี้และความเสี่ยงที่ก่อให้เกิดปัญหากับลูกค้าที่ชำระเงินของคุณ การทำให้เข้าใจง่ายอาจป้องกันไม่ให้ใครบางคนขุดลงในแอปพลิเคชันของคุณและปล่อยรอยแตกที่ครอบคลุมมากขึ้น ประการที่สองคุณมีตาสองสามที่จะมองหาข้อบกพร่อง; แฮ็กเกอร์มีจำนวนมากและพวกเขาฝึกฝนการค้นหาให้มากขึ้น คุณจะต้องพลาดจุดบกพร่องเพียงเล็กน้อยและแอพของคุณจะมีการแจกจ่ายแบบเดียวกันบนเว็บไซต์โจรสลัดราวกับว่าคุณไม่ได้ทำอะไรเลย คุณต้องถูกทุกครั้ง พวกเขาจะต้องโชคดีเพียงครั้งเดียว ดังนั้นความพยายามที่ต้องการจึงสูงมากและโอกาสในการวัดความสำเร็จใด ๆ ก็ต่ำมาก

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

เนื่องจากคุณไม่สามารถหยุดผู้ใช้จากการละเมิดลิขสิทธิ์ผลิตภัณฑ์แนวทางปฏิบัติที่ดีที่สุดของคุณคือการดึงดูดผู้ใช้ระดับนี้ในวิธีที่ผู้ใช้ใช้เพื่อประโยชน์ของคุณ บ่อยครั้งที่เป็นไปได้ที่จะทำให้พวกเขาทำงานให้คุณแทนที่จะทำกับคุณ เมื่อคำนึงถึงสิ่งที่ไม่ว่าแอปพลิเคชันของคุณจะเป็นอย่างไรมันก็คุ้มค่าที่จะเก็บเวอร์ชันฟรีที่ใช้งานได้เกือบทั้งหมด ความแตกต่างระหว่างป้ายราคา US $ 1 และฟรีนั้นใหญ่มากหากไม่มีเหตุผลอื่นนอกจากที่ลูกค้าไม่ต้องเชื่อใจคุณด้วยบัตรเครดิต รุ่นฟรีของผลิตภัณฑ์ของคุณจะไม่เพียงฆ่าการกระจายการละเมิดลิขสิทธิ์อย่างมีประสิทธิภาพ (ทำไมต้องเสี่ยงต่อการละเมิดลิขสิทธิ์รุ่นเมื่อคุณสามารถถูกต้องตามกฎหมายในราคาเดียวกัน?) แต่มีศักยภาพที่จะขยายกลุ่มเป้าหมายของคุณอย่างมาก

ผลลัพธ์คือคุณอาจต้องเพิ่มราคาของรุ่นจ่ายสำหรับดังนั้นในท้ายที่สุดแทนที่จะเป็นผู้ใช้ 2,000 คนที่ $ 20 ต่อคนคุณจะมีผู้ใช้ฟรี 100,000 คนซึ่ง 500 คนยินดีจ่าย $ 99 สำหรับรุ่น "มืออาชีพ" . วิธีนี้ทำให้คุณมีรายได้มากกว่าที่คุณใช้เวลาในการล็อคผลิตภัณฑ์ของคุณ ยิ่งไปกว่านั้นคุณสามารถดึงดูดผู้ใช้ฟรีเหล่านี้และใช้ประโยชน์จากความสัมพันธ์ในหลายวิธีที่สำคัญ

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

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

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

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

คุณสมบัติที่ดีที่สุดในการจองสำหรับรุ่น Professional เป็นเครื่องมือที่มุ่งทำให้ง่ายต่อการปรับใช้และจัดการองค์กร แครกเกอร์จะไม่เห็นเหตุผลเหล่านี้ว่าเป็นเหตุผลที่เพียงพอที่จะแฮ็กมันเพื่อการใช้งานของเขาเอง แต่สำหรับธุรกิจที่ต้องการซื้อใบอนุญาต 300 ใบและผลักดันให้ทั่วทั้ง บริษัท นี่เป็นสิ่งที่ต้องมี แน่นอนรุ่นมืออาชีพจะได้รับการละเมิดลิขสิทธิ์อยู่แล้ว แต่อีกไม่เหงื่อมันเพราะคุณอาจจะไม่สามารถที่จะขายผลิตภัณฑ์ให้กับโจรสลัดเหล่านั้นไม่ว่าสิ่งที่คุณทำเพื่อให้มันไม่ได้ต้นทุนคุณใด ๆรายได้

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


1
@Learning: มันเพิ่มขึ้นเรื่อย ๆ เมื่อเวลาผ่านไปและผ่านการแปลงอัตโนมัติเป็น CW threshold
Joel Coehoorn

1
+1 ดีกว่าคำตอบที่ฉันให้กับรุ่นก่อนหน้าของคำถามนี้ @Joel ไม่รู้ว่ามีขีด จำกัด
pipTheGeek

1
ฉันไม่เห็นด้วยกับทุกอย่างในที่นี่อย่างสมบูรณ์และมันก็เป็น +1 ที่ง่ายสำหรับการนำเสนอและการถกเถียงที่ดีมาก
Beska

2
อาร์กิวเมนต์ที่ดี แต่พลาดประเด็นเกี่ยวกับการปกป้องทรัพย์สินทางปัญญา หากแอปของคุณมีรหัสบางอย่างที่ทำอะไรบางอย่างที่ค่อนข้างซับซ้อนการทำให้งงงวยสามารถให้ความแตกต่างระหว่างการคัดลอกและวางรหัสและพยายามตีความและสร้างรหัสใหม่เพื่อให้มันทำงานได้ นี่เป็นสิ่งสำคัญอย่างยิ่งสำหรับการอัปเดต: หากมีคนคัดลอกรหัสที่ไม่ชัดเจนของคุณเมื่อคุณปล่อยการอัปเดตพวกเขาต้องทำอย่างนั้นอีกครั้งและอย่างน้อยที่สุดก็ทำให้พวกเขาเจ็บปวด / ค่าใช้จ่าย / เวลามากขึ้น หากคุณไม่ได้รับการปกป้องในบางวิธีพวกเขาเพียงแค่คัดลอก / วางอีกครั้งและใช้งานได้
gregmac

4
โพสต์ที่ยอดเยี่ยม - เป็นรายละเอียดที่ถูกต้องเกี่ยวกับสาเหตุที่ไม่คุ้มค่าที่จะเขียนการป้องกันการคัดลอกที่ซับซ้อน แม้ว่าคำถามจะเป็นคำถามซ้ำ แต่มันก็คุ้มค่าที่จะเปิดใหม่สำหรับคำตอบนี้ บางที mod สามารถรวมมันได้หรือไม่
EMP

45

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


38

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


1
Btw ฉันกำลังทำโครงการที่ฉันต้องการเปิดใช้งานผลิตภัณฑ์ "ออฟไลน์" ด้วย (ฉันทำบริการ WCF เพื่อเปิดใช้งานออนไลน์) ในกรณีนี้คุณจะจัดการกับโค้ดอย่างไร คุณให้ความนิยมได้บ้าง
Piyush

1
แนวคิดที่น่าสนใจ แต่คุณควรแนะนำแนวทางการดำเนินการอย่างไรกับคนที่พัฒนาแอปพลิเคชั่นที่ต้องทำงานโดยไม่ต้องมีการเชื่อมต่อข้อมูลเช่นเกม WP7
Charlie Skilbeck

23

พูดกว้างมีคนสามกลุ่มออกมี

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

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

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

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

หากคุณต้องการใช้โซลูชันของคุณเองการใช้การเข้ารหัสคีย์สาธารณะเป็นวิธีที่ดี (ตรงข้ามกับอัลกอริธึมแบบสมมาตร) เพื่อป้องกันการแฮ็กได้ง่าย ตัวอย่างเช่นคุณสามารถลงชื่อในใบอนุญาตของคุณแบบดิจิทัล (หมายเลขอนุกรมหรือไฟล์ใบอนุญาต) วิธีเดียวที่จะหลีกเลี่ยงปัญหานี้ก็คือการถอดรหัสปรับเปลี่ยนและคอมไพล์โค้ดใหม่ (ซึ่งคุณสามารถทำได้ยากขึ้นโดยใช้เทคนิคเช่นที่แนะนำในคำตอบของ Simucal)


การใช้วิทยาการเข้ารหัสลับที่แข็งแกร่งเพื่อปกป้อง / ตรวจสอบสิทธิ์ใช้งานของคุณนั้นไร้ประโยชน์อย่างสมบูรณ์ถ้ามีคนฉีกรหัสที่ยกเลิกแอปพลิเคชันหากใบอนุญาตไม่ได้ตรวจสอบ :)
Bombe

เห็นด้วย แต่ตามที่ฉันพูดการป้องกันไม่ได้สำหรับกลุ่มผู้ใช้ที่จะหันไปใช้ cracks (ข้อสันนิษฐานที่ฉันทำจะมีอยู่)
Mystic

การเข้ารหัสพับลิกคีย์ = การเข้ารหัสแบบอสมมาตร ฉันคิดว่าคุณหมายถึงสมมาตร
mmcdole

1
เพื่อความยุติธรรมจุดที่สามนั้นมีอคติเพราะถือว่าส่วนหนึ่งของคนนั้นเป็นชนกลุ่มน้อยเสมอ ฉันค่อนข้างแน่ใจว่าภายใต้กรอบบางอย่างมันเป็นเสียงส่วนใหญ่ที่ชัดเจน ผมมีเกมออนไลน์ที่มีหลายอย่างหนาแน่นมีในใจเพราะ) ผู้ใช้ส่วนใหญ่เป็นเด็กที่มีมาตรฐานทางจริยธรรมที่ต่ำมากข) ค่าใช้จ่ายได้อย่างมีนัยสำคัญกับผู้ใช้เหล่านั้นถ้ามันเป็นค่าบริการรายเดือนที่ลากสำหรับเดือน ฯลฯ
เจ Riv

19

คุณไม่สามารถป้องกันผู้คนจากการถอดรหัสซอฟต์แวร์ของคุณ

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

ดังนั้นหากคุณกำลังมองหาวิธีที่จะต่อสู้กับผู้ผลิต keygenerators ที่ผิดกฎหมายสำหรับซอฟต์แวร์ของคุณและคุณไม่ต้องการใช้การเข้ารหัสแบบ assymetric เนื่องจากรหัสการลงทะเบียนแบบยาวที่สิ่งนี้สร้างขึ้นคุณอาจจะได้เห็น Partial Key Verification

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

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

ฉันใช้ Partial Key Verification ในเกมแชร์แวร์ที่ใหม่กว่า (C ++) และมีประสิทธิภาพมาก ก่อนที่เราจะมีปัญหามากมายกับ keygenerators ซึ่งเราไม่สามารถต่อสู้ได้ หลังจากนั้นมีรอยร้าวมากมายและตัวสร้างรหัสไม่กี่ตัวที่ใช้งานได้กับเกมรุ่นนั้นโดยเฉพาะ แต่ไม่มีตัวสร้างคีย์ที่ใช้งานได้กับทุกรุ่น เราได้ทำการอัพเดทเกมเล็กน้อยเป็นประจำและเพื่อทำให้รอยแตกที่มีอยู่ก่อนหน้านี้ไร้ประโยชน์

ดูเหมือนว่าจะมีกรอบโอเพ่นซอร์ส. NET สำหรับการยืนยันคีย์บางส่วนแม้ว่าฉันจะไม่ได้ลองก็ตาม


1
เช่นเดียวกับแนวความคิดคุณสามารถใช้รหัสผ่านที่แตกต่างกันสำหรับการเข้ารหัส assymetric ในรุ่นต่างๆ
Priyank Bolia

แนวคิดที่น่าสนใจ แต่อะไรคือปัญหาของรหัสลงทะเบียนที่มีความยาวอยู่ดี ทุกวันนี้ไม่มีใครใส่มันด้วยมือเลย - ทุกคนจะคัดลอกและวางดังนั้นไม่ว่าจะเป็น 10 ตัวอักษรหรือ 100 ตัวอักษรก็ไม่ควรสร้างความแตกต่าง
EMP

4
@Evgeny: นั่นเป็นเรื่องจริงหากผู้ใช้ของคุณเป็นผู้ใช้ระดับสูงเท่านั้น เราได้สร้างเกมแชร์แวร์ / แคชชวลมาหลายปีแล้วและฉันสามารถบอกคุณได้ว่าผู้ใช้ส่วนใหญ่ของเราไม่สามารถคัดลอกและวาง หน้าต่างการลงทะเบียนยังมาพร้อมกับคู่มือเกี่ยวกับวิธีการคัดลอกและวางและบางรายการก็ไม่ทำหลังจากอ่านเสร็จ
Adrian Grigore

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

1
@Evgeny: แม้จะมีรหัสลงทะเบียนสั้น ๆ เรายังได้รับอีเมลจำนวนมากจากคนที่พิมพ์ผิดรหัสของพวกเขาและดังนั้นจึงคิดว่ารหัสไม่ถูกต้องเพราะพวกเขาจะไม่ทำผิดเช่นนี้หลายครั้งใน แถว. ฉันชอบที่จะปล่อยให้การสอนด้านไอทีแก่ บริษัท อื่น ๆ ... :-)
Adrian Grigore

16
  • ใช้การอัปเดตออนไลน์เพื่อบล็อกสำเนาที่ไม่ได้รับอนุญาตเหล่านั้น

  • ตรวจสอบหมายเลขซีเรียลจากโมดูลต่างๆของแอปพลิเคชันของคุณและอย่าใช้การเรียกฟังก์ชั่นเดียวเพื่อทำการตรวจสอบ (เพื่อให้แครกเกอร์ไม่สามารถข้ามการตรวจสอบได้อย่างง่ายดาย)

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

  • ตรวจสอบผลรวมตรวจสอบไฟล์แอปพลิเคชันเก็บผลรวมตรวจสอบความปลอดภัยของคุณในที่ต่าง ๆ

  • อย่าใช้กลอุบายเหล่านี้มากเกินไปตรวจสอบให้แน่ใจว่าแอปพลิเคชันของคุณไม่เกิดปัญหา / ทำงานผิดปกติขณะยืนยันรหัสลงทะเบียน

  • การสร้างแอปที่มีประโยชน์สำหรับผู้ใช้มีความสำคัญมากกว่าการสร้าง
    ไบนารีที่ไม่สามารถแตกได้สำหรับแครกเกอร์


14

คุณสามารถ..

Microsoft SLP Servicesศักยภาพซอฟต์แวร์ของ InishTechมอบความสามารถในการปกป้องรหัสโดยไม่มีผลต่อการทำงานของแอปพลิเคชันของคุณ

UPDATE: (การเปิดเผยข้อมูล: ทำงานผมใน Eazfuscator.NET)สิ่งที่ทำให้ไมโครซอฟท์ SLP บริการซอฟแวร์ที่มีศักยภาพที่แตกต่างกันคือความสามารถในการจำลองรหัสเพื่อให้คุณแน่นอนสามารถ หลายปีผ่านไปตั้งแต่แรกที่ถามคำถาม วันนี้มีสินค้าอื่น ๆ อีกมากมายที่ยังทำงานบนพื้นฐานที่คล้ายกันเช่น:


2
การกำหนดราคาเพื่อนของฉันซื้อซอฟต์แวร์ลิขสิทธิ์จากไมโครซอฟท์มีราคาแพงเกินไปสำหรับ ISV ปกติ
Priyank โบเลีย

ฉันลองแล้วมันใช้งานได้ดีมาก แต่มันเข้ารหัสเฉพาะรหัสภายในวิธีการที่ไม่ใช่ชุดประกอบทั้งหมดหรือโครงการดังนั้นแครกเกอร์สามารถเปลี่ยนการไหลของโปรแกรมได้อย่างง่ายดายด้วยการฉีด IL
Mohsen Afshin

@ogggre หากเพิ่มลิงก์ผู้ขายคุณต้องเปิดเผยการเชื่อมต่อของคุณในโพสต์ นอกจากนี้เวอร์ชัน SLPS ที่มีอยู่ในปัจจุบัน (ซึ่งฉันทำงานด้วย: D) ก็รองรับข้อมูลทั่วไป โดยธรรมชาติการแก้ปัญหาทั้งหมดมีข้อดีและข้อเสียของตัวเองซึ่งมีเพียงหลักฐานเท่านั้นที่สามารถนำไปใช้กับผู้คนได้อย่างเหมาะสม
Ruben Bartelink

@MohsenAfshin ฉันไม่เข้าใจสิ่งที่คุณกำลังพูด - ประเด็นคือคุณต้องปกป้องวิธีการใด ๆ ที่การเพิ่ม / ลบ / เปลี่ยน IL จะเป็นตัวแทนของการละเมิดใบอนุญาต เนื่องจากการทำเวอร์ช่วลไลเซชั่นไม่สามารถให้บริการฟรีได้เพียง แต่ไม่เหมาะสมที่จะ 'ปกป้องทุกสิ่งอย่างน่าอัศจรรย์' ตามที่คุณแนะนำ กลับไปที่จุดสำคัญ: จุดมุ่งหมายของการป้องกัน SP คือการป้องกันไม่ให้ IL เปลี่ยนแปลงเกี่ยวกับวิธีการที่คุณเลือกบนพื้นฐานที่ว่าพวกเขามีความไว (บวกอื่น ๆ โดยทั่วไปบางส่วนเป็นเสียงที่จะปลูกหลีกเลี่ยงการที่คุณต้องการที่จะแตกบิตนี้ที่นี่ ->เข้าสู่ระบบ )
Ruben Bartelink

1
@RubenBartelink ฉันเห็นด้วยกับคุณ น่าเสียดายที่เธรดนี้มีขนาดใหญ่เกินไปที่มีเนื้อหาหลายหน้า ตอนแรกฉันต้องการเพิ่มคำตอบใหม่ แต่ StackOverflow แนะนำว่าเป็นการดีกว่าที่จะขยายคำตอบที่มีอยู่เดิม ดังนั้นฉันทำ หวังว่าข้อมูลเล็ก ๆ ของฉันจะมีประโยชน์ ขอบคุณสำหรับการอัปเดตเกี่ยวกับการสนับสนุนทั่วไปใน SLPS และการแก้ไขของคุณ
ogggre

10

.NET Reflectorสามารถเปิดได้ "รหัสที่ถูกจัดการ" เท่านั้นซึ่งโดยทั่วไปหมายถึง ". NET code" ดังนั้นคุณไม่สามารถใช้เพื่อแยกไฟล์ COM DLL, ภาษา C ++, รหัสVisual Basic 6.0แบบคลาสสิกเป็นต้นโครงสร้างของโค้ด. NET ที่คอมไพล์ทำให้สะดวกพกพาค้นพบตรวจสอบได้ ฯลฯ . NET Reflector ใช้ประโยชน์จาก สิ่งนี้จะช่วยให้คุณสามารถรวบรวมแอสเซมบลีที่คอมไพล์ได้ แต่ decompilers และ disassemblers ไม่ได้มีความเฉพาะเจาะจงกับ. NET และมีมานานแล้วตราบใดที่คอมไพเลอร์อยู่รอบ

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

เมื่อพูดถึงความงงงวยคุณจะได้สิ่งที่คุณจ่ายไป ดังนั้นหากรหัสของคุณเป็นกรรมสิทธิ์ที่คุณต้องใช้ความพยายามอย่างยิ่งยวดในการปกป้องคุณควรเต็มใจที่จะลงทุนด้วยเงินใน obfuscator ที่ดี

อย่างไรก็ตามในการเขียนรหัสประสบการณ์ 15 ปีขึ้นไปฉันได้ตระหนักว่าการป้องกันซอร์สโค้ดของคุณมากเกินไปเป็นการเสียเวลาและมีประโยชน์เพียงเล็กน้อย แค่พยายามอ่านซอร์สโค้ดต้นฉบับโดยไม่สนับสนุนเอกสารความคิดเห็นและอื่น ๆ อาจเป็นเรื่องยากที่จะเข้าใจ เพิ่มไปที่ชื่อตัวแปรหมดสติที่ decompilers เกิดขึ้นและรหัสสปาเก็ตตี้ที่ผู้สร้าง obfuscators ทันสมัยสร้างขึ้น - คุณอาจไม่ต้องกังวลมากเกินไปเกี่ยวกับคนที่ขโมยทรัพย์สินทางปัญญาของคุณ


9

คุ้มหรือไม่ ทุกกลไกการป้องกันสามารถถูกทำลายได้ด้วยการตัดสินใจที่เพียงพอ พิจารณาตลาดของคุณราคาของผลิตภัณฑ์จำนวนลูกค้า ฯลฯ

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

ความคิดเพิ่มเติมอีกเล็กน้อย (ไม่มีที่สมบูรณ์แบบเนื่องจากไม่มีที่สมบูรณ์แบบ)

  • AntiDuplicate
  • เปลี่ยนภาษาใช้เล่ห์เหลี่ยมที่ผู้แต่งSkypeใช้
  • เซิร์ฟเวอร์สิทธิ์การใช้งาน

และอย่าเสียเวลากับมันมากนักเพราะแครกเกอร์มีประสบการณ์มากมายเกี่ยวกับเทคนิคทั่วไปและอยู่ไม่ไกลจากคุณ หากคุณไม่ต้องการใช้ทรัพยากรจำนวนมากอาจเปลี่ยนภาษาการเขียนโปรแกรม (ใช้วิธี Skype)


อย่าลืมว่ามันเป็นไปได้ที่จะโจมตีส่วนซอฟต์แวร์ของล็อคฮาร์ดแวร์
Magnus Hoff

ใช่นั่นเป็นความจริงตัวเลือกที่แท้จริงเท่านั้นที่จะมีการใช้งานแอพพลิเคชั่นบางส่วนในฮาร์ดแวร์ (ตัวอย่างบางอย่างที่แปลก ๆ ของแอพพลิเคชั่นซอฟต์แวร์ -VHDL) นี้จะแตกได้แม้ว่า ...
ไม่ระบุชื่อ

สิ่งที่เกี่ยวกับดองเกิลที่ใช้กลยุทธ์คีย์สาธารณะ / ส่วนตัว เฉพาะคีย์ส่วนตัวของดองเกิลเท่านั้นที่สามารถถอดรหัสแอปพลิเคชันและเรียกใช้งานได้
mmcdole

นั่นคือสิ่งที่คีย์ฮาร์ดแวร์มักจะทำ แต่คุณสามารถโจมตีดองเกิล - โคลนนิ่งหรือซอฟต์แวร์ที่รับผิดชอบในการพูดคุยกับดองเกิล (หลีกเลี่ยงการปิดการใช้งาน ฯลฯ )
ไม่ระบุชื่อ

1
ในกรณีของฉันมันคุ้มค่าจริงๆ หลังจากที่ฉันใช้การตรวจสอบคีย์บางส่วนและเปลี่ยนรูปแบบคีย์การลงทะเบียนสำหรับผลิตภัณฑ์ที่มีอยู่ยอดขายก็เพิ่มขึ้นอย่างมีนัยสำคัญ ซอฟต์แวร์ทั้งหมดสามารถถอดรหัสได้คำถามคือความสูงที่คุณยกระดับขึ้นสำหรับซอฟต์แวร์ละเมิดลิขสิทธิ์
Adrian Grigore

9

หากคุณต้องการให้ผู้คนสามารถเรียกใช้รหัสของคุณ (และหากคุณไม่ทำเช่นนั้นทำไมคุณถึงเขียนมันตั้งแต่แรก) แล้วซีพียูของพวกเขาจะต้องสามารถรันโค้ดของคุณได้ เพื่อให้สามารถเรียกใช้รหัสได้ซีพียูจะต้องสามารถเข้าใจได้

เนื่องจากซีพียูนั้นโง่และมนุษย์ก็ไม่ได้หมายความว่ามนุษย์สามารถเข้าใจรหัสได้เช่นกัน

มีวิธีเดียวที่จะทำให้แน่ใจว่าผู้ใช้ของคุณไม่ได้รับรหัสของคุณ: อย่าให้รหัสแก่พวกเขา

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

อีกวิธีหนึ่งคือรุ่นอุปกรณ์: แทนที่จะให้รหัสแก่ผู้ใช้ของคุณคุณให้คอมพิวเตอร์ที่มีรหัส นี่คือรุ่นที่คอนโซลเกมโทรศัพท์มือถือส่วนใหญ่และTiVoใช้ โปรดทราบว่าวิธีนี้ใช้ได้เฉพาะในกรณีที่คุณ "เป็นเจ้าของ" เส้นทางการดำเนินการทั้งหมด: คุณต้องสร้าง CPU ของคุณเอง, คอมพิวเตอร์ของคุณ, เขียนระบบปฏิบัติการของคุณเองและใช้งานCLIของคุณเอง จากนั้นคุณสามารถป้องกันรหัสของคุณได้ (แต่โปรดทราบว่าแม้ความผิดพลาดน้อยที่สุดจะทำให้การปกป้องของคุณทั้งหมดไร้ประโยชน์ Microsoft, Apple, Sony, วงการเพลงและอุตสาหกรรมภาพยนตร์สามารถยืนยันได้)

หรือคุณไม่สามารถทำอะไรซึ่งหมายความว่ารหัสของคุณจะได้รับการคุ้มครองโดยอัตโนมัติตามกฎหมายลิขสิทธิ์


8

น่าเสียดายที่คุณจะไม่หนีจากสิ่งนี้ ทางออกที่ดีที่สุดของคุณคือการเขียนรหัสใน C และP / เรียกใช้

มี catch-22 ขนาดเล็กบางคนสามารถถอดรหัสแอปพลิเคชันของคุณให้กับCILและฆ่ารหัสยืนยัน / การเปิดใช้งานใด ๆ (ตัวอย่างเช่นการโทรไปยังไลบรารี C ของคุณ) โปรดจำไว้ว่าแอพพลิเคชั่นที่เขียนด้วยภาษา C นั้นได้รับการดัดแปลงย้อนกลับโดยแฮ็กเกอร์ที่มีความคงทนมากขึ้น (เพียงแค่ดูว่าเกมแตกเร็วแค่ไหนในสมัยนี้) ไม่มีอะไรจะปกป้องแอปพลิเคชันของคุณ

ในท้ายที่สุดมันก็ทำงานได้เหมือนบ้านของคุณปกป้องมันให้ดีพอที่จะใช้ความพยายามมากเกินไป (รหัสสปาเก็ตตี้จะช่วยได้ที่นี่) และเพื่อให้ผู้โจมตีเพียงแค่เคลื่อนไปยังเพื่อนบ้านประตูถัดไปของคุณ (การแข่งขัน :)) ดูที่ Windows Vista ต้องมี 10 วิธีในการถอดรหัส

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

กลไกการเปิดใช้งานและการลงทะเบียนมีจุดประสงค์ที่ 'Joe เฉลี่ย:' ผู้ที่ไม่มีความชำนาญด้านเทคโนโลยีเพียงพอที่จะเลี่ยงผ่าน (หรือสำหรับเรื่องนั้นรู้ว่าพวกเขาสามารถข้ามได้) ไม่ต้องกังวลกับแคร็กเกอร์พวกเขามีเวลามากเกินไปในมือ


1
หากคุณรำคาญกับการเอาท์ซอร์สรหัสลงทะเบียนของคุณลงใน dll คุณควรตรวจสอบให้แน่ใจว่า DLL นั้นจะต้องแตกต่างจากซอฟต์แวร์รุ่นใหม่ทุกครั้ง ไม่อย่างนั้นการทำให้ผู้อื่นสามารถถอดรหัสซอฟต์แวร์ของคุณได้ง่ายขึ้น สิ่งที่พวกเขาต้องทำคือถอดรหัส DLL ของคุณหนึ่งครั้งและใช้มันสำหรับรุ่นที่ใหม่กว่าทั้งหมด แม้แต่ผู้ใช้ก็สามารถทำได้เมื่อพบ DLL เก่าที่ถอดรหัสแล้วและนี่ยิ่งแย่ไปกว่าการวางกลไกการลงทะเบียนในรหัสที่จัดการของคุณ
Adrian Grigore

8

นอกเหนือจากการป้องกันการซื้อคุณ (หรือนักพัฒนาของคุณ) สามารถเรียนรู้ที่จะปกป้องการคัดลอก

นี่คือแนวคิด:

ตอนแรกลองเขียนโปรแกรมที่เขียนเองลงบนคอนโซล นั่นเป็นปัญหาที่โด่งดัง วัตถุประสงค์หลักของภารกิจนี้คือฝึกเขียนโค้ดอ้างอิงตนเอง

ประการที่สองคุณจะต้องพัฒนาเทคโนโลยีที่จะเขียนโค้ดบางอย่างในที่เชื่อถือได้วิธีการเกี่ยวกับวิธีการอื่น ๆ a CIL

คุณอาจเขียนเครื่องเสมือน (แต่ยังอยู่ใน. NET ) และใส่รหัสในนั้น ในที่สุดเครื่องเสมือนใช้งานเครื่องเสมือนอีกเครื่องหนึ่งซึ่งใช้รหัส นั่นเป็นส่วนหนึ่งของฟังก์ชั่นที่ไม่ค่อยมีคนเรียกว่าเพื่อไม่ให้ประสิทธิภาพช้าลงมากเกินไป

เขียนตรรกะบางอย่างลงใน C ++ / CLI และผสมรหัสที่มีการจัดการด้วยการจัดการ สิ่งนี้จะทำให้การถอดแยกชิ้นส่วนแข็งขึ้น ในกรณีนี้อย่าลืมจัดเตรียมx64ไบนารีไว้ด้วย


ไม่สามารถอธิบายรายละเอียดได้
Priyank Bolia

7

ใช่. มันเป็นเรื่องจริง รหัส. NET นั้นง่ายมากที่จะทำวิศวกรรมย้อนกลับหากรหัสนั้นไม่ถูกทำให้ยุ่งเหยิง

การทำให้งงจะเพิ่มเลเยอร์ที่น่ารำคาญให้กับผู้ที่พยายามจะทำวิศวกรรมซอฟต์แวร์ของคุณ คุณจะได้รับระดับการป้องกันที่แตกต่างกันไปตามเวอร์ชันที่คุณได้รับ

Visual Studio ประกอบด้วยDotfuscatorรุ่นหนึ่ง เนื่องจากเป็นรุ่นที่มีการรวมคุณจะไม่ได้รับความสับสนอย่างที่สุดเท่าที่จะเป็นไปได้ หากคุณดูรายการคุณลักษณะของพวกเขาคุณจะเห็นสิ่งที่คุณพลาด (และสิ่งที่แอปพลิเคชันจะทำเพื่อทำให้รหัสของคุณปลอดภัยยิ่งขึ้น)

มีอีกสองแหล่งที่มาฟรีหรือโอเพนซอร์ส. obfuscators ออกมี (แต่ฉันไม่สามารถแสดงความคิดเห็นเกี่ยวกับคุณภาพหรือวิธีการต่างๆที่พวกเขาใช้):

ในท้ายที่สุดไม่มีอะไรสมบูรณ์แบบ หากใครบางคนต้องการที่จะดูว่าซอฟต์แวร์ของคุณทำงานอย่างไรพวกเขาจะ


11
ไม่ใช่แค่ "หากพวกเขาต้องการดูว่าซอฟต์แวร์ของคุณทำงานอย่างไรพวกเขาจะ" หากพวกเขาสนใจพวกเขาอาจเดาได้โดยไม่ต้องมอง ซอฟต์แวร์ 99.9% + ไม่มีอัลกอริทึม pixie ฝุ่นเวทย์ใด ๆ ส่วนที่ยากของการเขียนโปรแกรมไม่ใช่เทคนิคลับพิเศษ มันแค่ทำให้ทุกส่วนเข้าแถวและทำงาน
เคน

9
@Ken - Shhhh! คุณไม่สามารถปล่อยให้คนอื่น ๆ ในโลกรู้ว่าเวลาส่วนใหญ่ที่เราไม่ได้ใช้อัลกอริทึมเวทมนต์ฝุ่น
Justin Niessner

9
Justin: ความรักนับเป็นอัลกอริทึมเวทมนต์หรือไม่? ความรักคือสิ่งที่ทำให้รายการของฉันเป็นพิเศษ ฉันไม่คิดว่าคุณจะแยกความรักออกได้
เคน

Babel.NET ไม่เสียค่าใช้จ่าย คุณสามารถค้นหารายการ obfuscators ที่พบมากที่สุด (คนฟรีและพาณิชย์) กที่นี่
InputOutput

6

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

แต่โปรดจำไว้ว่าไม่มีสิ่งใดที่ไม่สามารถแยกได้มีเพียงซอฟต์แวร์ทางฝั่งเซิร์ฟเวอร์เท่านั้นที่ได้รับการปกป้องอย่างดีและไม่สามารถถอดรหัสได้ อย่างไรก็ตามเพื่อเพิ่มระดับความปลอดภัยในแอปพลิเคชันของคุณคุณสามารถทำขั้นตอนง่าย ๆ เพื่อป้องกันไม่ให้แคร็กเกอร์บางตัว "ไม่ทั้งหมด" ทำการถอดรหัสแอปพลิเคชันของคุณ ขั้นตอนเหล่านี้จะทำให้แครกเกอร์เหล่านี้หายไปและอาจหมดหวัง:

  • ทำให้งงงวยซอร์สโค้ดของคุณชัดเจนว่านี่จะทำให้ซอร์สโค้ดของคุณดูเหมือนเป็นระเบียบและอ่านไม่ได้
  • ทริกเกอร์การตรวจสอบแบบสุ่มหลาย ๆ ครั้งภายในแอปพลิเคชันของคุณเช่นทุก ๆ สองชั่วโมง 24 ชั่วโมงหนึ่งวันสัปดาห์ ฯลฯ หรืออาจจะหลังจากการกระทำของผู้ใช้ทุกครั้ง
  • บันทึกการตรวจสอบMD5ของแอปพลิเคชันที่นำออกใช้ของคุณบนเซิร์ฟเวอร์ของคุณและใช้งานรูทีนที่สามารถตรวจสอบการตรวจสอบ MD5 ไฟล์ปัจจุบันด้วยการตรวจสอบสถานะจริงบนฝั่งเซิร์ฟเวอร์ของคุณแล้วทำการทริกเกอร์แบบสุ่ม หากการตรวจสอบ MD5 มีการเปลี่ยนแปลงนั่นหมายความว่าสำเนานี้ถูกละเมิดลิขสิทธิ์ ตอนนี้คุณสามารถบล็อกหรือปล่อยการอัปเดตเพื่อบล็อกเป็นต้น
  • ลองทำเป็นชุดคำสั่งที่สามารถตรวจสอบว่าบางรหัสของคุณ (ฟังก์ชันคลาสหรือรูทีนเฉพาะ) มีการแก้ไขหรือเปลี่ยนแปลงหรือลบออก ฉันเรียกมันว่า (ตรวจสอบความสมบูรณ์ของรหัส)
  • ใช้ packers ที่ไม่รู้จักฟรีเพื่อแพ็คใบสมัครของคุณ หรือถ้าคุณมีเงินไปสำหรับการแก้ปัญหาในเชิงพาณิชย์เช่นThamidaหรือ.NET ปฏิกรณ์ แอปพลิเคชันเหล่านั้นได้รับการอัปเดตเป็นประจำและเมื่อแคร็กเกอร์คลายแอปพลิเคชันของคุณคุณสามารถรับอัปเดตใหม่จาก บริษัท เหล่านั้นและเมื่อคุณได้รับการอัปเดตใหม่คุณเพียงแพ็คโปรแกรมของคุณแล้วปล่อยอัปเดตใหม่
  • ปล่อยการอัปเดตเป็นประจำและบังคับให้ลูกค้าของคุณดาวน์โหลดการอัปเดตล่าสุด
  • ในที่สุดทำให้ใบสมัครของคุณถูกมาก อย่าทำให้มันแพงเกินไป เชื่อฉันคุณจะได้รับลูกค้าที่มีความสุขมากขึ้นและแครกเกอร์เพิ่งจะออกใบสมัครของคุณเพราะมันไม่คุ้มค่ากับเวลาที่จะถอดรหัสใบสมัครราคาถูกมาก

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

สุดท้ายคุณต้องพิจารณาใช้เวลาในการเขียนโปรแกรมที่ดีและมีคุณภาพ อย่าเสียเวลากับการเข้ารหัสเลเยอร์ความปลอดภัยที่ซับซ้อน หากแครกเกอร์ที่ดีต้องการที่จะถอดรหัสใบสมัครของคุณเขา / เธอจะทำทุกอย่างที่คุณทำ ...

ตอนนี้ไปและใช้ของเล่นบางอย่างสำหรับแครกเกอร์ ...


5

มีSalamanderซึ่งเป็นคอมไพเลอร์. NET ดั้งเดิมและตัวเชื่อมโยงจาก Remotesoft ที่สามารถปรับใช้แอปพลิเคชันโดยไม่ต้องใช้. NET Framework ฉันไม่รู้ว่ามันดีแค่ไหนที่จะได้รับสิทธิ


คำตอบนั้นค่อนข้างง่าย: มันน่าเสียดายที่คำตอบส่วนใหญ่พูดถึงความงงงวย การทำให้งงงวยเป็นสิ่งที่ดีสำหรับการหยุดสิ่งแรก (เหมือนตัวสะท้อน) พยายามมองดูในรหัสของคุณนั่นคือทั้งหมดที่ นั่นไม่เลวเลย และแน่นอนว่าไม่มีอะไรที่หยุดแฮ็กเกอร์ตัวจริงที่เข้าใจรหัสการประกอบนอกจากการเขียนแอปพลิเคชัน SAAS (แม้ว่าพวกเขาจะสามารถแฮ็คเซิร์ฟเวอร์ของคุณ) แต่มีมากกว่านั้นมีเครื่องมืออย่างเช่น Salamander, .NET Reactor ที่กล่าวถึงซึ่งให้ (อาจ) เกือบฟอร์มการรักษาความปลอดภัยเดียวกัน uncompiling เป็น C ++ ที่คอมไพล์ด้วย Win32 .exe เครื่องมือใดดีที่สุดฉันยังไม่สามารถตัดสินได้
Philm

5

หาก Microsoft สามารถหาวิธีแก้ปัญหาได้เราจะไม่มี Windows รุ่นละเมิดลิขสิทธิ์ดังนั้นจึงไม่มีสิ่งใดปลอดภัยมาก ต่อไปนี้เป็นคำถามที่คล้ายกันจาก Stack Overflow และคุณสามารถใช้วิธีการป้องกันของคุณเอง หากคุณกำลังปล่อยรุ่นที่แตกต่างจากนั้นคุณสามารถนำเทคนิคที่แตกต่างกันสำหรับรุ่นที่แตกต่างกันดังนั้นเมื่อถึงเวลาที่หนึ่งจะแตกที่สองสามารถใช้


5

เครื่องปฏิกรณ์. NET

ปรับปรุง

จาเร็ดชี้ให้เห็นว่าde4dotอ้างว่าสามารถถอดรหัสได้

เครื่องปฏิกรณ์. NET ให้การปกป้องที่สมบูรณ์สำหรับทรัพย์สินทางปัญญาที่ละเอียดอ่อนของคุณโดยการแปลงแอสเซมบลี. NET ของคุณให้เป็นกระบวนการที่ไม่ได้รับการจัดการซึ่งไม่สามารถเข้าใจได้ว่าเป็น CIL และไม่มีเครื่องมือใดที่สามารถถอดรหัสได้ แฮกเกอร์ไม่สามารถเข้าถึงแหล่งข้อมูลของคุณได้

คุณสมบัติการออกใบอนุญาต. NET Reactor มีประสิทธิภาพและยืดหยุ่นช่วยให้คุณสามารถบังคับใช้เงื่อนไขสิทธิ์ใช้งานของคุณและปกป้องกระแสรายได้ของคุณโดยใช้การล็อกฮาร์ดแวร์และซอฟต์แวร์ ผู้จัดการใบอนุญาตสามารถสร้างใบอนุญาตทดลองหรือใบอนุญาตถาวรในไม่กี่วินาที ชุดพัฒนาซอฟต์แวร์ที่มีเอกสารครบถ้วน (SDK) พร้อมด้วยตัวอย่างช่วยให้คุณสามารถโทรหาระบบใบอนุญาตได้โดยตรงจากรหัสของคุณทำให้คุณสามารถสร้างส่วนขยายที่กำหนดเองไปยังระบบใบอนุญาตได้


3
ฉันพยายามที่จะติดต่อพวกนั้นด้วยคำถามบางอย่างฉันมีเกี่ยวกับผลิตภัณฑ์ของพวกเขา แต่พวกเขาไม่เคยตอบ คุณลองใช้ผลิตภัณฑ์ของพวกเขาหรือยัง ฉันได้ไปกับแอสเซมบลีที่ชาญฉลาดและทั้งผลิตภัณฑ์และการสนับสนุนของพวกเขาดีมาก แต่อย่างที่ฉันพูดไปแล้วในการทำให้งงงวยคำถามเป็นวิธีหนึ่ง แต่ไม่ได้พิสูจน์เต็มรูปแบบ
Priyank Bolia

1
ฉันมีปัญหาบางอย่างกับผลิตภัณฑ์ของพวกเขาก่อนหน้านี้และจากนั้นฉันถามคำถามเกี่ยวกับไอคอนความละเอียดสูงในgroups.google.se/group/net-reactor-usersและฉันได้รับคำตอบและแก้ไข แต่ตอนนี้ดูเหมือนว่าพวกเขาจะยากที่จะ ได้รับของ การที่ไม่ดี - มันเป็นผลิตภัณฑ์ที่ดีและฉันยังคงใช้มัน
loraderon

2
หาก "ไม่มีเครื่องมือที่สามารถถอดรหัสได้" ทำไมถึงแสดงรายการเป็น obfuscator / packer ที่รองรับบนหน้าคุณสมบัติde4dot
Jared Thirsk

อาจเป็นเพราะมันเป็นคำสั่งเก่าและพวกเขาไม่ได้อัปเดตหน้าเว็บของพวกเขา ฉันไม่ได้เป็นผู้ใช้เครื่องมือทำให้งงอีกต่อไป
loraderon

de4dot เป็นเครื่องมือที่ทรงพลังมาก ฉันได้ลองใช้กับผู้ obfuscators หลายคนแล้วและมันก็ทำได้ดีมาก อย่างไรก็ตามมันไม่สามารถจัดการไฟล์ที่ได้รับการป้องกัน. NET Reactor (v6.0) บางที de4dot อาจไม่ทันสมัย
InputOutput

4

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


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

ฉันเห็นด้วยอย่างสมบูรณ์ นั่นเป็นเหตุผลที่ฉันพูดว่า "นี่น่าจะรุกรานมากกว่าที่คุณต้องการ ... " ในบรรทัดสุดท้ายของฉัน ผมก็แค่นำเสนอสหกรณ์ทางออกที่ดีที่สุดที่ผมคิดว่าเป็นไปได้ในทางเทคนิคไม่ใช่วิธีที่ดีที่สุดในการทำให้ลูกค้ามีความสุข :)
rmeador

ในช่วงไตรมาสแรกของปี 2010 (หลายเดือนหลังจากเขียนคำตอบนี้) บริษัท พัฒนาเกม Ubisoft พยายามทำเช่นนี้และเห็นได้ชัดว่าการโหลดองค์ประกอบฝั่งเซิร์ฟเวอร์นั้นใหญ่มากจนเกมไม่สามารถเล่นได้ ความประทับใจโดยรวมของ SW: "ยุ่งยากในการติดตั้งไม่สามารถใช้ออฟไลน์รุกรานและไม่น่าเชื่อถือ " ดังนั้นหากคุณตัดสินใจว่าการประมวลผลฝั่งเซิร์ฟเวอร์เป็นวิธีที่ควรดำเนินการตรวจสอบให้แน่ใจว่าคุณสามารถปรับขนาดตามความต้องการได้จริง
Piskvor ออกจากอาคารเมื่อ

3

สิ่งใดที่ทำงานบนไคลเอนต์สามารถ decompiled และถอดรหัส การทำให้งงงวยทำให้มันยากขึ้น ฉันไม่รู้จักใบสมัครของคุณ แต่ 99% ของเวลาที่ฉันไม่คิดว่ามันคุ้มค่ากับความพยายาม


3

เป็นไปไม่ได้ที่จะรักษาความปลอดภัยแอปพลิเคชันอย่างสมบูรณ์ขออภัย



2

โปรดทราบว่า 99% ของผู้ใช้ของคุณจะไม่สนใจที่จะตรวจสอบการปฏิบัติการของคุณเพื่อดูว่ามันทำงานอย่างไร

เนื่องจากมีคนไม่กี่คนที่จะพยายามมายุ่งและผู้ที่มีปัญหาด้านการทำงานสามารถหลีกเลี่ยงได้มันคุ้มค่ากับเวลาและความพยายามของคุณหรือไม่?

คุณควรลงทุนเพื่อพัฒนาผลิตภัณฑ์ของคุณเพื่อให้ผู้คนต้องการใช้งานมากขึ้น


2

เพียงแค่เพิ่มคำเตือน: ถ้าคุณกำลังจะใช้ obfuscation ตรวจสอบว่าทุกอย่างยังใช้งานได้! ความสับสนอาจเปลี่ยนแปลงสิ่งต่าง ๆ เช่น class- และ method-names ดังนั้นหากคุณใช้การสะท้อนเพื่อเรียกใช้เมธอดและ / หรือคลาส (เช่นในสถาปัตยกรรมปลั๊กอิน) แอปพลิเคชันของคุณอาจล้มเหลวหลังจากทำให้งง กองซ้อนยังอาจไม่มีประโยชน์ในการติดตามข้อผิดพลาด


2

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


2

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

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

หากไม่ใช่เว็บแอปพลิเคชันคุณอาจอนุญาตให้ลงชื่อเข้าใช้SSHด้วย X ส่งต่อไปยังเซิร์ฟเวอร์แอปพลิเคชัน (หรือการเชื่อมต่อเดสก์ท็อประยะไกลฉันเดาว่าสำหรับ Windows)

ถ้าคุณให้รหัสวัตถุให้แก่บุคคลประเภทโง่และพวกเขาคิดว่าโปรแกรมของคุณอาจจะสนุกกับการแตกก็จะได้รับการแตก ไม่มีทางรอบ ๆ มัน

หากคุณไม่เชื่อฉันให้ชี้แอปพลิเคชั่นที่มีชื่อเสียงซึ่งไม่ได้แตกและละเมิดลิขสิทธิ์

ถ้าคุณไปกับกุญแจฮาร์ดแวร์มันจะทำให้การผลิตแพงขึ้นและผู้ใช้ของคุณจะเกลียดคุณ มันเป็นเรื่องเลวร้ายจริงๆที่จะคลานไปมาบนพื้นและถอดปลั๊ก USB ของคุณ 27 อันเพราะผู้ผลิตซอฟต์แวร์ไม่เชื่อใจคุณ (ฉันจินตนาการ)

มีแพ็คเกจออกมีที่จะเข้ารหัส EXE ของคุณและถอดรหัสเมื่อผู้ใช้ได้รับอนุญาตให้ใช้

แน่นอนว่าวิธีการโดยรอบคือการทดสอบ "can-I-use-it" เพื่อให้ผลตอบแทนเป็นจริงเสมอ

เคล็ดลับที่น่ารังเกียจอาจใช้ค่า byte ของ opcodes ที่ทำการทดสอบที่อื่นในโปรแกรมด้วยวิธีที่สกปรกซึ่งจะทำให้โปรแกรมขัดข้องด้วยความน่าจะเป็นสูงยกเว้นว่าค่านั้นถูกต้อง มันทำให้คุณเชื่อมโยงกับสถาปัตยกรรมเฉพาะแม้ว่า :-(


ไม่ใช่จุดบกพร่องที่ง่ายต่อการตรวจแก้จุดบกพร่องและแทนที่รหัสใน. NET เพื่อเลี่ยงผ่านการตรวจสอบนั้น คุณจะเปลี่ยน opcode ใน. NET ได้อย่างไร
Priyank Bolia

โอ้ ฉันมีกลอุบายในใจ พูดใช้ที่อยู่ของฟังก์ชั่นการตรวจสอบเพิ่มขึ้น 10 ไบต์แรกในอาร์เรย์ถ่านที่ (โยนตัวชี้ฟังก์ชั่น); เลือกฟังก์ชั่น f ใด ๆ และเก็บ [ที่อยู่ของ f ลบผลรวมก่อนหน้านี้] ใน fptr เรียก f เป็น * เสมอ (fptr + ยอดรวมนั้น) Precompute "sum sum"
Jonas Kölker

2

เพียงแค่ทำให้แอปพลิเคชันที่ดีและรหัสเป็นระบบการป้องกันที่ง่าย ไม่สำคัญว่าคุณจะเลือกการป้องกันแบบใดมันจะกลับรายการ ... ดังนั้นอย่าเสียเวลา / เงินมากเกินไป


2

เมื่อพูดถึง. NET หากคุณปล่อยแอปพลิเคชันWindows Forms (หรือแอปพลิเคชันใด ๆ ที่ไคลเอ็นต์มีไฟล์ Portable Executable) ก็สามารถถอดรหัสได้

ถ้าคุณต้องการติดกับ. NET และต้องการลดโอกาสที่จะได้รับซอร์สโค้ดของคุณคุณอาจต้องการพิจารณาปรับใช้เป็นแอปพลิเคชันASP.NETในเว็บเซิร์ฟเวอร์แทนที่จะทำให้เป็นแอปพลิเคชัน Windows Forms


2

ตรงไปตรงมาบางครั้งเราต้องทำให้งงงวยรหัส (ตัวอย่างเช่นการลงทะเบียนเรียนใบอนุญาตและอื่น ๆ ) ในกรณีนี้โครงการของคุณไม่ฟรี IMO คุณควรจ่ายค่า obfucator ที่ดี

Dotfuscatorซ่อนรหัสของคุณและ. NET Reflectorจะแสดงข้อผิดพลาดเมื่อคุณพยายามที่จะถอดรหัสมัน


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.