- 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 में
GYUinput करने, फिर End दबाए बिना फिर सेGYUऔर कोई भी तीन letters input करने का तरीका थाGYU GYU XXXformat में input करने के बाद menu से बाहर निकलने पर Load game में सभी stages select किए जा सकते हैं
- confirmed special inputs और effects इस प्रकार हैं
GYUGYU+XXX: सभी levels unlockSOCCER+XXX: bonus stage unlockEXBBERX+XXX: immortality modeQQRIQ+XXX: FPS displayXYZZYX+XXX: time displayPOPELY+XXX: effect unknown
Ghidra से input processing routine trace करना
- flycast emulator के memory snapshot में पुष्टि हुई कि screen पर दिख रहे initials का एक हिस्सा
8cfffb34buffer में store होता है - input जारी रखने पर पहले डाले गए characters
8c3abf18buffer में shift हो जाते हैं, और यही area cheat detection में use होता है - snapshot को Ghidra में load करने के बाद पाया गया कि
8c0334d8location का function उस buffer को read करता है - यह function buffer को convert करता है और check करता है कि result 6 special values की list में से किसी एक से match होता है या नहीं
GYU GYU XXX9388D627में 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
GYUGYU6 letters का है, और possible 6-letter combinations26^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 करते हैंAFTJSXOTGYUGYUकी तरह सभी stages unlock करता है
- initials के रूप में
SOCCER+XXXinput करने पर Bonus Game खुलता है और underwater soccer खेला जा सकता है8c3ac00cके flag में0x2bit set करता है
EXBBERX+XXXOptions screen पर Immortality Enabled दिखाता है- applied होने पर drowning या death नहीं होती
8c3abe48flag का0x400bit और8c3abb00flag का0x4bit set करता है
QQRIQ+XXXgame का framerate और कुछ debugging values दिखाता हैXYZZYX+XXXcurrent clock value दिखाता है- दोनों inputs
8c35659cऔर8c3565a4addresses की values बदलते हैं
- दोनों inputs
POPELY+XXXका effect confirmed नहीं है- अनुमान है कि यह
8c3b0e44के flag को activate करने के लिए था, लेकिन यह flag सिर्फ Cheats Enabled message दिखाता है और कोई अन्य effect नहीं दिखता
- अनुमान है कि यह
1 टिप्पणियां
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 नहीं छोड़ूंगा
मैं हमेशा सोचता रहा हूं कि reverse engineering सीखना कहां से शुरू करें। ज्यादातर लोग पहले assembly सीखने को कहते हैं, लेकिन उसके बाद online ज्यादा concrete जानकारी नहीं दिखती
शायद x86, arm, arcade platforms के common patterns को trial and error से धीरे-धीरे सीखने जैसा है। details पर चर्चा online ढूंढना मुश्किल है
Ghidra जैसे टूल इस्तेमाल करने पर स्रोत को थोड़ा-थोड़ा मिलाया जा सकता है, लेकिन आखिरकार अनुमान उसी तरह लगाना पड़ता है जैसे किसी अनजान codebase को समझते समय लगाते हैं। इस बार फर्क यह है कि कोई comments बिल्कुल नहीं हैं, लेकिन source公開 projects में भी comments न होने के मामले काफ़ी आम हैं
ज़्यादा वास्तविक उदाहरणों के लिए 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/