ฉันจะป้องกันไม่ให้ลูกค้าเห็นรหัสของฉันเขียนเป็นภาษาที่ตีความได้อย่างไร


16

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

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


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

2
ฉันคิดว่ามันเป็นไปได้ที่จะรวบรวมไพ ธ อนเป็นไบนารี่ เป็นไปได้สำหรับโครงการนี้? ถ้าเป็นเช่นนั้นคุณสามารถปรับใช้ไบนารีแทน
FrustratedWithFormsDesigner

nightcracker ถูกต้องในความคิดของฉัน การออกใบอนุญาตและสัญญาที่เหมาะสมควรป้องกันสิ่งเหล่านี้ทั้งหมดไม่ใช่มาตรการทางเทคนิค โดยเฉพาะอย่างยิ่งเพราะคุณสามารถถอดรหัส / กำจัดสิ่งที่ทำให้สับสนและrootอนุญาตให้ทำทุกอย่างได้เสมอ
Bobby

คิดว่าเป็นวิธีอื่นถ้าพวกเขาทำสัญญาหรือใบอนุญาตคุณสามารถฟ้องพวกเขาจนกว่าพวกเขาจะร้องไห้
Jakob Bowyer

9
ทุกคนมักจะบอกว่ารหัสของพวกเขามีค่าพอใช้
Kaleb Brasee

คำตอบ:


40

อนุญาตให้ใช้งาน

จริงๆแล้วนั่นคือทั้งหมด!


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

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

ครีเอทีฟคอมมอนส์จะมีสิทธิ์ใช้งานเพียงพอหรือไม่

10
-1 คำถามถามถึงวิธีที่จะหยุดไม่ให้ลูกค้าเห็นรหัสซึ่งไม่ได้เป็นเช่นนั้น ผู้คนไม่เชื่อฟังใบอนุญาตเสมอไปและอาจเป็นไปไม่ได้ที่จะทราบว่าถูกต้องตามกฎหมายเพื่อฟ้องร้อง
Orbling

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

10

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

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

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


ผมมีคำถาม. คอมไพเลอร์ไบต์ใช้ชื่อตัวแปรตามอำเภอใจหรือใช้ชื่อตัวแปรเก่าหรือไม่? (ฉันคิดว่ามันจะต้องใช้อันเก่าเพราะโมดูลภายนอกพึ่งพาเนมสเปซนั้น)

@Garrett: bytecode มีชื่อตัวแปร ก็ยังคงเป็นระเบียบค่อนข้างไม่สามารถอ่านได้เมื่อถอดชิ้นส่วน (ลองย่อยถอดชิ้นส่วนของสูตรนี้ ) และมีไม่ใด ๆ (ล่าสุด) decompilers

7

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

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

http://www.korokithakis.net/node/109


1

ดังที่ผู้ใช้ข้างต้นแสดงให้เห็นว่า disassembler สามารถรับรหัสกลับมาได้ แต่ก็ยังไม่สามารถอ่านได้มาก (อย่างน้อยก็ไม่ใช่สำหรับ Disassemblers โอเพนซอร์ส)

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

ทำค้นหาบน PyPI ผมพบนี้: http://pypi.python.org/pypi/pyfuscate/0.1 คุณควรตรวจสอบและอื่น ๆ ที่ชอบและรายงานกลับ: D

นอกจากนี้คุณควรอนุญาตให้ใช้งานด้วยเช่นกัน


1

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

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

สำหรับการป้องกันโฟลเดอร์จากการเข้าถึงรูทฉันยอมรับว่าไม่สามารถหยุดการเข้าถึงไฟล์ / โฟลเดอร์ใด ๆ ได้


นี่เป็นเพียง obfuscation ด้วยเครื่องมือที่เหมาะสมจะมีเสมอเป็นจุดในเวลาที่รหัสที่อยู่ในข้อความธรรมดา วิธีง่ายๆในการเอาชนะโซลูชันของคุณคือเพียงแค่สลับruby/python / nodeด้วยโปรแกรมที่กำหนดเองทำมิเรอร์ API การดำเนินการและส่งออกโค้ด
Jamo

นอกจากนี้คีย์ส่วนตัว (สำหรับการถอดรหัส) จะต้องพร้อมใช้งานกับสภาพแวดล้อมจึงพร้อมใช้งานสำหรับผู้โจมตี
Fixee

0

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

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