IDA PltPatcher
C++ 2
// Áttekintés
Helyrehozza az ELF binárisok azon PLT stubjait, amelyeknél az IDA feladja. A stubok alakja helyett a PT_DYNAMIC dinamikus relokációit járja be, minden GOT slotot a valódi externjére irányít, a stubokat elnevezett thunkká alakítja, és ráteszi a library prototípusokat, így a hívások névvel és argumentumokkal együtt jönnek vissza. GAMMACASE PltPatcherének C++ portja ELF32/ELF64, i386, ARM, x86_64 és AArch64 támogatással, Windows, Linux és macOS alatt.
// Mivel készült
C++IDA Pro SDKELFPLT
// A probléma
Az IDA a PLT stubokat az alakjuk alapján ismeri fel. Ha egy linker másképp rendezi el őket, az IDA jelzi, hogy nem tudta patchelni a PLT-t, és névtelen GOT slotokkal, név és argumentum nélküli hívásokkal hagyja az adatbázist.
// Megközelítés
- A DT_JMPREL táblát közvetlenül a PT_DYNAMIC-ból járja be, abból, amit a dinamikus betöltőnek is használnia kell, így a stubok elrendezése nem számít.
- Minden GOT slotot a saját externjére irányít (a hiányzókat létrehozza), a stubokat pedig elnevezett FUNC_THUNK-ká alakítja, amelyeket a decompiler összevon.
- A betöltött type library-kből ráteszi a prototípusokat C és mangled C++ szimbólumokra egyaránt, így a hívások az argumentumaikkal együtt jönnek vissza.
// Mérnöki kihívások
- Az ELF header nem feltétlenül a min_ea címen van, ezért parse előtt ellenőrzi, hogy relokált betöltésnél és memóriadumpnál se olvasson szemetet.
- A Hex-Rays eldobja a thunk kikövetkeztetett típusát, ha a mögötte lévő externnek nincs típusa, ezért egy callback még előtte véglegesként visszaírja.
- A kézzel adott neveket soha nem írja felül, és a teljes futás egyetlen visszavonási pont.