IDA Source2Forge
C++ 1
// Áttekintés
ConVar- és ConCommand-visszanyerés Source 2 binárisokhoz IDA Pro 9 alatt. A regisztrációs konstruktorokat az argumentumaik alakjából ismeri fel, nem beégetett címekből: elnevezi az összes regisztrált globális objektumot és parancskezelőt, dekódolja az FCVAR flageket, és megmutatja, hol nyúl hozzá a motor az egyes változókhoz. Windows, Linux és macOS alatt fut, JSON/CSV exporttal és IDAPython API-val.
// Mivel készült
C++IDA Pro SDKSource 2ConVar
// A probléma
Egy Source 2 bináris több száz konzolváltozót és parancsot regisztrál, de a szimbólumok nélküli buildben ezek csak névtelen globális objektumok és azonosítatlan callbackek. Kézzel visszanyerni azt jelenti, hogy végig kell járni minden regisztrációs hívást, szemmel kell dekódolni a flageket, aztán a következő patch után kezdeni elölről.
// Megközelítés
- A regisztrációs konstruktorokat maguk a hívási helyek adják ki: végigmegy a convar-névre emlékeztető stringeken, és megtanulja, melyik argumentum mit hordoz.
- A változókat és a parancsokat a viselkedésük választja szét: egy változó objektumához a regisztráció után is hozzányúlnak, a parancsét egyszer írják, utána a callbackje intézi a hívásokat.
- Mindezt IDA-n belül mutatja meg: külön ConVar- és parancslista, dekódolt FCVAR flagek, leírások ismételhető kommentként, használati helyek, JSON/CSV export és IDC API IDAPythonhoz.
// Mérnöki kihívások
- Egy valódi regisztrációs konstruktort megkülönböztetni az ugyanolyan argumentumokat fogadó string-segédfüggvénytől: a segédfüggvénybe sok különböző név ömlik, a regisztrációnál minden objektum pontosan egy nevet kap.
- Visszanyerni a parancsok kezelőjét úgy, hogy a konstruktor csak egy stack-delegate-re mutató pointert lát, magát a függvényt soha.
- A hl2sdk-neveket csak ott kiosztani, ahol bizonyítható, melyik függvényről van szó: egy valódi SDK-név rossz függvényen rosszabb, mint a címből képzett név.




