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

 eXeL@B —› Вопросы новичков —› Где начало оверлея
<< . 1 . 2 .
Посл.ответ Сообщение

Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 08 мая 2016 15:38 · Поправил: Kuzya69
· Личное сообщение · #1

Есть жертва - ехе-файл с оверлеем. Но в этом файле, на диске, за границей последней секции располагается сначала таблица сертификатов, а уже следом идет этот оверлей (добавленный байт-код). Я пересобрал длл которую грузит программа-жертва. Длл должна вычитывать оверлей из запускаемого файла. И по таблице, которая хранится в оверлее программы-жертвы, модифицировать код программы-жертвы. То-есть длл не меняется, а оверлей я могу писать разный под свои нужды в саму программу любой версии.
Вопрос.
Всегда-ли таблица сертификатов является заключетельными байтами ехе-файла (имеется ввиду файл, только что скомпилированный, пока еще не приписали байты нового оверлея)?
Или какой правильный порядок поиска начала оверлея в файле?



Ранг: 16.3 (новичок), 2thx
Активность: 0.030
Статус: Участник

Создано: 09 мая 2016 02:23
· Личное сообщение · #2

DenCoder пишет:
И? У Вас код аналогичен

Да неужели? ) Вот для вычисления фактической длины eof это и используется в последствии.




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

Создано: 09 мая 2016 15:12
· Личное сообщение · #3

dosprog пишет:
Так это и есть последняя секция, описанная заголовке.

С точки зрения смещений в файле если, то они не обязаны идти по порядку. Но если имелось в виду в образе - то да, последняя секция ориентируется по VirtualAddress.

DenCoder пишет:
Ну может чего подзабыл, завтра посмотрю

Вообще говоря, интересно... на моём компе файл маппится полностью вне зависимости от манипуляций с размерами секций... Раньше был других представлений...

Добавлено спустя 22 минуты
VT-x пишет:
Да неужели? ) Вот для вычисления фактической длины eof это и используется в последствии.

1) Зачем писать
Code:
  1. = c;
  2. = f(a);
  3. if(!= b) d = a;
???

То же самое, что и
Code:
  1. if(!= b) a = b;


Понятно, что если a == b, то a не трогаем, поскольку подразумевается, что оно должно быть равно тому, чему приравниваем, если оно не равно... Познакомьтесь, вот так вот и пишут индусы

2) первоначального приравнивания d не было! И случая else не было!... Но это мелочи... без которых вылетит на ассерте ваша прога!

VT-x пишет:
фактической длины eof

Для вычисления фактической длины eof... Я не знаю, что Вы имели в виду, но фактическую длину файла можно узнать функцией или GetFileSize(), или SetFilePointer(hFile, 0, NULL, FILE_END), ну или уже функцией fstat(), что как раз из той области, откуда, видимо, Вы и вспомнили про eof. eof - это End Of File - конец файла, в линукс-совместимых функциях чтение файла производится, пока функция eof(fd) не вернёт 1

-----
IZ.RU



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


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