Сейчас на форуме: (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Не могу понять,как образуется адрес функции.
Посл.ответ Сообщение

Ранг: 0.7 (гость)
Активность: 0=0
Статус: Участник

Создано: 14 августа 2010 03:44
· Личное сообщение · #1

Утро доброе.Наткнулся на интересную статью,как оказалось,очень старую,но актуальную -

http_://www.codenet.ru/progr/asm/overflow.php


И вот такой кусочек текста:
---------------------------------------------------------------------- ---------------------------------------------------------------------- -
Import Directory from "KERNEL32.DLL":
name table at 0xf03c, address table at 0xf0e0 // Что за листинг такой ?!
hint name
---- ----
0 CloseHandle
0 CreateFileA
0 ExitProcess
...

Так как Image Base у нашей программы - 0x400000, то адрес для вызова ExitProcess равен 0x400000 + 0xf0e0 + 8 = 0x40f0e8. Значит используем инструкцию CALL [40f0e8h]. C помощью ассемблера узнаём, что она компилируется в последовательность байтов 0xff 0x15 0xe8 0xf0 0x40 0x00. Значит переписываем функцию main следующим образом
---------------------------------------------------------------------- ---------------------------------------------------------------------

Работали с программой PEBrowser.Скачал её с wasm-a,иду в imports -> KERNEL32.DLL -> ExitProcess - Выдается какой-то референс на 0х40118Е.В итоге,так и не понял,каким образом они достали эти два числа после имейдж бейз(какое-то имя таблицы и,как я понял,её же и адрес после имени...
Программы в Интернете можно приобрести только по платной основе,крякнутых версий не найти,а так либо смс отправляй,либо малварь приобретай.
Из отладчиков использую Олю.

P.S. : И как скомпилировать потом функциб в ассемблере/отладчике в последовательность этих байт ? (Сам процесс был явно опущен).




Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 18 августа 2010 17:00 · Поправил: Crawler
· Личное сообщение · #2

Про переполнение стека в 9х давно неактуально читай мою лучше, я писал в ксакеп на примере конкретного приложения (написание эксплоита, там и переполнение обзорно).

Почитай, как осуществляется вызов функции. Таблица имен, таблица адресов, а не "имя таблицы, ее же адрес". Там же не "name OF table", a "name table" написано

CALL [40f0e8h] - что тут непонятного? взяли и прибавили смещение к имэдж бэйс, а потом вызвали функцию по указателю, который в памяти.

"Как скомпилировать функцию в последовательность этих байт"



А это что?

Code:
  1. Так как Image Base у нашей программы - 0x400000, то адрес для вызова ExitProcess равен 0x400000 + 0xf0e0 + 8 = 0x40f0e8. Значит используем инструкцию CALL [40f0e8h]. C помощью ассемблера узнаём, что она компилируется в последовательность байтов 0xff 0x15 0xe8 0xf0 0x40 0x00. Значит переписываем функцию main следующим образом:
  2. int main()
  3. {
  4.     // часть строки, заполняющая буфер
  5.     char mystr[] = "111112222233333444445555566666777778" 
  6.                    "\xb3\x94\xf7\xbf"           // адрес возврата
  7.                                                 // ----------- код -----------
  8.                    "\xff\x15\xe8\xf0\x40\x00"; // CALL [KERNEL32.ExitProcess]
  9.     show_array(47, mystr);
  10.     return 0;
  11. }


-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.



 eXeL@B —› Вопросы новичков —› Не могу понять,как образуется адрес функции.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати