ฉันจะสร้างรหัสผลิตภัณฑ์สำหรับแอปพลิเคชัน C # ของฉันได้อย่างไร


91

ฉันจะสร้างรหัสผลิตภัณฑ์สำหรับแอปพลิเคชัน C # ของฉันได้อย่างไร

ฉันต้องการสร้างคีย์ผลิตภัณฑ์ (หรือใบอนุญาต) ที่ฉันอัปเดตเป็นประจำทุกปี นอกจากนี้ฉันต้องสร้างหนึ่งสำหรับรุ่นทดลอง

ที่เกี่ยวข้อง:


ที่เกี่ยวข้อง: stackoverflow.com/questions/715251/…
Stukelly

@stukelly ที่โพสต์หลังจาก J3r3myK โพสต์คำถามของเขา ...
Dozer789

คำตอบ:


83

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

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

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

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

พิจารณาค่าใช้จ่ายในการสนับสนุนที่ต้องจัดการกับผู้ใช้ที่ลืมรหัสเป็นต้น

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


1
สรุปได้ดี. หากใครไม่เชื่อว่านี่เป็นเรื่องง่ายที่จะหลีกเลี่ยงการค้นหา CheatEngine มันเป็นเรื่องง่ายมากที่ไม่ใช่โปรแกรมเมอร์ก็สามารถทำได้ ดีที่สุดที่จะทำให้เลเยอร์นี้เรียบง่าย
Kelly

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

16

คุณไว้วางใจใคร?

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

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

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

จากนั้นตรวจสอบนรกออกจากพวกเขาและเพิ่มการเข้ารหัส (ย้อนกลับได้) ที่คุณต้องการเพื่อให้ยากต่อการถอดรหัส

ในการสร้างรหัสสัญญาอนุญาตรุ่นทดลองใช้เพียงแค่ตั้งค่าสำหรับค่าข้างต้นที่แปลเป็น "โหมดทดลองใช้"

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

บริษัท หลายแห่งที่ฉันเคยทำงานได้นำแนวทางทั่วไปมาใช้เพื่อให้ประสบความสำเร็จอย่างมาก หรืออาจจะได้ของไม่คุ้มค่า;)


3
การเข้ารหัส FYI สามารถย้อนกลับได้เสมอมันจะไม่มีประโยชน์ที่จะไม่สามารถอ่านสิ่งที่เข้ารหัสได้ การแฮชเป็น 'การเข้ารหัส' วิธีหนึ่งที่คุณอาจนึกถึง
ซามูเอล

"อย่าม้วนแผนการเข้ารหัสของคุณเอง" ซึ่งฉันคิดว่ามาจาก Bruce Scheier (ไม่แน่ใจ) เป็นวิธีที่จะไป คุณอาจต้องการดูคำตอบนี้: security.stackexchange.com/questions/2202/…
Shadok

ช่วยอธิบายให้ละเอียด ".. P / Invoke to it". ฉันดูหน้าที่เชื่อมโยง แต่มันไม่ได้ทำให้ฉันฉลาดขึ้น: - /
MrCalvin

11

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

ตรรกะของคีย์ผลิตภัณฑ์อย่างง่ายอาจเริ่มต้นด้วยการบอกว่าหมายเลขผลิตภัณฑ์ประกอบด้วยกลุ่ม 5 หลักสี่กลุ่มเช่นabcde-fghij-kljmo-pqrstและจากนั้นระบุความสัมพันธ์ภายในเช่น f + k + p ควรเท่ากับ a ซึ่งหมายถึงตัวเลขแรกของ 2 กลุ่ม 3 และ 4 ควรรวมเป็นก. ซึ่งหมายความว่าใช้ได้ 8xxxx-2xxxx-4xxxx-2xxxx ดังนั้นคือ 8xxxx-1xxxx-0xxxx-7xxxx แน่นอนว่าจะมีความสัมพันธ์อื่น ๆ เช่นกันรวมถึงความสัมพันธ์ที่ซับซ้อนเช่นหากตัวเลขหลักที่สองของกลุ่มแรกเป็นเลขคี่ตัวเลขสุดท้ายของกลุ่มสุดท้ายก็ควรเป็นเลขคี่เช่นกัน วิธีนี้จะมีเครื่องกำเนิดไฟฟ้าสำหรับคีย์ผลิตภัณฑ์และการตรวจสอบคีย์ผลิตภัณฑ์ก็เพียงแค่ตรวจสอบว่าตรงกับกฎทั้งหมดหรือไม่

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


9

ไม่ว่าจะเป็นเรื่องเล็กน้อยหรือยากที่จะแตกฉันไม่แน่ใจว่ามันสร้างความแตกต่างได้มากจริงๆ

ความเป็นไปได้ที่แอปของคุณจะแตกนั้นขึ้นอยู่กับประโยชน์ของแอปมากกว่าความแข็งแกร่งของการจัดการคีย์ผลิตภัณฑ์

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


6

ฉันต้องยอมรับว่าฉันทำอะไรบางอย่างที่ค่อนข้างบ้าคลั่ง

  1. ค้นหาคอขวดของ CPU และแตกออกเป็นไฟล์P / Invokeable DLL
  2. ในการดำเนินการสร้างโพสต์ให้เข้ารหัสส่วนของไฟล์ DLL ด้วยคีย์เข้ารหัส XOR
  3. เลือกรูปแบบคีย์สาธารณะ / ส่วนตัวรวมคีย์สาธารณะในไฟล์ DLL
  4. จัดเรียงเพื่อให้ถอดรหัสรหัสผลิตภัณฑ์และ XOR การแบ่งทั้งสองครึ่งเข้าด้วยกันส่งผลให้คีย์เข้ารหัสสำหรับ DLL
  5. ในรหัส DllMain ของ DLL ให้ปิดการใช้งานการป้องกัน (PAGE_EXECUTE_READWRITE) และถอดรหัสด้วยคีย์
  6. สร้าง LicenseCheck () วิธีการที่ตรวจสอบความถูกต้องของรหัสใบอนุญาตและพารามิเตอร์จากนั้นตรวจสอบไฟล์ DLL ทั้งหมดโยนการละเมิดใบอนุญาตอย่างใดอย่างหนึ่ง โอ้และเริ่มต้นอื่น ๆ ที่นี่

เมื่อพวกเขาค้นหาและลบ LicenseCheck สิ่งที่สนุกจะตามมาเมื่อ DLL เริ่มข้อบกพร่องในการแบ่งกลุ่ม


ถ้าอย่างนั้นไม่จำเป็นต้องปิดการใช้งาน DEP?
Rowland Shaw

ไม่การตั้งค่า PAGE_EXECUTE_READWRITE เป็นเอกสารวิธีที่ถูกต้องในการเขียนโค้ดที่ปรับเปลี่ยนเองและล้างบิต NX บนเพจนั้นเท่านั้น
Joshua

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

5

มีตัวเลือกMicrosoft Software Licensing and Protection (SLP) Services ด้วย หลังจากอ่านเรื่องนี้ฉันหวังว่าฉันจะได้ใช้มันจริงๆ

ฉันชอบแนวคิดในการบล็อกบางส่วนของโค้ดตามใบอนุญาต สิ่งที่น่าสนใจและปลอดภัยที่สุดสำหรับ. NET อ่านน่าสนใจแม้ว่าคุณจะไม่ได้ใช้ก็ตาม!

Microsoft® Software Licensing and Protection (SLP) Services คือบริการเปิดใช้งานซอฟต์แวร์ที่ช่วยให้ผู้จำหน่ายซอฟต์แวร์อิสระ (ISV) สามารถใช้เงื่อนไขการอนุญาตที่ยืดหยุ่นสำหรับลูกค้าของตนได้ Microsoft SLP Services ใช้วิธีการป้องกันที่เป็นเอกลักษณ์ซึ่งช่วยปกป้องแอปพลิเคชันและข้อมูลการออกใบอนุญาตของคุณทำให้คุณสามารถออกสู่ตลาดได้เร็วขึ้นในขณะที่เพิ่มการปฏิบัติตามข้อกำหนดของลูกค้า

หมายเหตุ: นี่เป็นวิธีเดียวที่ฉันจะเผยแพร่ผลิตภัณฑ์ที่มีรหัสที่ละเอียดอ่อน (เช่นอัลกอริทึมที่มีค่า)


สำหรับผู้ที่จำได้ว่ายกเลิก: SLP จะเปิดใหม่อีกครั้ง
Michael Olesen

5

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


2

อีกหนึ่งเครื่องมือราคาไม่แพงสำหรับคีย์ผลิตภัณฑ์และการเปิดใช้งานคือผลิตภัณฑ์ที่เรียกว่า InstallKey ลองดูที่www.lomacons.com


2

วิธีง่ายๆอย่างหนึ่งคือการใช้Global Unique Identifier (GUID) โดยปกติ GUID จะถูกจัดเก็บเป็นค่า 128 บิตและโดยทั่วไปจะแสดงเป็นเลขฐานสิบหก 32 หลักโดยมีกลุ่มคั่นด้วยเครื่องหมายขีดกลางเช่น{21EC2020-3AEA-4069-A2DD-08002B30309D}.

ใช้รหัสต่อไปนี้ใน C # System.Guid.NewGuid()โดย

getKey = System.Guid.NewGuid().ToString().Substring(0, 8).ToUpper(); //Will generate a random 8 digit hexadecimal string.

_key = Convert.ToString(Regex.Replace(getKey, ".{4}", "$0/")); // And use this to separate every four digits with a "/".

ฉันหวังว่ามันจะช่วยได้


1

เคล็ดลับคือการมีอัลกอริทึมที่คุณเท่านั้นที่รู้ (ซึ่งสามารถถอดรหัสได้ที่ปลายอีกด้านหนึ่ง)

มีสิ่งง่ายๆเช่น "เลือกจำนวนเฉพาะและเพิ่มจำนวนวิเศษ"

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

อาจคุ้มค่าที่จะอ่านคำตอบสำหรับคำถามนี้เช่นกัน


6
"เคล็ดลับคือการมีอัลกอริทึมที่คุณเท่านั้นที่รู้" ซึ่งเป็นคำจำกัดความของการรักษาความปลอดภัยโดยความคลุมเครือและเป็นความคิดที่แย่มาก
Nick Johnson

3
การออกใบอนุญาตทั้งหมดเป็นไปตามอัลกอริทึมที่เกี่ยวข้องกับความลับ การออกใบอนุญาตมักเป็นแนวทางที่ดีที่สุดโดยการลงทุนในทนายความมากกว่าการแข่งขันด้านอาวุธที่จะมาพร้อมกับกุญแจที่ "ไม่แตกหัก"
Rowland Shaw

+1 สำหรับความคิดเห็นเกี่ยวกับการบังคับใช้ใบอนุญาตด้วยวิธีทางกฎหมาย
Rob

ใช่การออกใบอนุญาตทั้งหมดอ่อนแอเช่นเดียวกับ DRM แม้ว่าการใช้อัลกอริทึมลับจะอ่อนแอกว่าอย่างเห็นได้ชัด
Nick Johnson

1
ฉันให้ +1 สำหรับคำตอบที่ดีและหวังว่าฉันจะให้อีกคนด้วยเพื่อต่อต้านการโหวตลง น่าเศร้าที่มีทารกตัวเล็ก ๆ บางคนในโลกนี้ที่ยังไม่บรรลุนิติภาวะ
ProfK


0

คุณสามารถตรวจสอบLicenseSpot ให้:

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

1
"ฟรี" ไม่ฟรีจริงๆ สามารถฝังส่วนประกอบการให้ใบอนุญาตลงในแอปของคุณได้ฟรี ไม่ฟรีสำหรับแอปที่จะใช้องค์ประกอบการให้สิทธิ์การใช้งานจริง นอกเหนือจากการเปิดใช้งาน 10 ครั้งคุณต้องจ่ายค่าธรรมเนียมรายเดือน ไม่ใช่เปอร์เซ็นต์ต่อการเปิดใช้งาน สำหรับแอป. NET ราคาประหยัดปริมาณต่ำรูปแบบการกำหนดราคานี้จะเป็นข้อเสีย ไม่เหมือนกับ Apple AppStore สำหรับแอป. NET
Cheeso

0

ฉันจะพูดถึงคำตอบที่ยอดเยี่ยมของ @ frankodwyer และเจาะลึกลงไปอีกเล็กน้อยเกี่ยวกับการออกใบอนุญาตออนไลน์ ฉันเป็นผู้ก่อตั้งKeygenซึ่งเป็น REST API ที่ออกใบอนุญาตที่สร้างขึ้นสำหรับนักพัฒนา

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

เพื่อเริ่มต้นเราสามารถสร้าง 2 ประเภทใบอนุญาต (เรียกว่านโยบายใน Keygen) และเมื่อใดก็ตามที่ผู้ใช้ลงทะเบียนบัญชีคุณสามารถสร้าง "การทดลอง" ใบอนุญาตสำหรับพวกเขาที่จะเริ่มต้น (ที่ "การทดลอง" ใบอนุญาตการดำเนินการของเรา "การทดลอง" นโยบายคุณลักษณะ) ซึ่งคุณสามารถใช้เพื่อทำการตรวจสอบต่างๆภายในแอปเช่นผู้ใช้สามารถใช้ทดลองคุณสมบัติ-Aและทดลองคุณสมบัติ-B

และการสร้างว่าเมื่อใดก็ตามที่ผู้ใช้ซื้อแอปของคุณ (ไม่ว่าคุณกำลังใช้ PayPal, ลาย ฯลฯ ) คุณสามารถสร้างใบอนุญาตการดำเนินการ "เต็ม" นโยบายคุณลักษณะและเชื่อมโยงกับผู้ใช้บัญชี ตอนนี้ภายในแอปของคุณคุณสามารถตรวจสอบว่าผู้ใช้มีใบอนุญาต "เต็ม" ที่สามารถทำPro-Feature-XและPro-Feature-Y ได้หรือไม่ (โดยทำสิ่งที่ต้องการuser.HasLicenseFor(FEATURE_POLICY_ID))

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

  1. บัญชีผู้ใช้ช่วยให้คุณสามารถเชื่อมโยงใบอนุญาตหลายใบและหลายเครื่องกับผู้ใช้คนเดียวทำให้คุณเข้าใจพฤติกรรมของลูกค้าและแจ้งให้พวกเขา "ซื้อในแอป"นั่นคือการซื้อเวอร์ชัน "เต็ม" ของคุณ (ประเภทคล้ายแอปบนอุปกรณ์เคลื่อนที่)
  2. เราไม่ควรกำหนดให้ลูกค้าของเราป้อนรหัสใบอนุญาตแบบยาวซึ่งทั้งน่าเบื่อในการป้อนข้อมูลและยากที่จะติดตามว่าพวกเขาสูญหายได้ง่าย (ลองค้นหา "คีย์ใบอนุญาตที่สูญหาย" ใน Twitter!)
  3. ลูกค้าจะได้คุ้นเคยกับการใช้อีเมล / รหัสผ่าน ; ฉันคิดว่าเราควรทำในสิ่งที่ผู้คนคุ้นเคยเพื่อให้เราสามารถมอบประสบการณ์การใช้งานที่ดี (UX) แก่ผู้ใช้

แน่นอนว่าหากคุณไม่ต้องการจัดการบัญชีผู้ใช้และคุณต้องการให้ผู้ใช้ของคุณป้อนรหัสใบอนุญาตก็ทำได้ดี (และ Keygen ก็รองรับการทำเช่นนั้นเช่นกัน ) ฉันแค่เสนอวิธีอื่นในการจัดการด้านการออกใบอนุญาตและหวังว่าจะให้ UX ที่ดีสำหรับลูกค้าของคุณ

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

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


0

โปรดตรวจสอบคำตอบนี้: https://stackoverflow.com/a/38598174/1275924

แนวคิดคือการใช้Cryptolensเป็นเซิร์ฟเวอร์ใบอนุญาต นี่คือตัวอย่างทีละขั้นตอน (ใน C # และ VB.NET) ฉันได้แนบข้อมูลโค้ดสำหรับการยืนยันคีย์ด้านล่างด้วย (ใน C #):

var licenseKey = "GEBNC-WZZJD-VJIHG-GCMVD";
var RSAPubKey = "{enter the RSA Public key here}";

var auth = "{access token with permission to access the activate method}";
var result = Key.Activate(token: auth, parameters: new ActivateModel()
{
    Key = licenseKey,
    ProductId = 3349,
    Sign = true,
    MachineCode = Helpers.GetMachineCode()
});

if (result == null || result.Result == ResultType.Error ||
    !result.LicenseKey.HasValidSignature(RSAPubKey).IsValid())
{
    // an error occurred or the key is invalid or it cannot be activated
    // (eg. the limit of activated devices was achieved)
    Console.WriteLine("The license does not work.");
}
else
{
    // everything went fine if we are here!
    Console.WriteLine("The license is valid!");
}

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