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

 eXeL@B —› Программирование —› Отображение в памяти процесса
Посл.ответ Сообщение

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

Создано: 20 марта 2006 13:18
· Личное сообщение · #1

Вопрос:
Есть секция файла ( к примеру секция кода)
При считывании её в память ( буфер) - через FileRead или MapViewOfFile - адрес расположения секции далеко не тот, что в оригинале. Есть конечно вариант делать по смещениям - типа:
asm
mov edi, 0046CA58 - нужное смещение в исполняемом файле
mov eax, ImageBase+1000
lea ebx, Buffer
mov ecx, ebx
sub ecx, eax //смещение
add edi,ecx // указатель на 46CA58 но уже в буфере
mov [edi],$00000000 //затерли четыре байта по данному адресу в буфере
end

Так вот, можно ли не париться с относительными смещениями каждый раз ?



Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 20 марта 2006 14:01
· Личное сообщение · #2

никак... настраивай релоки под выделенную память....

-----
Shalom ebanats!




Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 20 марта 2006 23:48
· Личное сообщение · #3

Licos
Можешь переписать её на то место, где она должна находиться.



Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 20 марта 2006 23:50
· Личное сообщение · #4

asd пишет:
Можешь переписать её на то место, где она должна находиться.

Как ты себе это представляешь ?

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels




Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 20 марта 2006 23:56
· Личное сообщение · #5

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



Ранг: 60.4 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 21 марта 2006 02:45
· Личное сообщение · #6

asd А если по тому адресу уже что-то выполняется, или она заблокирован?



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 21 марта 2006 06:51
· Личное сообщение · #7

VedrusVedrus пишет:
А если по тому адресу уже что-то выполняется, или она заблокирован?


Если выполняется в данный момент, то это наш код(если 1 поток), и мы его можем перенести. Если она заблокирована, так разблокировать.
Если эти куски читает наша программа, то следовательно мы её можем сделать однопоточной. Ели же это вирус какой-то, который из заржённой проги пытается всё это сделать, то надо,что-то с многопоточностью делать.



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

Создано: 21 марта 2006 08:18 · Поправил: Licos
· Личное сообщение · #8

asd
Я имел в виду чтение буфера в HLL (языке программирования - C+, Delphi). Некоторые секции исполняемых файлов содержат rva указывающие на данные - например директория ресурсов и импорта. Так вот, без расчёта относительных смещений (указанных выше) эти данные в буфере не найти Вот я и спрашиваю, можно ли без них обойтись ?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 21 марта 2006 11:13
· Личное сообщение · #9

Конечно можно. Заюзай функцию LoadLibraryEx(lpLibFileName,0,DONT_RESOLVE_DLL_REFERENCES );
Она вернет тебе указатель на буфер. Эта функция эмулирует функцию LoadLibrary, только с тем параметром, что я указал управление программе не передается. Т.е. вроде как exe или dll загрузились, но не выполнелись. Очень удобно, когда дельту неохота считать.

-----
Yann Tiersen best and do not fuck




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

Создано: 21 марта 2006 12:00 · Поправил: Licos
· Личное сообщение · #10

PE_Kill
Указатель то возвращает, но всё ведь тоже самое, буфер находится где то далеко, опять надо дельту считать Т.е. я так понимаю, проги типа Hiew тоже дельту считают для каждого файла ?
А как настроить релоки под выделенную память, если не секрет ?


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


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