2016-09-18 12 views
0

Я хочу знать, если это возможно укоренение любой ОС Android с помощью Переполнение буфера Local, который я бы генерировать, используя скомпилированную программу, которая будет содержать наиболее простейший локальный переполнение буфера:Возможно ли создать переполнение локального буфера в Android через скомпилированный двоичный файл, чтобы получить доступ root?

char buf[BUFSIZE]; 
gets(buf); 

И когда-то я бы компилировать эту программу я бы нажал на этот двоичный файл в/хранилище, который должен выполняться через shell, выполняемый ADB, так что можно сделать то, что я сказал?

И если да, то как бы я обратил инженерный крах, чтобы развить эксплойт, который обеспечит мне доступ root в устройстве?

+0

Нет ни вы не можете, потому что Java имеет среду выполнения который проверяет наличие таких вещей и предотвращает использование переполнений. –

+1

@Andreas Vogl Бинарный файл оболочки не выполняется во время выполнения Java. Но AFAIK, такой эксплойт будет обрабатываться на уровне Linux. – Onik

+0

@Onik Так можно? потому что я думал, что могу сгенерировать уязвимый скомпилированный двоичный файл и нажать его на устройство, но дело в том, что я не знаю, как отлаживать крах локального переполнения в android через adb? Я видел, как люди это делали, например, известный эксплойт: ZergRush. – 0x01Brain

ответ

1

Есть много хороших статей об укоренении андроида, таких как Wikipedia. Они объясняют, что укореняющиеся андроидные устройства выполняются с использованием эксплойтов (ошибок) в android os, aka firmware.

Переполнение буфера никогда не участвовало в укоренении андроидных устройств.

В то время как технически достижение переполнения буфера возможно с использованием NDK and native C language, существует длинный, длинный путь от переполнения буфера для получения доступа root.

Как указал MSalters правильно, ваш код C будет работать в стеке linux. Существует немало серьезных защитных мер, которые предотвращают легкую эксплуатацию переполнения буфера.

Если вы не хотите принимать «нет» в качестве ответа, скажем: «очень маловероятно, и, вероятно, не стоит вашего времени» :-)

0

Вы не можете. В конце концов, это всего лишь Linux. Программа, работающая под учетной записью, отличной от root, не может получать права root с помощью преднамеренных или непреднамеренных методов.

+0

Тогда как укоренение работает с аспектом программирования? Из того, что я знал из того, что я читал в Интернете, я обнаружил, что rooting работает в основном с использованием переполнения буфера, потому что когда память, которая используется функцией, которая управляется с системного уровня, а не уровня пользователя, переполняется, это говорит о том, что вы можете переполнить память с некоторым количеством байтов, поэтому позволяет предположить, что память, используемая здесь «gets()», составляет 500 байт, тогда (4 байта EIP Перенаправление в двоичный файл в памяти + 465 байт нежелательной + 31 байта для двоичного файла) путем ввода следующих мы можем получить доступ root, потому что память представляет собой память уровня системы. – 0x01Brain

+0

Можете ли вы объяснить, как укоренение программно работает, если это не так? – 0x01Brain

+0

@ 0x01Brain: Это предполагает существующий двоичный файл, который _does_ запускается под root. В ваших приложениях нет. – MSalters