Сейчас на форуме: Rio, ==DJ==[ZLO], Dart Raiden, Alf (+6 невидимых)

 eXeL@B —› Основной форум —› Смещение в файле EP
Посл.ответ Сообщение

Ранг: 11.9 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 28 сентября 2004 11:02
· Личное сообщение · #1

Добрый день. Может кто-нибудь подскажет, как можно узнать сабж, как вычислить этот адрес, из каких параметров он складывается? (Та EP что в заголовке + ImageBase) дают адрес в памяти, а как в файле узнать - непонятка...



Ранг: 384.1 (мудрец)
Активность: 0.250
Статус: Участник
www.int3.net

Создано: 28 сентября 2004 11:06
· Личное сообщение · #2

Igit32
Тебе нужно доку по РЕ файлам почитать:
www.wasm.ru/docs/2/pe_docs.zip

-----
Подписи - ЗЛО! Нужно убирать!





Ранг: 536.4 (!), 171thx
Активность: 0.660.13
Статус: Администратор
Создатель CRACKL@B

Создано: 28 сентября 2004 11:19
· Личное сообщение · #3

Это из моего старого "FAQ":
---
Как найти EP место в файле, назовем этот адрес REP. Берем наш экзешник. Читаем по адресу 3Ch dword число - это адрес заголовка PE, прибавляем к этому числу 28h и читаем по получившемуся адресу снова dword (это будет виртуальный адрес EP (VEP) (без imagebase). Далее.. ой, блин проще написать самому этот патчер... Кароче надо перебрать атрибуты всех секций (длина заголовка секции - 28h), число секций хранится по адресу заголовка PE+6, надо считать word. Теперь нужен адрес заголовка первой секции: его получаем складывая адрес заголовка PE, константу 18h и word по адресу (адрес заголовка PE+14h). Теперь читаем атрибуты первой секции: нам нужен будет VOffSet(0Ch), VSize(08h), Roffset(14h). В скобках указаны смещения относительно адреса заголовка этой секции, читать каждый раз dword. А потом определяем, физический адрес EP (REP). Если (VEP - VOffset < VSize) and (VEP - VOffset >= 0) тогда наш REP = VEP - VOffset + Roffset, а если нет, то надо искать REP в следующих секциях.

Вот так все хитро. Можно написать и проще, но в этом случае могут быть ошибки при поиске EP Offset (REP). Может кто знает как проще REP искать, так мне было бы интересно. Хотя вот хитрый способ: можно грабить из PEiD’a, а потом его принудительно закрывать, хотя алогритмец то там такой же будет (я имею ввиду в самом Peid).

-----
Всем не угодишь




Ранг: 18.1 (новичок)
Активность: 0.010
Статус: Участник

Создано: 28 сентября 2004 11:24
· Личное сообщение · #4

можно сделать например так:
invoke MapViewOfFile,fmaping,FILE_MAP_READ,0,0,0
mov map,eax

invoke ImageNtHeader,map
mov image,eax

invoke ImageRvaToSection,image,fmaping,EP; тут EP виртуальный
assume eax: PTR IMAGE_SECTION_HEADER
mov edx,EP
sub edx,[eax].VirtualAddress
add edx,[eax].PointerToRawData
mov EP,edx ; а тут уже становится смещением




Ранг: 536.4 (!), 171thx
Активность: 0.660.13
Статус: Администратор
Создатель CRACKL@B

Создано: 28 сентября 2004 11:30
· Личное сообщение · #5

да, на асме проще получается.

-----
Всем не угодишь



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


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