Mstar için otomatik tuş basma botu yapıyorum. 4 lane'li bir ritim oyunu. Şu ana kadar yapılanlar ve takıldığım yerler:
=== BAŞARILANLAR ===
1. UPK NOTA VERİSİ ÇIKARMA (1013 dosya, 1.44M nota)
- Mstar UPK'ları custom magic 0x3f711fb0 kullanır (AES şifreli DEĞİL - düz UE3 package sadece custom header)
- Paket versiyon 530/0, engine 3717, game flag 0x800000
- umodel/UEViewer ile direkt açılıyor, MStarEventData custom objeleri export ediliyor
- Binary format çözüldü: TLV yapısı (0x1C=beat interval, 0x1B=section marker)
- Timing formülü: ms_per_tick = 60000 / (BPM * TPB), TPB ≈ 240-256
- Çıktı formatı: {t: centisaniye_cinsinden_zaman, l: lane_id (0-3)}
- 5 zorluk seviyesi (Easy'den Expert'e), her zorluk ayrı UPK dosyası
2. SETWINDOWSHOOKEX DLL ENJEKSİYONU (çalışıyor)
- hook_injector.exe SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, hHookDll, 0) kullanıyor
- GameGuard bu API'yi engelleyemiyor - DLL oyun process'ine enjekte oluyor
- İçeriden bellek okuma mümkün (ama GameGuard cached data döndürüyor)
- Hazır DLL'ler: mstar_note_reader.dll, note_dump.dll, hook_iat.dll, tick_hook.dll
- Derleme: MinGW 32-bit (i686-w64-mingw32-gcc) --kill-at flag'ı ile
3. GHIDRA STATIC ANALİZ (Nurien.exe, 222K fonksiyon)
- UMStarTimer sınıfı (execTimeGetElapsed @ 0x0145F2C0)
- AMStarRhythmNote sınıfı (nota actor'ü)
- Native function dispatch table: 0x02C8C230 (AMStarRhythmNote), 0x02C8C698 (UMStarTimer)
- Jump table: 0x02D2E6D0 (bytecode VM dispatcher - exec* fonksiyonları aslında VM dispatcher)
- Timing constant'ları .rdata'da: ±0.05s (Perfect), ±0.1s (Great), ±0.15s (Good), ±0.2s (Bad)
- SQLCipher entegre (account DB'leri için, UPK dosyaları DEĞİL)
4. BYOVD DENEMELERİ (ASTRA64.sys)
- ASTRA64.sys (EnTech Taiwan) yükleniyor ve başlıyor
- Fiziksel bellek okumaları cached/garbage dönüyor
- HVCI (Memory Integrity) çoğu unsigned driver'ı engelliyor
- GameGuard IRP hook şüphesi var
5. MEVCUT BOT (renk bazlı)
- HSV renk tespiti ile çalışıyor ama PERFECT timing için yeterli değil
- Lane pozisyonları: left=747, down=934, up=959, right=1123
=== TAKILDIĞIM YERLER ===
1. TIMER BELLEKTE BULUNAMADI
- GameGuard page-shadowing yapıyor - timer değeri heap/stack sayfalarında cached dönüyor
- DAT_02dbee20 (UMStarTimer instance) okumaları 0.00 döndürüyor
- IntScan (.NET) 84MB boyunca artan int32 değeri taradı - hiçbir şey bulamadı
- .text ve .rdata bölümleri OKUNABİLİR ama timer RW PRIV sayfalarda
2. UPK NOTALARINI OYUN İLE SENKRONİZE EDEMİYORUM
- 1.44M nota hazır, centisaniye hassasiyetinde
- Ama oyunun neresinde olduğunu bilmiyorum
- Local saat (song_start = time.time()) işe yarıyor ama drift yapıyor
3. GAMEGUARD TÜM ENJEKSİYON YÖNTEMLERİNİ ENGELLİYOR
- VirtualAllocEx/WriteProcessMemory -> error 5
- CreateRemoteThread -> blocked
- QueueUserAPC -> blocked
- SetWindowsHookEx ÇALIŞIYOR ama sınırlı
- MinGW proxy DLL (libcrypto-3.dll) - 23 forwarded export çalıştı ama EVP hook UPK key'ini vermedi
4. FRAME DIFFERENCING GÜVENİLİR DEĞİL
- Notaların glow/flash renkleri şarkıya göre değişiyor
- HSV eşikleri 1500+ şarkı için tutarlı değil
=== İHTİYACIM OLAN YARDIM ===
A) GameGuard page-shadowing'ine rağmen oyun içi timer'ı nasıl okuyabilirim?
- DLL zaten process içinde (SetWindowsHookEx ile), içeriden okuma denemeleri de cached data döndürüyor
- IAT hook (GetTickCount64/QPC) çalışıyor ama oyun timer'ı lazım, sistem timer'ı değil
B) Page-shadowing bypass için alternatif?
- Fiziksel bellek BYOVD güvenilir değil (HVCI veya GameGuard IRP hook)
- GGKernel64.sys'in bilinen bir zafiyeti var mı?
C) UPK SQLCipher key'i bulma?
- 40 sqlite3_key çağrısı aynı password'ü kullanıyor (e50+IfVdNw7!>RUn@{c1@^T;Og#|5b) ama Music UPK'larını açmıyor
- "raw key from hex" modu SQLCipher'da var - hex key binary'de bir yerde gömülü olmalı
- FileKeyData/FileKeyInterface C++ sınıfları tespit edildi ama RTTI xref'leri Ghidra'da çözülemedi
- Binary'de UPK magic (0xB01F713F) hiç hardcode edilmemiş (runtime oluşuyor)
D) Process hollowing (uninst.exe ile)?
- uninst.exe VFun imzalı, suspended başlatılıp içine kod yazılabilir
- GameGuard hollowed process'i tespit eder mi?
Yardımcı olabilecek varsa çok memnun olurum.