4

解決済み: 解決 策は、パーソナリティ (0x40000) を呼び出すことでした。以下のコメントの詳細を参照してください。

ASLR フラグは ELF ファイル内のどこにありますか? 特定のライブラリ (.so) の ASLR を無効にする必要があります。objdump を使用してみましたが、その方法がわかりませんでした。

Android 4.4.4 では動作しないように見えるため、/proc を使用できないため、バイナリを変更しようとしています。

編集: 私は以下をコンパイルしました:

#include <stdio.h>

void* getEIP()
{
    return __builtin_return_address(0) - 0x5;
}

int main(int argc, char** argv)
{
    printf("EIP located at: %p\n", getEIP());
    return 0;
}

ASLR なし (PIE):

arm-linux-androideabi-gcc.exe code.c -o noPIE --sysroot=%NDK%\platforms\android-3\arch-arm

ASLR (PIE) を使用:

arm-linux-androideabi-gcc.exe -fPIE -pie code.c -o withPIE --sysroot=%NDK%\platforms\android-3\arch-arm

ただし、noPIE バイナリは実際にはランダム化されていません。

# cat /proc/sys/kernel/randomize_va_space
2
4

2 に答える 2

3

特定のライブラリ (.so) の ASLR を無効にする必要があります。

できません(また、ASLR は ELF のプロパティではなく、カーネルのプロパティであるため、ELF ファイルのどこにも存在しません)。

できることは、特定のプロセスのランダム化を無効にすることです。あなたの友達setarch -Rです。

于 2015-10-13T03:41:19.597 に答える