Kérdés:
Hogyan lehet sikeresen hozzáadni egy kódrészletet egy futtatható fájlhoz Linux alatt?
0xfede7c8
2017-03-01 08:21:28 UTC
view on stackexchange narkive permalink

Linux alatt vagyok, és láttam már néhányszor ezt a kérdést, de soha, senki sem válaszolt arra, hogyan lehet ezt a munkát valóban megvalósítani.

Hozzá kell adnom egy részt egy már lefordított bináris fájlhoz. Mondjuk egy pillanatra egy ELF fájl. Az objcopy t használom, így ennek minden formátumnak általánosnak kell lennie, mert az objcopy a libbfd t használja, amely sok formátumot kezel.

A folyamatom a következő.

Létrehozom a bytecode-ot egy szakaszhoz, amelyet hozzá akarok fűzni egy már lefordított ELF fájlhoz. Nevezzük el ezt a fájlt bytecode.bin

Ezután megteszem:

  objcopy --add-section .mysection = bytecode.bin \ - set-section-flags .mysection = kód, tartalom, allokáció, betöltés, csak olvasható \ myprogram myprogram_edited  

Ezután beállítom a szekció VMA-ját:

  objcopy --adjust-section- vma .mysection = $ ((16 # XXXXX)) myprogram_edited myprogram_edited  

Ahol az XXXXXX a szakasz új VMA-címe.

Figyelmeztetést kapok:

  objcopy: stIbZt3t: figyelmeztetés: a ".mysection" kiosztott szakasz nincs szegmensben  

Amikor megteszem:

  objdump - d myprogram_edited  

Látom:

  A .mysection szakasz szétszerelése: 0000000000201011 <.mysection>: ......  

Tehát látom, hogy a szakasz rendben van, és a VMA ki van igazítva. De a szakasz nincs hozzárendelve szegmensekhez, ezért futás közben nem tölthető be.

Hogyan tudom ezt megoldani?

SZERKESZTÉS:

Úgy döntöttem az Intel PIN eszközének használatához. Nagyon hasznos és hatékony RI és bináris injekcióhoz.

Három válaszokat:
Igor Skochinsky
2017-03-01 15:18:06 UTC
view on stackexchange narkive permalink
A

libbfd nem varázspálca, valójában meglehetősen korlátozott (ez az egyik oka annak, hogy a GDB nem tudja hibakeresni a fájlokat szakasztábla nélkül). Különösen az objcopy nem ad hozzá PHT bejegyzéseket az Ön számára, ezért manuálisan kell kibővítenie vagy módosítania a PHT-t. Vagy manuálisan megteheti egy hexaszerkesztővel, vagy megpróbálhat olyan könyvtárat használni, mint a libelf (ez megadja a szükséges primitíveket, de a logikát magának kell végrehajtania).

"ez az egyik oka annak, hogy a GDB nem tudja hibakeresni a fájlokat szakasztábla nélkül" - ez az, amire egy ideje kíváncsi vagyok. Köszönöm, hogy megemlítette ezt
A probléma az, hogy szükségem van egy általános eszközre, amely több futtatható fájlformátumot kezel, nem csak az ELF-et. De azt hiszem, ez már csak az ELF-kel van szép probléma.
Nos, nincs tudomásom ilyen eszközről, ezért azt hiszem, meg kell írnia a sajátját.
x2d2
2017-04-05 13:01:35 UTC
view on stackexchange narkive permalink

Talán megnézheti a LIEF-et:

GitHub oldal: https://github.com/lief-project/LIEF

Webhely: https://lief.quarkslab.com

A válaszod sokkal értékesebb lenne, ha tudnál egy alapvető példát adni arra, hogyan kell kódolni a LIEF-ben feltett kérdéseket.
0xfede7c8
2019-08-12 19:24:01 UTC
view on stackexchange narkive permalink

Végül Intel PIN-kódot használtam

Nagyon hasznos.

Nos, a PIN nem "ad hozzá szakaszt egy már összeállított bináris fájlhoz", tehát ez nem válasz a kérdésre, ahogyan elhangzott.


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...