Lefoglaló API függvényeket

Üdvözöljük Delphi'sty és szimpatizánsai. Üdvözöllek a következő cikkben kezdőknek. Ma megmutatom, hogyan kell elkapjam API függvény. Lehallgató API függvények, akkor növeljük a lehetőségeket és a határértékek csak a képzelet. Ahhoz, hogy olvassa el ezt a cikket a legnagyobb haszon szükséges legalább alapfokú ismerete alacsony szintű programozási és a tudás az építészet a Windows.

Ma elmondom a leghatékonyabb módszer a lehallgató API funkciók - splicing. Splicing a helyettesítés a függvény kódját. Persze, van egy másik módszer elfog a szerkesztést az import táblázatkezelő alkalmazás. Azt fogja mondani a sorrendben.

Amikor írsz a jelentkezését,

A függvényhívás előfordul Push. tolja. hívja dword ptr $ 00405F56

Ha egy kicsit megváltoztatni ezt a képletet, akkor így fog kinézni

Most minden alkalommal hívja a célfüggvény, mindig át a menedzsment processzor. És ahogy most hívja az eredeti funkciót. Amikor telepíti a lehallgatott meg kell tartani az első 5 bájt a funkciót. Az eredeti hívást, szükséges helyreállítani a szükséges funkciókat, és hívja meg, majd helyezze vissza a lehallgatás. Kijelentjük, amelyek szerkezete megtartja az első 5 bájt a funkció:

Cím mezőben valójában ez a struktúra nem szükséges (csak nem mi), de mégis, ez sokkal kényelmesebb, hogy lőni a lehallgatás, akkor meg fogja érteni, hogy miért ezen a területen van szükség. Hívjuk ezt a struktúrát egy „híd” a régi funkciót.

Most levelet funkció, amely meghatározza a lehallgatás:

Először állítsa be az attribútumokat a hozzáférést a kód funkciót, így átírni. Ezután kiszámítjuk az értéket a folytatásban. Először mentse kezdetét a funkciót a bejegyzést, majd átírni az elején a funkciót. Végén a régi sor hozzáférési attribútumokat. Most levelet funkció, amely eltávolítja a lehallgatás:

Most levelet funkció, amely meghatározza a lehallgatott a függvény neve. Úgy gondolom, hogy ez nem túl nehéz.

Menj előre. A fentebb leírt funkciókat lehallgatott funkció csak az aktuális folyamatot. És hogyan capture funkció más folyamatokban. A legegyszerűbb módszer az, hogy kibír az elfogó funkció a DLL és a kód könyvtár funkciója, hogy telepítse a lehallgatás, ha a DLL be van töltve a folyamatot, és távolítsa el a lehallgatás, ha rakodni. Van egy másik probléma: hogyan lehet egy másik folyamat, hogy letöltse a DLL'ku. A legegyszerűbb megoldás az, hogy hozzon létre egy távoli szál. Most minden rendben van.

Távoli adatfolyam létrehozva funkció CreateRemoteThread.

Flow rendelkeznie kell a következő tulajdonságokkal rendelkezik:

Ennek során valószínűleg WinAPI stdcall azt jelzi, hogy nem számít, hogy mit jelent még meg kell állapítani, mint stdcall. Mi működik csak egy paraméter normális mutatót. Most elemezze a helyzetet: Hisszük: agyuk: LoadLibraryA funkció ugyanazokat a tulajdonságokat. Beletelik egy mutatót az első karakter a DLL fájl nevét (a húr kell végződnie # 0). Következésképpen LoadLibraryA működnek teljesen amit működhetne áramlás függvényében. Mivel úgy egy pointert a húr a folyamatba, akkor kell írni a memóriában egy másik folyamat a húr, és a nevét a DLL fájl. Ez a funkció nem WriteProcessMemory. Itt van ő leírása

Így töltött egy DLL másik folyamatban. Valójában - fecskendez a kód egy másik történet, és előírja az írás egy külön cikkben. Előfordul, hogy a folyamat nem szabad megváltoztatni a memória rendszer folyamatok, mint winlogon.exe, lsass.exe, Smss.exe, Csrss.exe és mások. Ez megköveteli SeDebugPrivilege kiváltsága a forrás modul elkapjam API függvény olyan függvény EnableDebugPrivilege amely ezt a jogosultságot az aktuális folyamatot.

A telepítéshez a lehallgatás az API függvények minden folyamat (az összes GUI folyamatok) csak teher a DLL. Elég, ha itt kódot írni, mint ez:

Az archívum a forráskód egy modul API lehallgatás funkciók vannak minden tulajdonságával, hogy én ma használt és le.

Itt talán, ennyi mára. Az archívum is egy példa, hogy elfedje Lsass.exe.

Kapcsolódó cikkek