- Black Ops Cold War का TAC(Treyarch Anti-Cheat) Ricochet kernel driver के बिना एक user-mode anti-cheat है, लेकिन इसकी code structure नए Call of Duty titles से काफी मिलती-जुलती है
- protection layer Arxan की executable encryption, checksum, jmp obfuscation, entrypoint obfuscation और Treyarch/IW series pointer encryption को साथ में इस्तेमाल करती है
- TAC runtime API hash lookup, API hook pattern inspection, debug register check, Windows test signing detection, console allocation detection, DirectX/overlay detection जैसी कई user-mode detections करता है
- external overlays window style, position, display affinity और process module list इकट्ठा करके server पर upload करते हैं, और Cheat Engine जैसे memory scanners को virtual memory honeypot से detect किया जा सकता है
- सबसे अनोखी तकनीक encrypted custom syscall stub है, जो ntdll hooks को bypass करती है और syscall source को किसी दूसरी ntdll function जैसा दिखाकर monitoring को कठिन बनाती है
विश्लेषण का लक्ष्य और दायरा
- विश्लेषण का लक्ष्य Black Ops Cold War के अंदर का user-mode anti-cheat है, और इसके लिए TAC(Treyarch Anti-Cheat) नाम इस्तेमाल किया गया है
- Black Ops Cold War में Modern Warfare 2019 और बाद के titles में मौजूद Ricochet का kernel-mode component नहीं है
- नए Call of Duty से बड़ा अंतर kernel-mode driver है; anti-cheat code का अधिकांश हिस्सा user mode में है और TAC से बहुत मिलता-जुलता है
- function pseudocode असली decompile result के obfuscation और resolver code के कारण जटिल होने से reconstructed रूप में है
- cheating या bypass के promotion से बचने के लिए कुछ सामग्री हटाई गई है
Arxan और executable protection
- Arxan Black Ops 3 के बाद कई Call of Duty games में इस्तेमाल होने वाला obfuscation और protection tool है
- runtime executable decryption
- game executable packed और encrypted होता है
- Arxan startup process में code inject करके असली game executable को unpack और decrypt करता है
- executable checksum
- Arxan game executable patching को लगातार monitor करता है
- debugger या checksum mismatch detect होने पर process terminate कर देता है
- jmp obfuscation
- function instructions के बीच कई
jmpinsert करके static analysis को कठिन बनाया जाता है - बड़े function में सैकड़ों jumps insert होने पर IDA analysis टूट जाता है और external tools की जरूरत पड़ती है
- function instructions के बीच कई
- entrypoint obfuscation
- protected Arxan code असली entrypoint को unpack करके execute करता है
- इस हिस्से में भी jmp obfuscation हो सकता है, जिससे flow tracking कठिन हो जाती है
pointer encryption
- महत्वपूर्ण pointers को इस्तेमाल से ठीक पहले encrypt/decrypt किया जाता है
- current game global object
- entity array
- object pointers आदि
- इसी encryption method के 16 variants हैं, और current PEB address तय करता है कि कौन-सा method इस्तेमाल होगा
- यह तरीका Cheat Engine के pointer scan में बाधा डालता है
- global values में केवल encrypted values stored रहती हैं
- decrypted value केवल stack पर मौजूद होती है
- decrypted pointer हासिल करने के लिए decryption instructions track करने वाला tool इस्तेमाल करना होगा, या उस point पर hook लगाना होगा जहाँ game पहले से decrypt कर चुका है
runtime API lookup और hook detection
- TAC inline की गई runtime API lookup function इस्तेमाल करता है
- module hash और API name hash लेता है
- loaded module list में iterate करके names को hash करता है
- module की export functions में iterate करके compile-time hash से compare करता है
- hash identification game process की loaded module list और game की hashing function का इस्तेमाल करके की जाती है
- module name और export name के hash calculate किए जाते हैं
- decompile result से base hash और function hash manually लेकर match किया जाता है कि कौन-सी API call हो रही है
- hashes हर game version में समान नहीं होते
- function pointer global variable में stored होने के कारण, virtual address को loaded DLL की export function से compare करके भी identify किया जा सकता है
- TAC की API hook detection फिलहाल केवल 7 patterns check करती है
push/movabs/xchg/retseries stubspush immके बादretcalljmp [rip+x]
- सभी महत्वपूर्ण APIs check नहीं की जातीं; वह अपने द्वारा इस्तेमाल की जाने वाली APIs पर hooks check करता है
debug registers और driver test signing detection
- debug registers को Arxan की
.textpatch monitoring को bypass करने वाली non-code patch hook method के रूप में इस्तेमाल किया जा सकता है - TAC thread context में DR0~DR3 values check करता है
- value होने पर current process के अंदर है या नहीं, इसके आधार पर अलग message के साथ callback call करता है
- इसके बाद flow termination function की ओर जाता है
- DR0~DR3 privileged registers हैं, इसलिए इन्हें normal assembly से सीधे read नहीं किया जा सकता; Windows kernel या exception delivery के जरिए लेना पड़ता है
- Windows test mode बिना proper signing वाले kernel-mode drivers को चलाने की अनुमति देता है
- TAC
NtQuerySystemInformationसे check करता है कि test signing enabled है या नहीं- सिर्फ इस detection से direct ban नहीं होता, लेकिन account flag किया जाता है
process termination method
- TAC process terminate करने के लिए दो methods इस्तेमाल करता है
- पहला method registers clear करने के बाद
NtTerminateProcesscall करता हैRCXको-1पर set करता है- अगर
NtTerminateProcesshooked detect होता है, तो यह method इस्तेमाल नहीं करता
- दूसरा method registers clear करने के बाद
0x0पर jump करके process crash कर देता है - दोनों methods important registers clear करते हैं, इसलिए recovery कठिन होती है
console, visualization और overlay detection
- internal cheats log output या menu implementation के लिए
AllocConsoleइस्तेमाल कर सकते हैं - TAC console window या PEB के
ConsoleHandleको check करके console allocation detect करता है - internal visualization आमतौर पर graphics API hook से screen पर draw की जाती है
- नए Call of Duty में DirectX 12 इस्तेमाल होता है
- common hook target
IDXGISwapChain::Presentहै - DirectX 12 में command queue चाहिए, और
ID3D12CommandQueue::ExecuteCommandListscommon acquisition point है
- OBS Studio, Streamlabs OBS, Discord game overlay, Steam game overlay भी समान locations पर operate कर सकते हैं
- Steam और Discord drawing करते हैं
- OBS series game capture इस्तेमाल होने पर rendered image capture करती है
- TAC अभी DXGI present function को खुद scan नहीं करता, बल्कि vtable के present pointer को check करता है
external cheats और window-based detection
- external cheats game window के ऊपर overlap करने वाली overlapped window बनाने की काफी संभावना रखते हैं
- TAC सभी windows में iterate करके
GetWindowLongAसे WS_EX_LAYERED style check करता है - इसके बाद
GetWindowRectसे compare करता है कि वह game window से overlap करता है या नहीं- overlap ratio
0.5या उससे ज्यादा हो और cache count 8 से कम हो, तो संबंधितhwndstore करता है - example screen size के तौर पर
1920x1080से जुड़ी values दिखाई देती हैं
- overlap ratio
- cached windows की अलग function में अतिरिक्त जांच की जाती है
GetWindowTextWसे window text checkGetClassNameAसे class name checkGetWindowDisplayAffinityसे display affinity check
SetWindowDisplayAffinityऔरWDA_EXCLUDEFROMCAPTUREका इस्तेमाल करके recording/screenshot tools से hide करने के मामलों को भी TAC check करता है- window-related information encrypted buffer में stored होकर server पर upload होती है
- window text
- class name
- window position और style
- display affinity
- overlapped window process की module list और exe name
- overlapped window process को
OpenProcess(PROCESS_VM_READ | PROCESS_QUERY_INFORMATION)से open किया जाता है, औरK32EnumProcessModulesतथाK32GetModuleFileNameExWसे module names collect किए जाते हैं
Cheat Engine जैसे memory scanner detection
- Cheat Engine को Windows virtual memory behavior के कारण detect करना आसान है
- program
VirtualAllocसे virtual memory allocate करे तब भी, access से पहले वह physical memory से backed नहीं होती - game memory allocate करने के बाद उसे unused छोड़ सकता है
- अगर Cheat Engine या Process Hacker का memory tab उस region को scan करता है, तो access होता है और memory valid state में आ जाती है
- TAC-style honeypot
K32QueryWorkingSetExसे check करता है कि संबंधित virtual address वास्तव में access हुआ है या नहीं, और memory scanner detect करता है
signature scan में बाधा
- game hackers updates के बाद भी cheat अपने-आप operate करे, इसके लिए अक्सर signature scanning इस्तेमाल करते हैं
- Treyarch का idea है कि जिन functions को दोबारा call नहीं किया जाएगा, उनके return address के आसपास को PAGE_NOACCESS से protect किया जाए
- signature scanner executable bytes को शुरुआत से अंत तक read करते हुए pattern खोजता है
- हर byte पर access availability query करना बहुत slow होता है, इसलिए
PAGE_NOACCESSregion पर पहुंचने पर process crash हो सकता है - यह method complete blocking solution नहीं है, लेकिन कई analysts के लिए मुश्किल पैदा कर सकता है
anti-debugging
- TAC की अपनी anti-debug checks simple हैं, लेकिन Arxan भी अलग anti-debug techniques provide करता है
- TAC current process के सभी threads में iterate करता है
CreateToolhelp32Snapshotऔर thread snapshot इस्तेमाल करता है- हर thread के TEB में
DbgSsReservedcheck करके DebugObject की मौजूदगी detect करता है
- invalid memory में write करके access violation trigger करने की technique भी है
- अगर code exception के बाद वाली जगह तक पहुंच जाता है, तो माना जाता है कि debugger ने exception handle या bypass किया है
CheckRemoteDebuggerPresentभी इस्तेमाल होता हैThreadHideFromDebuggerexception को debugger के बजाय process को भेजता है- जब debugger process को stop करने की कोशिश करता है, तो
STATUS_BREAKPOINTexception हो सकता है और process terminate हो सकता है - user mode में इस flag को unset नहीं किया जा सकता
- यह tactic executable entrypoint से पहले TLS callback में execute होती है
- जब debugger process को stop करने की कोशिश करता है, तो
network traffic monitoring
- TAC सभी active connections store नहीं करता, केवल specific conditions खोजता है
- detection target वह तरीका है जिसमें game process के अंदर local network server बनाया जाता है
- cheater game process में shellcode लिखता है
- game process के अंदर network server start करता है
- external application इस local server से information exchange करती है
- TAC
GetTcpTable2से TCP table लाता है, और current process द्वारा बनाए गए connection तथा दूसरे process के port relationship की तुलना करके condition detect करता है
encrypted custom syscall stub
- ntdll के कई export APIs internally syscall perform करते हैं
- custom syscall stub इस्तेमाल करने पर user-mode cheat ntdll functions को hook करे, तब भी bypass हो सकता है
- syscall instrumentation callback में expose हो सकता है
- instrumentation callback syscall के बाद call होता है
- return address syscall instruction के ठीक बाद होता है
- TAC encrypted syscall stub से static analysis कठिन बनाता है
- stub
.textsection में allocated बड़े region को write/execute से protect करने के बाद बनाया जाता है NtReadFileमें syscall instruction खोजता है, और CPU time value को random factor के रूप में इस्तेमाल करके location बदलता है- monitor करने वाली side को syscall किसी arbitrary ntdll function से होता हुआ दिख सकता है
- असली syscall
NtReadFileनहीं भी हो सकता - अगर
eaxका syscall index check नहीं कर पाए, तो यह जानना कठिन है कि कौन-सा syscall है
- असली syscall
- re-execution पर syscall instruction location बदलने का example है
anti-debugger hiding bypass detection
ThreadHideFromDebuggerset करने के लिएNtSetInformationThreadcall होना चाहिए- cheater इस API को hook करके success return करा सकता है
- तब anti-cheat मानता है कि hide setting सफल रही, लेकिन असल में कुछ भी नहीं हुआ हो सकता है
- TAC खराब तरीके से बने hooks पकड़ने के लिए invalid arguments डालकर call result check करता है
- length argument गलत होने के कारण जिस call को fail होना चाहिए, अगर वह success हो जाए तो detect करता है
- debugger और ScyllaHide environment में अलग return values आने का example है
- fake handle डालकर
ThreadHideFromDebuggerrequest पर हमेशा success return करने वाला hook भी check करता है
remote thread creation blocking
- TAC
STATUS_PRIVILEGED_INSTRUCTIONexception में current thread परTerminateThreadcall करने वाला exception handler install करता है - manually mapped DLL को remote process में shellcode execute करने का तरीका चाहिए, और common method
CreateRemoteThreadहै - Windows PE का TLS callback thread create होने पर thread entrypoint से पहले call हो सकता है
- TAC new thread context में start address check करता है
NtQueryInformationThreadसे Win32 start address लाता है- loaded module list में iterate करके check करता है कि start address normal module range के अंदर है या नहीं
- अगर start address किसी भी loaded module range में नहीं है, तो detection store करता है और privileged instruction exception raise करके उस thread को terminate करता है
अन्य checks और निष्कर्ष
- unknown check के रूप में
NtQuerySystemInformationकीAllocationGranularity0x10000है या नहीं, यह check करने वाला code है- ऐसा लगता है कि यह virtual machine या custom Windows version को flag करता है
- TAC linked module list पर काफी depend करता है, इसलिए PEB की
InMemoryOrderModuleListempty list है या नहीं, यह check करता है- empty list बनाने पर process खुद टूटने की संभावना है
- अंततः TAC निम्न capabilities वाला user-mode anti-cheat है
- runtime API lookup
- खराब तरीके से बने hook detection
- external overlay detection
- internal DirectX hook detection
- used API hook check
- debugger और debugging traces check
AllocConsoledetectionCreateRemoteThreaddetection- spoofed/encrypted syscall stub
- Arxan strong obfuscation, static analysis obstruction, IDA Pro को तोड़ने वाली techniques,
.textmodification monitoring और अपनी anti-debug capabilities से TAC की मदद करता है - TAC जैसे code का इस्तेमाल modern Call of Duty games में भी होता है
1 टिप्पणियां
Hacker News की राय
2021 में Linux CS:GO अकाउंट पर trust factor की समस्या आई, जो पीले और फिर लाल स्तर पर गिर गया; यह आधिकारिक ban नहीं था, लेकिन व्यवहार में सज़ा जैसा ही काम कर रहा था
नतीजा यह हुआ कि लगातार cheaters के साथ match होता रहा और teammates ढूंढना मुश्किल हो गया
बाद में पता चला कि Radeon GPU और 16GB से ज्यादा VRAM इस्तेमाल करने वाले दूसरे Linux users को भी ऐसी ही समस्या हो रही थी, और समस्या track करने के लिए GitHub issue बनाया: https://github.com/ValveSoftware/csgo-osx-linux/issues/2630
जांच करने पर लगा कि Valve कुछ खास hardware configurations वाले Linux users, खासकर उस समय काफी नए 16GB+ VRAM Radeon cards वाले users, को penalize कर रहा था
आखिर में एक user ने सीधे gaben से संपर्क किया, जिसके बाद समस्या ठीक हुई: https://github.com/ValveSoftware/csgo-osx-linux/issues/2630#...
अनुमान है कि यह शायद Steam Deck launch की तैयारी कर रहे Valve द्वारा Linux user experience की परवाह करने का नतीजा था
फिर भी दिलचस्प है
क्या game quality खराब होने से अंदाज़ा लगाया गया, या इसे verify करने का कोई तरीका था
मेरी समझ में trust factor abuse रोकने के लिए छिपाया जाता है
Cheating आखिरकार लोगों की समस्या है
लेख में बताए गए safeguards और heuristics से खुलेआम cheating करने वालों में से 90% को पकड़ा जा सकता है, और ऐसा anti-cheat मूल रूप से सही दिशा में है
हालांकि anti-cheat को conservative तरीके से काम करना चाहिए, और अंतिम समाधान players और admins को ही करना होगा
Online multiplayer games को अनिवार्य रूप से इंसानों द्वारा managed servers पर चलना चाहिए, और player जितना समय connected रहते हैं, उसके अधिकांश समय में admin मौजूद होना चाहिए
संभव हो तो ऐसा admin हो जिसे players पहचानते हों, और admin न होने पर vote kick या vote ban जैसी नरम moderation भी उपलब्ध होनी चाहिए
cheater को निकालने और chat का दुरुपयोग करने वाले व्यक्ति को निकालने में कोई बुनियादी फर्क नहीं है
अंततः online multiplayer games में व्यवहार्य server रूप केवल private servers या community servers ही हैं, ऐसा लगता है
cheaters और abusers को control करने की प्रक्रिया report system से लेकर asynchronous processing करने वाली नहीं होनी चाहिए; game admins को जल्दी kick या ban करना चाहिए
अगर किसी game में online play सिर्फ publisher के matchmaking servers से ही संभव है, और cheaters या chat abusers से निपटने का तरीका केवल web form report है, तो उसे खरीदना या खेलना नहीं चाहिए और अपने wallet से vote करना चाहिए
referee पर नजर रखने वाली अलग organization भी रखी जा सकती है, लेकिन बेहतर है बस game खेलें
Apex Legends मजबूत reporting और anti-cheat systems के साथ अच्छी तरह चल रहा है, और Rocket League में भी अधिकतर automated moderation प्रभावी ढंग से काम करता है
phone number, photo के जरिए manual verification, ranked match से पहले 10 घंटे gameplay की requirement, दूसरे players की recommendations, या इन शर्तों के ऊपर $5 का one-time game pass जैसी व्यवस्था भी संभव है
अगर अभी तक नहीं देखा है, तो Valve की AI anti-cheat presentation recommend करता हूं
काम काफी दिलचस्प है, और दावा है कि यह 99% cheaters पकड़ता है
बेशक cheating के बेहद subtle तरीके अब भी मौजूद हैं
Activision के झूठे permanent ban को पलटने के लिए 2 साल की कानूनी लड़ाई लड़ी, और Activision cheating का एक भी सबूत नहीं दे पाया, इसलिए हार गया: https://antiblizzard.win/2025/01/18/my-two-year-fight-agains...
मैंने कभी cheating नहीं की, फिर भी बिना explanation ban कर दिया गया, और मैं तीन accounts पर regular खेलता हूं, लेकिन बाकी दो accounts ban नहीं हुए
customer support लगातार बस यही कहता रहा, “review के बाद ban सही पाया गया”, और मुझे यह बताने वाली कोई जानकारी नहीं दी कि मैंने क्या गलत किया ताकि उसे सुधार सकूं
मेरे पास game की कुछ सबसे rare skins हैं, 2009 से हजारों घंटे खेले हैं, और मैं सिर्फ ARAM खेलता हूं; ऐसे में सबसे casual mode में emotional value वाले account को दांव पर लगाकर cheating करना समझ से बाहर है
game से जुड़ी किसी बात ने मुझे इससे ज्यादा stress कभी नहीं दिया, और industry में एक परिचित ने internal check करवा दिया, जिसकी वजह से ban बिना कारण हट गया
अब भी खेलता हूं, लेकिन लगभग हर बार वह झूठा ban याद आ जाता है, और लगता है League ही आखिरी competitive multiplayer game होगा जिस पर मैं समय लगाऊंगा
फिर वैसा कुछ हो जाएगा, इस डर से अब और खेलने का मन भी नहीं करता
console पर cheating करना लगभग असंभव है, ranked में मुश्किल से साधारण Gold 1 तक पहुंचने में बहुत समय लगा, और किसी भी behavior पर कभी warning या report नहीं मिली, फिर भी बिना explanation permanent ban कर दिया गया
लेखक की तरह लड़ने के बजाय मैंने तय किया कि Activision products पर दोबारा कभी पैसा नहीं खर्च करूंगा, और मेरा मानना है कि सभी को ऐसा ही करना चाहिए
अमेरिका में शायद ज्यादा मुश्किल होगा, लेकिन UK या England में मेरी समझ से defendant को साबित करना होता है कि बात सच है
शुक्र है कि मैं multiplayer shooters लगभग नहीं खेलता, और अगर अपनी विशाल Steam library खोनी पड़े तो सच में बहुत बुरा लगेगा
जंप obfuscation को लेकर बहुत जिज्ञासा है
अगर किसी ने और reverse engineering की हो तो जवाब दे सके, अच्छा होगा
सोच रहा हूँ कि unconditional jump इतने आम हैं कि उन्हें किसी खास precondition से फ़िल्टर करना मुश्किल है या नहीं; function के अंत में return होता है, इसलिए वह ढूँढना आसान लगता है, लेकिन क्या stack का विश्लेषण करके यह पता लगाना संभव है कि function कहाँ return करेगा और return address के ठीक पहले वाला call ढूँढा जाए?
मैंने x86 assembly programming ज़्यादा नहीं की है, इसलिए हो सकता है मैंने उसके काम करने के तरीके को गलत समझा हो
Intel के PIN framework से भी दिलचस्प analysis किया जा सकता है
मददगार हो सकने वाले लेख यहाँ हैं: https://calwa.re/reversing/obfuscation/binary-deobfuscation-..., https://www.nccgroup.com/us/research-blog/a-look-at-some-rea...
कई functions
retपर खत्म नहीं होतेकुछ jumps fake होते हैं, और कुछ jumps instruction के अंदर चले जाते हैं
decompiler उस स्थिति को संभाल नहीं पाता जहाँ एक ही location पर दो instructions हों
उदाहरण के लिए
jmp 0x1234मेंjmpopcode को skip करके0x1234को valid instruction मान लेनाकिसी branch में stack खराब होता है, लेकिन यह जानबूझकर exception trigger करने के लिए हो सकता है
इसलिए
lea RAX, [rsp + 0x99999999999]जैसी instruction कोnopमें बदलकर decompilation ठीक की जा सकती है, लेकिन इससे intended exception छूट भी सकता हैIDA ऐसी चीज़ें अच्छी तरह handle नहीं करता, इसलिए मैं Binary Ninja license इस्तेमाल कर रहा हूँ, और decompiler के लिए functions inline करने वाली scripts आसानी से बनाई जा सकती हैं
मुझे लगता है IDA में jumps के बीच का code chunk केवल एक ही function का हिस्सा हो सकता है, इसलिए जब jumps code chunks को आपस में reuse करते हैं तो वह ठीक से handle करना मुश्किल होता है
लगता है लोग Binary Ninja कम इस्तेमाल करते हैं क्योंकि Blizzard games में उसमें bug था, लेकिन करीब एक साल पहले bug report के बाद वह fix हो गया था
यह आम off-the-shelf tools, खासकर IDA Pro users को परेशान करने के लिए obfuscation है
ज़्यादातर obfuscation का मकसद बस इतना परेशान करना होता है कि लोग किसी दूसरे project पर चले जाएँ
बिक्री के बाद product features छीन लेने की हरकत को कानून से रोका जाना चाहिए, भले ही वह contract या EULA में हो
ban से game ownership ही नहीं छीनी जानी चाहिए, और अगर ऐसा होता है तो refund मिलना चाहिए
अगर फैसला आने तक ही refund करवाया जा सकता है, तो license cost, lawyer fees, court costs के ऊपर triple damages भी होने चाहिए
मसलन Steam पर ban होकर सभी purchases invalid हो जाएँ, ऐसा कानूनी रूप से संभव नहीं होना चाहिए
account login बंद हो जाए तब भी items और inventory tradeable रहने चाहिए, क्योंकि paying customer ने इन्हें पाने के लिए वास्तविक समय लगाया है
अगर multiplayer game में ethics rules enforce करना चाहते हैं, तो game के लिए पैसे नहीं लिए जा सकते, या paid users को ban के खिलाफ rights मिलने चाहिए
bans proportionality principle के अनुसार होने चाहिए, उनमें इंसानी review शामिल हो, appeal tribunal की प्रक्रिया और record होना चाहिए जिसकी cost license price तक सीमित हो और केवल हारने पर ही चुकानी पड़े
सबसे खराब स्थिति में VAC game में account पर public shame mark लग जाता है
लोग multiplayer games मज़े लेने और दूसरों से interact करने के लिए खेलते हैं, इसलिए अगर cheating हो या कोई और खराब behavior, और वह दूसरों को प्रभावित करता है, तो multiplayer service access ban होना चाहिए
समाज को परेशानी पहुँचाओ तो कीमत चुकानी पड़ती है—यह काफी universal principle है
असली पैसे का नुकसान भी हो तो ठीक है
हालांकि गलती से ban हो जाना अलग समस्या है
और ban पूरा Steam account नहीं, बल्कि वही game होता है जिसे अब खेल नहीं सकते, है न?
दूसरे players ने भी पैसे दिए हैं
COD में cheating करने की ज़रूरत भी नहीं है
bugs इतने ज़्यादा हैं कि game खुद ही आपके लिए कर देता है
ranked में knife की जगह gun load हो जाती है, और ranked weapon equipment check में साफ़ तौर पर गलत
caseयाif-elseहोने के कारण ऐसा संभव है; अगर equipment selector में दिख रही gun allowed नहीं है तो लगता है default XM4 पर सेट हो जाता हैयह उन बहुत कम games में से है जिन्हें मैं जानता हूँ जहाँ ranked version casual version से ज़्यादा टूटा हुआ है
यह जानने की जिज्ञासा है कि लोगों ने ऐसी चीज़ें कहाँ से सीखीं
मैं इतना और सीखना चाहता हूँ कि लेख का आधा हिस्सा भी समझ सकूँ, लेकिन समझ नहीं आता कहाँ से शुरू करूँ
किताब पुरानी है, लेकिन बेहतरीन है, और कई techniques व hands-on exercises के साथ चलाती है
आज के tools उस समय से थोड़े अलग हैं, लेकिन x86 instruction set और assembly कुल मिलाकर ज़्यादा नहीं बदले हैं
सबसे बड़े फायदों में से एक था
crackmeके बारे में पता चलनाये छोटे challenge binaries होते हैं जिन्हें reverse engineering सीखने के लिए बनाया जाता है, lockpicking community के practice locks जैसे
जहाँ तक याद है, किताब में CD-ROM पर ऐसे कई शामिल थे, और ऑनलाइन खोजें तो भी बहुत मिल जाते हैं
ऐसी practice खुद करके देखना ही सीखने का रास्ता है
शुरुआत में ही COD की reverse engineering करने की कोशिश नहीं करनी चाहिए; कदम-दर-कदम build up करना चाहिए
UnknownCheats, cs.rin.ru वगैरह देखने वालों को नमस्ते
मैं भी वहाँ active हूँ, और खास तौर पर Linux user-space anti-cheat में, उसमें भी VAC कैसे काम करता है, इसमें ज़्यादा दिलचस्पी है
एक लोकप्रिय Horde/Alliance आधारित MMO को थोड़ा reverse engineer किया था, और वह लगभग वही steps follow कर रहा था, FNV32 export hash भी शामिल था
बहुत मिलते-जुलते tricks इस्तेमाल होते देखे, इसलिए लगभग वही तरीका लगता है
सोच रहा हूँ कि क्या यह उसी protection technique से packed है
signature scanning सच में बहुत powerful है
reverse engineering में मेरे लिए यह सबसे addictive हिस्सों में से भी एक है
signatures की list बनाना, और उन function pointers को call कर सकें इसके लिए scripting language bindings लिखना मज़ेदार होता है
यह कई third-party mod platforms की नींव भी है, क्योंकि modders को meaningful API देना पड़ता है जिसे first-party developer ने expose नहीं किया होता
मुझे पता है कि कुछ Source engine plugins भी ज़रूरत पड़ने पर यही तरीका इस्तेमाल करते हैं
हालांकि लगता है कि ज़्यादातर virtual function table pointer के offset का इस्तेमाल करते हैं
लगता है कि क्या game state पर periodic digital signature करना, या कोई proof of work डालना cheating रोकने के लिए संभव या meaningful हो सकता है
अब लगने लगा है कि cheating रोकना बहुत मुश्किल समस्या है
मैं एक छोटा और सस्ता online FPS बना रहा हूँ, और anti-cheat software रखने के बजाय सोच रहा हूँ कि users एक-दूसरे पर trust करें और cheaters को खुद ढूँढें, या Valve की तरह AI इस्तेमाल किया जाए
शायद players को खुद servers manage और operate करने दूँगा
फोन नंबर लिंक करना, दूसरे players द्वारा दिए गए reputation scores, identity document या दूसरे strong authentication methods, dating apps की तरह photo के जरिए manual verification, competitive match से पहले 10 घंटे खेलने जैसी शर्तें रखी जा सकती हैं
मेरा मानना है कि hardcore players cheaters कम करने के लिए ऐसी प्रक्रियाएँ खुशी-खुशी करेंगे
किसी नापसंद player को report करके ban करवाने जैसी social abuse भी होती है
ऐसे system में किसी भी anti-cheat से कहीं ज़्यादा false positives होंगे