คุณใช้อะไรในการรวมกลุ่ม / เข้ารหัสข้อมูล


14

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

คำถามเฉพาะนี้หมุนรอบ C ++ แต่ฉันจะเปิดให้ฟังวิธีการจัดการใน C # / XNA เช่นกัน

เพื่อให้ชัดเจน - ฉันไม่ได้ออกวิธีแก้ปัญหาเพื่อป้องกันการแฮ็ค ในระดับพื้นฐานเราทุกคนกำลังจัดการ 0 และ 1 แต่เราต้องการที่จะป้องกันไม่ให้คน 99% ที่เล่นเกมนี้แก้ไขไฟล์ XML ที่ใช้ในการสร้างโลกของเกม ฉันเห็นเกมมากมายรวมทรัพยากรทั้งหมดเข้าด้วยกัน ฉันแค่อยากรู้เกี่ยวกับวิธีการที่พวกเขาใช้


เป็นคำถามที่ดีในขณะที่ฉันไม่เชื่อว่ามีวิธีปกป้อง 100% แต่ฉันเชื่อว่ามีวิธีการกระชับและทำให้งงงวยและฉันต้องการทราบเพิ่มเติมเกี่ยวกับเรื่องนี้ ...
Prix

มันคุ้มค่าที่จะถามว่าเนื้อหาศิลปะ / เสียงของคุณควรได้รับการพิจารณาว่า "ละเอียดอ่อน" หรือไม่ มีหลายเกมที่เปิดเผยสินทรัพย์ของพวกเขาแก่ผู้เล่นเพื่อสนับสนุนชุมชน mod ที่มีสุขภาพดีซึ่งสามารถเพิ่มมูลค่าให้กับเกมได้ (โดยไม่ต้องเสียค่าใช้จ่ายใด ๆ กับผู้พัฒนา)
Ian Schreiber

ฉันเกี่ยวข้องกับข้อมูลที่สำคัญซึ่งเป็นตัวขับเคลื่อนเกมที่ขับเคลื่อนด้วยข้อมูล (เช่นไฟล์ xml) ฉันเพิ่งเห็นเกมรวมทุกอย่างเข้าด้วยกันเป็นหนึ่งหรือสองไฟล์
David McGraw

4
เกิดอะไรขึ้นกับผู้เล่นที่เล่นกับข้อมูลนั้น
jsimmons

เพื่อเอาชนะกลองของตัวเอง .. CFL: iki.fi/sol/cfl
Jari Komppa

คำตอบ:


8

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

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

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

อย่างไรก็ตามไม่มีอะไรปลอดภัย 100%


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

@MrCranky: ถ้าคุณดูวิธีที่ EA ทำกับรูปแบบการจัดเก็บ.. (DBPF) ของพวกเขา (ใช้ในเกม SPORE และ The Sims) คุณจะเห็นการกระทำนี้จริง เอ็นจิ้นของพวกเขามีฟิลด์พิเศษในตารางดัชนีสำหรับ "ชนิดบีบอัด" รหัสภายในสำหรับอัลกอริทึมที่จะใช้ พวกเขาใช้อัลกอริธึมการบีบอัดที่แตกต่างกันตามชนิดของชิ้น (ตัวอย่างข้อความใช้การบีบอัดแบบพิเศษเป็นต้น) ระบบการกำหนดเวอร์ชันที่ใช้ยังช่วยให้สามารถรวม mod และความเข้ากันได้ย้อนหลัง เพิ่มเติมเกี่ยวกับรูปแบบ DBPF ที่นี่: simswiki.info/DatabasePackedFile
voodooattack

สิ่งที่น่าสนใจ: ฉันเพิ่งทำมันในเวลาคอมไพล์ด้วย #define แต่ runtime เปิดโอกาสให้ดี (เช่นสามารถเปลี่ยนประเภทการบีบอัดของคุณโดยไม่ต้องสร้างทุกไฟล์สำหรับเกมของคุณ)
MrCranky

11

อย่าส่งข้อมูลที่ละเอียดอ่อน

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

หากคุณต้องการที่จะทำให้ทรัพย์สินในเกมของคุณอยู่ห่างจากการสอดรู้สอดเห็น

  1. ซิปขึ้น
  2. xor ไฟล์
  3. เปลี่ยนส่วนขยายเป็นสิ่งที่น่าเบื่อ (เช่นไม่ใช่my_level.zip.xorใช้my_level.map)

นั่นจะหยุดยั้ง 95% ของผู้ใช้ที่ไม่ตั้งใจ อีก 5% จะได้รับไม่ว่าคุณจะทำอะไร
คุณไม่จำเป็นต้องซิปและจริงxorๆ คุณสามารถแทน lzma และใช้ AES กับคีย์ที่รู้จักได้ ประเด็นก็คืออย่าใช้เวลากับมันมาก


นั่นคือสิ่งที่ฉันมักจะเห็นจากเกมส่วนใหญ่ ... คุกกี้สำหรับคุณ
Prix

2
เพียงแค่เปลี่ยนชื่อ zip + อาจจะเพียงพอ
coderanger

1
ฉันไม่คิดอย่างนั้นฉันชอบที่That will stop 95% of mischeivieous users.จะทำลายมันในขณะที่ฉันเชื่อว่ายังมีคนที่จะได้รับมันจริง ๆ ฉันจะขอบคุณถ้าไม่ทั้งหมดและแต่ละคนสามารถที่จะ วันนี้ส่วนใหญ่ 10 เด็กเก่า Y รู้วิธีการเปิดไฟล์ใน notepad และเปลี่ยนชื่อ ...
กรังปรีซ์

1
รู้วิธีใช่ จะไม่สนใจเลย
coderanger

zip + rename ไม่เพียงพอ Linux ไม่ค่อยใช้นามสกุลไฟล์เพื่อกำหนดประเภทของไฟล์ แต่จะดูที่สองสามไบต์แรกและใช้เพื่อกำหนดประเภทของมัน zip ที่ถูกเปลี่ยนชื่อจะยังคงปรากฏเป็น zip ใน Linux Windows XP ไม่ทำเช่นนี้ แต่ยังคงใช้ส่วนขยาย ฉันไม่รู้ว่า Windows7 ทำได้อย่างไร แต่ฉันคาดหวังว่าในอนาคต Windows จะใช้เทคนิคที่คล้ายกัน
deft_code

4

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


4

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


1
นั่นคือเป้าหมาย ฉันไม่มีความปรารถนาที่จะต่อสู้กับแฮ็กเกอร์
David McGraw

1

เป็นคำถามที่ดี แต่คำถามไม่สามารถตอบได้ง่าย
จากประสบการณ์ของฉันกับความปลอดภัยของข้อมูลคุณต้องคิดถึงสิ่งต่อไปนี้:

1) คุณรักษาความปลอดภัยอะไรจากใครและอะไรคือผลกระทบหากข้อมูลนั้นไม่ปลอดภัย - ความปลอดภัยนั้นเกี่ยวกับการประเมินความเสี่ยงมากกว่าโซลูชันทางเทคนิคที่เป็นระบบ
2) ฉันคิดว่าแพลตฟอร์มของคุณเป็นเดสก์ท็อป (เช่น Windows / OSX) พื้นที่ปัญหาที่แตกต่างจากฮาร์ดแวร์ที่เป็นกรรมสิทธิ์เช่น PS3 / Xenon ซึ่งมีความพยายามของตัวเองในการรักษาความปลอดภัยระดับเคอร์เนล (ไม่ว่าจะเป็นวิธีการแก้ปัญหาที่ถูกต้องเปิดให้อภิปราย)
3) การเข้ารหัส! การเข้ารหัสรับประกันเพียงว่าข้อมูลของคุณไม่สามารถอ่านได้ แต่ไม่รับประกันว่าข้อมูลของคุณจะไม่สามารถเขียนหรือเล่นซ้ำ / พร็อกซีได้

หากความต้องการของคุณคือการทำให้ข้อมูลของคุณถูกงัดแงะคุณต้องคิดเกี่ยวกับการแฮ็กข้อมูลของคุณ (โดยเฉพาะอย่างยิ่งกับ SHA-256 หรือ SHA-512) หากต้องการทบทวนซ้ำพิจารณาว่าทำไมมันถึงสำคัญและสิ่งที่คุณได้รับจากการเพิ่มความปลอดภัยให้กับ ระบบ.
นอกจากนี้ยังควรทราบด้วยว่าการเพิ่มเทคโนโลยีการเข้ารหัสลงในผลิตภัณฑ์ของคุณอาจมีผลทางกฎหมายเนื่องจากข้อ จำกัด การส่งออก (เทคโนโลยีการเข้ารหัสนั้นจัดอยู่ในประเภทเทคโนโลยีอาวุธที่มีข้อ จำกัด เชื่อหรือไม่) ดังนั้นควรใช้ห้องสมุดที่เอาชนะปัญหาทางกฎหมายเหล่านี้
ในที่สุด - ไม่เคยหมุนเทคโนโลยีการเข้ารหัสของคุณเอง - ใช้อัลกอริทึมที่รู้จักกันดีมีเอกสารการวิจัยเช่น AES, Blowfish, RSA เป็นต้น

ps พับลิก / ไพรเวทคีย์ไม่เหมาะหรือใช้ในการเข้ารหัสข้อมูลจำนวนมากดังนั้น DRM / PGP เป็นต้นใช้ระบบผสมRSA + symmetricเช่นความปลอดภัยของคีย์สมมาตรกับ RSA จากนั้นทำการเข้ารหัสสมมาตรมาตรฐานโดยใช้คีย์นั้น

มันเป็นเรื่องที่ซับซ้อนมากและฉันก็ไม่ได้ทำเรื่องความยุติธรรมอย่างแน่นอน

หวังว่าจะช่วย


1

หากคุณต้องการตัวอย่างของรูปแบบที่ได้รับการออกแบบและสร้างขึ้นมา (อาจถูก overengineered) เนื่องจากมีขนาดเล็ก (บีบอัดได้) ปลอดภัยและยืดหยุ่นอย่างน่าขันคุณควรมองไปที่รูปแบบ MPQ ของ Blizzard

http://wiki.devklog.net/index.php?title=The_MoPaQ_Archive_Format

โครงร่างเก็บถาวรทั่วไปมีดังนี้:

ไฟล์ส่วนหัวของข้อมูลที่เก็บถาวรไฟล์ข้อมูล - ไฟล์พิเศษตารางแฮชบล็อกตารางตารางบล็อกขยายตารางลายเซ็นดิจิตอลที่แข็งแกร่ง

รูปแบบนี้มีทุกอย่าง Blocktable, ขยาย blocktable ข้อมูลแบ่งออกเป็นภาค (สำหรับสตรีมมิ่งง่าย) สนับสนุนอัลกอริทึมการบีบอัด 7 (!) (ถ้าคุณนับการบีบอัดเสียง) ที่สามารถรวมกันโดยพลการลายเซ็นดิจิตอลอ่อนแอลายเซ็นดิจิตอลที่แข็งแกร่งและอื่น ๆ

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


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

หากมีความปลอดภัยสูงทำไมมันถึงได้รับการออกแบบวิศวกรรมในระดับดังกล่าวและยังมีห้องสมุดบุคคลที่สามให้โต้ตอบกับมัน ;-)
coderanger

เครื่องมือส่วนใหญ่ (อ่าน: ทั้งหมด) สำหรับการโต้ตอบกับไฟล์ * .mpq ขึ้นอยู่กับ Stormlib ซึ่งเขียนและดูแลโดยชายคนหนึ่ง

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

และที่จริงแล้วกับ 'World of Warcraft' นั้น Blizzard เป็นผู้บุกเบิกเทคโนโลยีสตรีมมิ่งที่ช่วยให้คุณเล่นเกมโดยมีเพียงไม่กี่เปอร์เซ็นต์ของข้อมูลทั้งหมดที่ดาวน์โหลดลงในฮาร์ดไดรฟ์ของคุณ รูปแบบ * .mpq เก่งในงานประเภทนี้ ไม่ต้องพูดถึงว่าเมื่อ Blizzard ผู้ติดตั้งสตาร์คราฟต์ 2 ได้เปิดตัวก่อนหน้านี้หลายวันก่อนที่เกมจะวางจำหน่ายอย่างเป็นทางการเอกสารสำคัญของมันถูกเข้ารหัสอย่างหนักจนพวกเขาไม่สามารถเปิดได้จนกว่าจะมีการเปิดตัวเกม : P

0

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

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

ขออภัยลืมพูดถึง lib ที่ดีสำหรับการเข้ารหัส (ใน C ++) เป็นLibTomCrypt

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