GNU/Linux >> Znalost Linux >  >> Linux

Pozice nezávislé spustitelné soubory a Android

Nevím nic o PIE. Řekněte mi prosím, jak vytvořit spustitelný soubor nezávislý na pozici.

Position Independent Executable neboli PIE umožňuje přemístění programu, stejně jako sdílený objekt. Při každém spuštění programu lze program načíst na různé adresy, aby bylo pro útočníka těžší uhodnout určitý stav programu.

Spustitelný soubor PIE můžete zkompilovat a propojit jedním ze dvou způsobů. Nejprve vše zkompilujte pomocí -fPIE a propojit s -pie . Druhým je zkompilovat vše s -fPIC a propojit s -pie .

Pokud vytváříte sdílený objekt i program, pak vše zkompilujte pomocí -fPIC . Propojte sdílený objekt s -shared a propojte program s -pie .

Nemůžete to udělat jinak. To znamená, že nemůžete vše zkompilovat pomocí -fPIE a sestavit jak sdílený objekt, tak program. Podrobnosti naleznete v části Možnosti generování kódu v příručce GCC.

Jedna věc, na kterou je třeba dávat pozor na Androidu:vytváření pomocí PIE před verzí 4.1 způsobí chybu segmentace v /system/bin/linker . PIE byl přidán v Androidu 4.1 a zhroutí menší verze.

Někdo mi řekl, abych dodal vlastní odkaz/zavaděč, abych se vyhnul problému, ale momentálně nemohu najít referenci.

Viz také Vylepšení zabezpečení v systému Android 1.5 až 4.1.

Chyba:podporovány jsou pouze spustitelné soubory nezávislé na pozici (PIE).

Ano, to je funkce Lollipop. Viz Vylepšení zabezpečení v systému Android 5.0.

Můžete zkontrolovat, zda je program vytvořen pomocí PIE pomocí readelf :

$ readelf -l my-prog | grep -i "file type"
Elf filetype is DYN (shared object file)

Důležitá část je readelf hlásí DYN a nehlásí EXE . EXE znamená, že postrádá PIE, a to by mělo spustit chybu související se zabezpečením.

Související informace naleznete v tématu Je PIE (Position-independent executable) pro hlavní spustitelné soubory podporované v systému Android 4.0 (ICS)?


Vím, že je to staré téma, ale tento osvědčený způsob může některým lidem ušetřit čas
pomocí Hex-Editoru najděte 17. bajt, změňte hodnotu 02 na 03 a je to!


Linux
  1. Jak zkompilovat a spustit program C v Ubuntu

  2. Nainstalujte SoftHSM a přistupujte k němu prostřednictvím programu Java

  3. Ponechat rozhraní programového rozhraní a Cli oddělené?

  1. Jak programovat s Bash:Syntaxe a nástroje

  2. Upravit a překompilovat individuální program?

  3. 5 nejlepších SSH a FTP aplikací pro Android pro Linux

  1. Rozdíl mezi programem spouštění systému a terminálu?

  2. Program Shell stačí otevřít ovladač znaků a čekat?

  3. DAEMON Sync – Synchronizace dat z Linuxu do zařízení Android a iOS