Kérdés:
Hogyan érhetem el a megosztott könyvtárak függvényhívásait az angr használatával
anon
2017-08-16 03:05:22 UTC
view on stackexchange narkive permalink

Megpróbálom megszerezni az összes könyvtár függvényhívást, amelyet egy bináris végrehajt a CFG előrendelés-DFT bejárása során. Ilyen módon tudom megszerezni a CFG-t:

  import sys, angrimport networkx as nxproj = angr.Project (sys.argv [1], auto_load_libs = False) cfg = proj.analyses.CFG () .graph  

Meg tudtam szerezni a CFG-t, és még így is át tudom haladni (Tegyük fel, hogy a megfelelő fő funkció csomópontját kapom):

  s = nx.dfs_preorder_nodes (cfg, mainFuncNode) csomópontok = [] try: míg True: nodes.append (ns.next ()), kivéve: pass  

Azonban nem teszem nem tudom, hogyan kell lekérni a függvényhívásokat a csomópontokról (ha ténylegesen csinálják). Elolvastam néhány dokumentációt, és csak annyit tudtam előállítani:

  n-hez a csomópontokban: ha n .is_simprocedure: print n.to_codenode (). function  

A kimenet minden Nincs, és biztos vagyok benne, hogy ez helytelen, mert a bináris néhány I / O műveletet hajt végre. Tehát olyan dolgokra számítok, mint:

  • libc_puts
  • libc_gets
  • .. .

Nagyra értékelném, ha tudnál jobb tanácsokat adni nekem.

Hmm, ezen az SE webhelyen az IDApro, a Radare2 és mások szakemberei vannak, de nem sok angrit láttam ... Jó lenne megpróbálni néhány közösséget vonzani tőlük! :-) @anon: Köszönjük az Angral kapcsolatos kérdését!
Tudom, hogy az OP már ott volt, de csak mások számára, akik itt böngésznek, létezik egy [Slack channel] (https://angr.slack.com/) [automatikus meghívók generálva] (http://angr.io/invite) .html). Remélhetőleg az angr címke mégis itt vesz fel.
Egy válasz:
Fish
2017-08-16 14:07:17 UTC
view on stackexchange narkive permalink

Viszont nem tudom, hogyan kapjam meg a függvényhívásokat a csomópontokról

Azt akarod tudni, hogy melyik függvényhez tartozik egy csomópont, vagy melyik függvény a csomópont hív?

Az előbbi esetében minden blokkhoz tartozik egy megfelelő CFGNode objektum, amely a grafikonon található. Minden CFGNode -nak van egy .function_address tagja, amely megmondja annak a függvénynek a címét, amelyhez a csomópont tartozik.

Ez utóbbi esetében a a grafikon tulajdonságokkal van felcímkézve, és a 'jumpkind' kifejezéssel jelöljük az él típusát. A Ijk_Call jumpkind azt jelenti, hogy az él hívás egy blokkból (vagy egy csomópontból) egy függvény felé.

Egyébként az angr CFG osztálya nem csupán a .graph tag (amely egy networkx.DiGraph példány). Előfordulhat, hogy néha könnyebb a CFG -on közvetlenül dolgozni, ahelyett, hogy kézzel bejárná a grafikont.

Ezen felül, ha egy CFG létrejön, akkor az összes funkcióhoz hozzáférhet a CFG.funkciók . Minden Function példányhoz két funkción belüli grafikon társul: egy .graph és egy .transition_graph . Lehet, hogy könnyebb dolgozni, mint az egész bináris fájl CFG-jét bejárni.

Végül, ha tetszik a GUI, és sok türelme van, érdemes adni angr Menedzsment egy próbálkozás.

Köszönöm a mutatókat. Igen, ez utóbbira gondoltam. Én is tudni akarom. Hogyan képviseli a CFG a megosztott könyvtár függvényhívást. Van ugró éle a megosztott lib helyéhez (valójában @ptr) a megfelelő szimbólumnévvel?
Köszönöm a grafikus felhasználói felületet, és meg tudtam szerezni azokat a funkciókat, amire számítottam, például memset, memcpy, _controlfp stb.
A megosztott könyvtárak funkcióira mutató élekkel rendelkezik, még akkor is, ha a könyvtár nincs betöltve a projekttel.
Köszönöm! Tudja, hogyan látom, hogy az a csomópont megosztott lib függvény?
Először szerezze be a csomópont címét. Ha ez egy függvény, akkor a `Function` példányt a` cfg.functions [addr] 'segítségével szerezheti be, majd hozzáférhet a `.binary` és a` .binary_name` fájlokhoz. Ha ez nem függvény, akkor meghívhatja a `project.loader.whats_at (addr)` parancsot.


Ezt a kérdést és választ automatikusan lefordították angol nyelvről.Az eredeti tartalom elérhető a stackexchange oldalon, amelyet köszönünk az cc by-sa 3.0 licencért, amely alatt terjesztik.
Loading...