2 पॉइंट द्वारा GN⁺ 2024-11-08 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Dreamcast के लिए Ecco the Dolphin: Defender of the Future में save file initials input से चालू होने वाले cheats छिपे थे, और मौजूदा GYUGYU+XXX के अलावा कई special inputs की पुष्टि हुई
  • Analysis में flycast memory snapshot को Ghidra में load करके input buffer और processing function खोजे गए, और उस structure को trace किया गया जिसमें conversion result की तुलना 6 special values से होती है
  • Cheat detection input string खुद पर नहीं, बल्कि passphrase से decrypt की गई key और checksum calculation से निकले value पर आधारित है, इसलिए सिर्फ string पढ़कर इसे ढूंढना मुश्किल है
  • Python brute force से 1–8 character inputs जांचकर पुष्टि हुई कि SOCCER, EXBBERX, QQRIQ, XYZZYX, POPELY आदि bonus stage, immortality mode, FPS display, time display से जुड़े हैं
  • समान effect देने वाला input fixed नहीं है; NNSET, SOCCER, ADEMVSSF सभी bonus soccer game खोलते हैं और AFTJSXOT भी GYUGYU की तरह सभी stages unlock करता है

save file name से चालू होने वाले छिपे cheats

  • Ecco the Dolphin: Defender of the Future आधिकारिक रूप से release हुआ आखिरी Ecco game है, और इसका sequel cancel कर दिया गया था
  • पहले से ज्ञात cheat VMU screen पर New Game चुनकर initials में GYU input करने, फिर End दबाए बिना फिर से GYU और कोई भी तीन letters input करने का तरीका था
    • GYU GYU XXX format में input करने के बाद menu से बाहर निकलने पर Load game में सभी stages select किए जा सकते हैं
  • confirmed special inputs और effects इस प्रकार हैं
    • GYUGYU+XXX: सभी levels unlock
    • SOCCER+XXX: bonus stage unlock
    • EXBBERX+XXX: immortality mode
    • QQRIQ+XXX: FPS display
    • XYZZYX+XXX: time display
    • POPELY+XXX: effect unknown

Ghidra से input processing routine trace करना

  • flycast emulator के memory snapshot में पुष्टि हुई कि screen पर दिख रहे initials का एक हिस्सा 8cfffb34 buffer में store होता है
  • input जारी रखने पर पहले डाले गए characters 8c3abf18 buffer में shift हो जाते हैं, और यही area cheat detection में use होता है
  • snapshot को Ghidra में load करने के बाद पाया गया कि 8c0334d8 location का function उस buffer को read करता है
  • यह function buffer को convert करता है और check करता है कि result 6 special values की list में से किसी एक से match होता है या नहीं
    • GYU GYU XXX 9388D627 में convert होता है, और list की पहली special value से match करता है

conversion method और checksum structure

  • Ghidra decompile से confirmed conversion function का flow इस प्रकार है
    • passphrase read करता है
    • passphrase से 1024-byte key decrypt करता है
    • key का उपयोग करके input buffer का checksum calculate करता है
    • key को फिर से encrypt करता है
  • checksum one-way function है, इसलिए special value बनाने वाले input को आंखों से तुरंत reverse-calculate करना मुश्किल है
  • बाद के update में metalliczx और SideQuark ने confirm किया कि decrypt होने के बाद structure standard CRC32 checksum polynomial है
    • इसलिए brute force की तुलना में target values पाने का अधिक efficient तरीका मौजूद है

Python brute force से मिले input values

  • GYUGYU 6 letters का है, और possible 6-letter combinations 26^6 = 308,915,776 हैं
  • 7 letters में combinations 8 billion तक और 8 letters में 208 billion तक बढ़ जाते हैं, जो laptop के लिए भारी scale हो जाता है
  • Python implementation input को निम्न process से check करता है
    • uninitialized input buffer, passphrase और key वाले memory blocks को copy करता है
    • passphrase से key decrypt करता है
    • 1–8 letter sequences को input buffer में डालता है
    • हर input का checksum calculate करता है
    • calculation result को target value से compare करता है
  • पूरा code gist पर public है
  • single-threaded version से ही जरूरी results output हो गए, और parallel version लिखते समय results पहले ही आ गए

मिली mappings और actual effects

  • output result का last column बताता है कि कौन-सी special value से match हुआ
    • NNSET, SOCCER, ADEMVSSF सभी same value से match होते हैं और bonus soccer game unlock करते हैं
    • AFTJSXOT GYUGYU की तरह सभी stages unlock करता है
  • initials के रूप में SOCCER+XXX input करने पर Bonus Game खुलता है और underwater soccer खेला जा सकता है
    • 8c3ac00c के flag में 0x2 bit set करता है
  • EXBBERX+XXX Options screen पर Immortality Enabled दिखाता है
    • applied होने पर drowning या death नहीं होती
    • 8c3abe48 flag का 0x400 bit और 8c3abb00 flag का 0x4 bit set करता है
  • QQRIQ+XXX game का framerate और कुछ debugging values दिखाता है
  • XYZZYX+XXX current clock value दिखाता है
    • दोनों inputs 8c35659c और 8c3565a4 addresses की values बदलते हैं
  • POPELY+XXX का effect confirmed नहीं है
    • अनुमान है कि यह 8c3b0e44 के flag को activate करने के लिए था, लेकिन यह flag सिर्फ Cheats Enabled message दिखाता है और कोई अन्य effect नहीं दिखता

1 टिप्पणियां

 
GN⁺ 2024-11-08
Hacker News की रायें
  • hash बस CRC32 है, और सटीक तौर पर यह polynomial (0x77073096, code गलत है) इस्तेमाल करता है

    https://web.mit.edu/freebsd/head/sys/libkern/crc32.c

    लेख में decrypt किए गए integers इसी CRC32 के constants हैं। अगर यह पता हो कि यह CRC32 है और polynomial मालूम हो, तो polynomial ring की modular math का इस्तेमाल करके जवाब को exponential time के बजाय log time में reverse-calculate किया जा सकता है

    • सुना है Binwalk CRC polynomial tables पहचानता है; सोच रहा हूं कि क्या यह table भी खोज पाएगा

      किसी को Binwalk और Ghidra को integrate करना चाहिए। दोनों बहुत अच्छी तरह साथ फिट बैठते हैं

    • यह पता लगाने के लिए कोई tips हैं कि value CRC32 result है, या इस्तेमाल किया गया polynomial/initial value क्या है?

  • जब original Ecco Megadrive(Genesis) पर आया था, मैंने अपनी बड़ी मुश्किल से जोड़ी सारी savings खर्च करके इसे खरीदा था। वह game बेहिसाब मुश्किल था, और गुस्से में मैं पूरी दोपहर pen और paper लेकर बैठा रहा और किसी तरह password system decode कर लिया

    final level पर teleport करके अगले दिन clear कर दिया, लेकिन फिर guilt होता रहा कि मैंने अपनी सारी पूंजी एक ऐसे game पर खर्च कर दी जिसे दो दिन में खत्म कर दिया

    • pen और paper से password system decode किया—अगर कुछ याद हो तो और सुनना चाहूंगा

    • दार्शनिक रूप से देखें तो मुझे नहीं लगता कि आपने वह game clear किया था

      आपने कई levels skip किए, और intended content, gameplay और कहानी का सिर्फ एक हिस्सा देखा। Ecco the Dolphin समेत games में आम तौर पर destination से ज्यादा journey मायने रखती है। आपने isolation, out-group से दोस्ती करना, conservation, time travel, dinosaurs के साथ संवाद, और जाहिर है space travel जैसे themes और experiences मिस कर दिए

      इसलिए आपको इतना guilty महसूस करने की जरूरत नहीं थी

    • फिर भी final level कमाल का था। game का बड़ा हिस्सा skip करके उसे देखकर आप हैरान हुए थे या नहीं, यह जानने की जिज्ञासा है

    • cheat इस्तेमाल किया हो या नहीं, शायद आप दुनिया के इकलौते इंसान हों जिसने यह game खत्म किया हो

  • QQRIQ “kukuriku” का phonetic abbreviation है, और Hungarian व कई भाषाओं में मुर्गे की बांग का अर्थ देता है। Polish “kukuryku”, Hebrew “קוקוריקו” जैसे उदाहरण हैं

    passwords चुनने की प्रक्रिया कैसी रही होगी, यह सोचने पर मजबूर करता है

    • Gyugyu भी Hungarian फिल्म “The Fifth Seal” का reference हो सकता है

      “कल्पना करें कि आप मौत के सामने हैं और दो लोगों में से किसी एक के रूप में पुनर्जन्म लेना है। एक slave है और दूसरा wealthy master। slave को master से यातना मिलती है, उसकी जीभ और एक आंख चली जाती है, और उसकी पत्नी व बच्चे भी मार दिए जाते हैं। वह खुद को अच्छा इंसान मानते हुए जीता रहता है, क्योंकि उसने master जैसी भयानक और sadistic चीजें दूसरों के साथ कभी नहीं कीं। wealthy master को कोई moral hesitation नहीं है। उसे नहीं लगता कि उसने जो किया वह गलत था, और वह मानता है कि slave को सजा मिलनी ही चाहिए थी। आपको चुनना है कि गरीब लेकिन righteous slave बनेंगे, या अमीर लेकिन corrupt master।”

      Gyugyu उस slave का नाम है

      https://www.imdb.com/title/tt0075467

    • इस game के programmers Budapest में थे, इसलिए यह काफी plausible अनुमान है

    • Hungarian में “ly” वाला Popely भी एक clue था

    • French में यह Cocorico है, तो बहुत मिलता-जुलता है

    • Zelda के Kakariko village की भी याद आती है, जहां मुर्गियां हमेशा होती हैं

  • एक दिलचस्प side note के तौर पर, Ecco developer Ed Annunziata से जब inspiration के बारे में पूछा गया, तो उन्होंने कहा, “मैंने LSD नहीं लिया, लेकिन John C. Lilly को बहुत पढ़ा।” Lilly animal intelligence, ketamine psychotherapy, sensory deprivation tanks, और consciousness exploration में अपने pioneering काम के लिए जाने जाते हैं

    “Ecco” नाम Lilly के ECCO(Earth Coincidence Control Office) का reference है। John ने माना था कि पृथ्वी पर सभी “coincidences” को coordinate करने के लिए चांद के far side पर कोई supernatural/alien base मौजूद है। वह शुरुआती लोगों में से थे जिन्होंने समझा कि dolphins कितने intelligent हैं, और dolphins से communicate करने का तरीका खोजने के obsession में उन्होंने Caribbean में अपने घर का आधा हिस्सा पानी में डुबो दिया और उनके साथ रहने तक लगे। यह तो सिर्फ iceberg का tip है; अगर दिलचस्पी हो तो उनकी autobiography The Center of the Cyclone strongly recommend करूंगा। वाकई बेहद fascinating व्यक्ति हैं

  • Dreamcast games की reverse engineering शुरू करने के लिए कोई resources हैं? Skies of Arcadia के साथ कुछ चीजें try करना चाहता हूं, लेकिन “memory snapshots के बीच कौन-सी value बदलती है देखना” से ज्यादा systematic techniques हों तो अच्छा होगा

    • RAM में value की location खोजने के लिए वह तरीका लगभग standard technique ही है। असल में यह काफी अच्छी तरह काम करता है

      Dolphin जैसे कुछ emulators में ऐसे tools built-in होते हैं। N64 के लिए Gameshark जैसे पुराने game hacking tools भी console UI के जरिए वही technique इस्तेमाल करते थे। Dreamcast emulator में ऐसा tool है या नहीं, पता नहीं

      मैंने Dolphin में इस technique का इस्तेमाल करते हुए एक लेख लिखा था, और follow-up लेख भी Ghidra का इस्तेमाल करके console game hacking पर है: https://www.smokingonabike.com/2021/01/17/hacking-super-monk...

    • मैंने उस game को थोड़ा देखा था। मुख्य trick है memory snapshot को file में dump करना और फिर उसे Ghidra में import करना। dump करने के कई तरीके हैं, और कई लोग Cheat Engine पसंद करते हैं

      Ghidra SuperH processor machine code को natively analyze कर सकता है, इसलिए सिर्फ automatic analysis चलाने से ही काफी functions सामने आ जाते हैं

  • पिछले कुछ सालों में पुराने games की तरफ मेरा आकर्षण काफी बढ़ गया है, और पता नहीं यह expression सही है या नहीं, लेकिन वे कहीं ज्यादा soulful लगते हैं

    और car वाली बात अफसोसनाक है। warning के लिए धन्यवाद; आगे से driveway में खड़ी करके idle नहीं छोड़ूंगा

    • पक्का आपको required network connection और microtransactions जैसे modern features की कमी नहीं खलती?
    • car के साथ क्या हुआ, समझ नहीं आया। article या comments में नहीं देखा
  • मैं हमेशा सोचता रहा हूं कि reverse engineering सीखना कहां से शुरू करें। ज्यादातर लोग पहले assembly सीखने को कहते हैं, लेकिन उसके बाद online ज्यादा concrete जानकारी नहीं दिखती

    शायद x86, arm, arcade platforms के common patterns को trial and error से धीरे-धीरे सीखने जैसा है। details पर चर्चा online ढूंढना मुश्किल है

    • यह debugging जैसा ही है। कभी न कभी आपको कोई unfamiliar codebase लेकर उसे समझना पड़ा होगा; बस फर्क इतना है कि source की जगह binary है

Ghidra जैसे टूल इस्तेमाल करने पर स्रोत को थोड़ा-थोड़ा मिलाया जा सकता है, लेकिन आखिरकार अनुमान उसी तरह लगाना पड़ता है जैसे किसी अनजान codebase को समझते समय लगाते हैं। इस बार फर्क यह है कि कोई comments बिल्कुल नहीं हैं, लेकिन source公開 projects में भी comments न होने के मामले काफ़ी आम हैं

आप पहले ही लगभग आधे रास्ते तक आ चुके होते हैं, और assembly code से परिचित होना जाहिर तौर पर मदद करता है
  • ज़्यादा वास्तविक उदाहरणों के लिए http://microcorruption.com या https://crackmes.one/ हल करके देखना अच्छा रहेगा

  • व्यक्तिगत रूप से मैंने Cheat Engine से छेड़छाड़ करते हुए बहुत कुछ सीखा। बचपन में इसे ज़्यादा इस्तेमाल किया था और फिर दोबारा नहीं देखा, इसलिए पता नहीं था, लेकिन यह मेरी उम्मीद से कहीं ज़्यादा शक्तिशाली टूल था

    इसका disassembler काफ़ी अच्छा है, और इसमें आप जिसे “assembly scripts” कहा जाता है, लिख सकते हैं, इसलिए x86 assembly से memory patching की बुनियाद सीखने के लिए यह अच्छा है। वहाँ से आप अपनी पसंद के अनुसार गेम patch करने वाली अपनी utility बनाना शुरू कर सकते हैं

    सिर्फ Cheat Engine से भी गेम patch करके पागलपन-स्तर की cheats बनाई जा सकती हैं

  • स्कूल में थोड़ा सीखा था, लेकिन बचपन में याद रहने वाले video games को debugger में step by step चलाकर देखने ने मुझे classes में सीखी चीज़ों से कहीं बेहतर computer science सिखाई

  • underwater soccer cheat को सच में चलते हुए देखने वाला video देखना चाहता हूँ

  • यह दिलचस्प है कि इसी तरह के games fixed integer से checksum मिलाते हैं। Pitfall: The Lost Expedition ने भी बहुत मिलता-जुलता तरीका अपनाया था: button input को input buttons की ASCII string में बदलकर CRC calculate किया था

    approach भी Python से लगभग brute force करके निकाले गए cheat hashes से compare करने वाली थी। decrypted_ints के अंदर छिपी CRC32 table भी दिखती है। पहले से generated tables बहुत आसानी से search हो जाती हैं। अपनी polynomial से नई table generate करने के बजाय, इन्हें कठिन बनाने के लिए obfuscated रूप में बार-बार क्यों पाया जाता है, यह सोचने पर मजबूर करता है

  • Sega Saturn पर केंद्रित blog—यह तो हैरान करने वाला है

    कुछ समय पहले माता-पिता के घर की अलमारी में Saturn और छोटी-सी game CD bundle मिली। मुझे याद नहीं कि मेरे पास कभी यह था, इसलिए अंदाज़ा है कि मेरे college जाने के बाद मेरे भाई/बहन ने लिया होगा। खैर, connect करके देखा तो सभी games ठीक चले। लेकिन इसके अलावा समझ नहीं आ रहा कि इसके साथ क्या करूँ। ज़ाहिर है, फेंकना कोई option नहीं है

    • games की काफी ज़्यादा कीमत है। 2005 में मैंने अपना वाला बस दे दिया था, और अब eBay पर कीमतें देखता हूँ तो दिल धड़कने लगता है

    • मज़े से खेलिए

      https://terraonion.com/en/producto/terraonion-mode/