2013-04-05 8 views
5

क्या कमांड लाइन से बाइनरी फ़ाइल को संपादित करने के लिए विंडोज़ में कोई तरीका है? यानी एक तरीका है जिसे बैच फ़ाइल में लिखा जा सकता है?क्या विंडोज कमांड लाइन का उपयोग कर बाइनरी फाइल को संपादित करना संभव है?

मैं एक मौजूदा फ़ाइल में एक ज्ञात स्थिति पर, एक बाइट संपादित करने में सक्षम होना चाहता हूं।

यह मौजूदा प्रश्न [1] हल हो गया है, लेकिन यह एक लिनक्स समाधान है। मैं विंडोज के लिए कुछ इसी तरह की तलाश में हूं।

पृष्ठभूमि

वहाँ GTA 1 में एक बग जब भाप से डाउनलोड किया जिससे बचाने के खेल डेटा फ़ाइल बाहर निकलने पर दूषित हो जाता है है। नतीजतन, खेल पहली बार ठीक खेला जा सकता है लेकिन बाद में दुर्घटनाग्रस्त हो सकता है। यह पता चला है कि यह फ़ाइल में 5 वें बाइट को बदलकर तय किया जा सकता है (यानी पता 0x04 पर बाइट) x00 से x06 [2] तक।

मैं आसानी से अजगर में ऐसा कर सकते हैं, जैसे:

with open("PLAYER_A.DAT", "rb") as f: 
    bytes = f.read() 
bytes = bytes[:4] + '\x06' + bytes[5:] 
with open("PLAYER_A.DAT", "wb") as g: 
    for b in bytes: g.write(b) 

आदर्श रूप में, हालांकि मैं नहीं बल्कि जो निम्न करता है एक बैच कार्य में ऐसा चाहते हैं:

  • फिक्स डेटा फ़ाइल
  • जीटीए

मैं कुछ ऐसा कर सकता हूं जो मेरे लिए काम करता है (पायथन का उपयोग करके), लेकिन वह नहीं होगा यादृच्छिक अन्य लोगों की सहायता करें जिनके पास पायथन नहीं है (हाँ मुझे पता है कि & इंस्टॉल करना आसान है, लेकिन फिर भी)। इसी प्रकार, एक फ्रीवेयर उपलब्ध है जो ऐसा करने का दावा करता है, लेकिन मैं अपने पीसी पर एक यादृच्छिक .exe नहीं चलाना चाहता, और मुझे नहीं लगता कि किसी और को भी चाहिए। इसी कारण से, मैं एक बैच फ़ाइल प्रस्तुत करना चाहता हूं, कि लोग निरीक्षण कर सकें, और - यदि वे इसके साथ खुश हैं - स्वयं के लिए दौड़ें।

आपकी मदद के लिए धन्यवाद!

[1] CLI: Write byte at address (hexedit/modify binary from the command line)

[2] http://forums.steampowered.com/forums/showthread.php?t=1597746

[संपादित करें] अजगर स्क्रिप्ट अप फिक्स्ड, के रूप में मैंने पाया यह रूप में है काम नहीं किया (file.read() अपरिवर्तनीय ऑब्जेक्ट , इसलिए आप केवल मानों में से एक को अपडेट नहीं कर सकते हैं)।

उत्तर

1

मूल फ़ाइल को तीन में विभाजित करने के बारे में क्या, फिर बीच में अपने विकल्प बाइट के साथ विलय करना? द्विआधारी को तीन टुकड़ों में विभाजित करें (प्रारंभ करें -> लक्ष्य -1/लक्ष्य/लक्ष्य + 1 -> अंत) फिर मध्य में अपने नए बाइट के साथ शुरुआत और अंत भाग को मर्ज करने के लिए COPY का उपयोग करें।

मैं फ़ाइल को मूल रूप से विभाजित करने के लिए कभी भी डॉस (या कोई भी विंडोज कमांड प्रॉम्प्ट) प्राप्त करने में सक्षम नहीं हूं, लेकिन मुफ्त SPLITS.EXE उपयोगिता बहुत अच्छी है और इसे आपके समाधान में शामिल किया जा सकता है। कॉपी निश्चित रूप से एक मूल आदेश है।

मैं अभी है कि उपयोगिता के लिए एक लिंक नहीं मिल सकता है, लेकिन 'मुक्त डॉस फ़ाइल विभाजन उपयोगिता' पैदावार कई हिट के लिए googling ...

+0

लेकिन जो पुष्टि करता है कि * SPLITS.EXE * संशोधित नहीं है? यह एक यादृच्छिक .exe भी हो सकता है। – ComFreek

+0

जैसा कि कॉमफ्रीक कहते हैं, अगर मैं एक यादृच्छिक exe चलाने में खुश था, तो मैं केवल GTALauncher.exe का उपयोग करता हूं जो फ़ाइल को ठीक करता है और जीटीए लॉन्च करता है :-) – sam

+0

ठीक है, यह देखते हुए कि डॉस में ऐसा करने का कोई तरीका नहीं है (कम से कम, नहीं जिस तरह से मैंने कभी खोजा है) आपको स्क्रिप्ट के साथ एक सहायक उपयोगिता भेजनी होगी - या सिर्फ समाधान को .exe के रूप में पैकेज करें और उसे शिप करें। मुझे लगता है कि अंतर यह है कि यदि आप किसी स्क्रिप्ट के साथ एक स्वतंत्र रूप से उपलब्ध तृतीय-पक्ष उपयोगिता भेजते हैं, तो इसकी तुलना अन्य स्रोतों (उम्मीदपूर्वक सम्मानित लोगों) से समान उपयोगिता के विरुद्ध की जा सकती है जबकि एक कस्टम .exe पैकेज नहीं हो सकता है। –

9

मुझे लगता है कि PowerShell इस कार्य के लिए एक आदर्श उपकरण है।यह XP या उच्चतर के लिए उपलब्ध है और स्वचालित रूप से विंडोज 7 के बाद से भेज दिया जाता है:

बस इस सामग्री के साथ एक *.ps फ़ाइल बनाने:

$bytes = [System.IO.File]::ReadAllBytes("PLAYER_A.DAT"); 
$bytes[4] = 0x06; 

[System.IO.File]::WriteAllBytes("PLAYER_A.DAT", $bytes); 
& "C:\Path-To-GTA1-Exe-File.exe" 

नोट एक अहस्ताक्षरित PowerShell स्क्रिप्ट सक्षम करने के लिए है कि:

  1. व्यवस्थापक के रूप में PowerShell प्रारंभ करें

  2. इस आदेश को चलाएं: Set-ExecutionPolicy RemoteSigned


तुम भी VBScript इस्तेमाल कर सकते हैं लेकिन स्क्रिप्ट कुछ हद तक लंबे समय तक किया जाएगा, क्योंकि यह बाइनरी फ़ाइलें पढ़ने के लिए नहीं बनाया गया था (आप ADODB.Stream वस्तुओं का उपयोग करना पड़)।

यहाँ सहायक कार्यों का एक संकलन है: http://www.motobit.com/tips/detpg_read-write-binary-files/

+0

धन्यवाद, मैंने पहले PowerShell का उपयोग करने की कोशिश नहीं की है। मैंने अभी इस उदाहरण को चलाने की कोशिश की है और यह काम नहीं कर रहा है - मुझे पावरहेल विंडो पॉप अप (और फोकस चोरी) मिली है और फिर बार-बार गायब हो रही है - कई मिनटों के लिए। यह फ़ाइल को बदलने में नतीजा नहीं था। जब मैं सीधे PowerShell चलाता हूं और आदेशों में टाइप करता हूं तो आपने सुझाव दिया कि यह ठीक काम करता है। कोई विचार क्या चल रहा है? मैंने अभी तक हस्ताक्षरित स्क्रिप्ट को सक्षम करने की कोशिश नहीं की है - लेकिन मैं तब तक कोशिश करने के लिए उत्सुक नहीं हूं जब तक कि मुझे पता न हो कि समस्या क्या थी, क्योंकि मेरा पीसी तब तक अनुपयोगी था जब तक स्क्रिप्ट चलने का फैसला नहीं कर लेती थी। – sam

+0

[अद्यतन] निष्पादन नीति सेट करने के बाद भी मेरे पास एक ही समस्या है। मैं इसे देखता हूं अगर मैं cmd ​​से या powerhell से चलाता हूं। – sam

+0

@sam आप किस विंडोज संस्करण का उपयोग कर रहे हैं? क्या आप नवीनतम अपडेट का उपयोग करते हैं? मुझे उस अजीब व्यवहार के लिए खेद है। यहां एक नया संस्करण है जो प्रत्येक कमांड को निष्पादित करने से पहले कुंजी प्रेस की प्रतीक्षा करता है: http://pastebin.com/5hjHbkBt। एक्सप्लोरर में * राइट-क्लिक -> पावरशेल * के साथ चलाएं * के माध्यम से स्क्रिप्ट को निष्पादित करने का भी प्रयास करें। – ComFreek

संबंधित मुद्दे