eXeL@B —› Вопросы новичков —› Где начало оверлея |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 08 мая 2016 15:38 · Поправил: Kuzya69 · Личное сообщение · #1 Есть жертва - ехе-файл с оверлеем. Но в этом файле, на диске, за границей последней секции располагается сначала таблица сертификатов, а уже следом идет этот оверлей (добавленный байт-код). Я пересобрал длл которую грузит программа-жертва. Длл должна вычитывать оверлей из запускаемого файла. И по таблице, которая хранится в оверлее программы-жертвы, модифицировать код программы-жертвы. То-есть длл не меняется, а оверлей я могу писать разный под свои нужды в саму программу любой версии. Вопрос. Всегда-ли таблица сертификатов является заключетельными байтами ехе-файла (имеется ввиду файл, только что скомпилированный, пока еще не приписали байты нового оверлея)? Или какой правильный порядок поиска начала оверлея в файле? |
|
Создано: 08 мая 2016 15:52 · Личное сообщение · #2 |
|
Создано: 08 мая 2016 15:55 · Личное сообщение · #3 |
|
Создано: 08 мая 2016 15:57 · Поправил: Kuzya69 · Личное сообщение · #4 Меня больше не оверлей волнует. А как определить конец файла без учета оверлея. По сути, из определения самого оверлея, получается, что таблица сертификатов это тоже оверлей. Вот и интересует, как мне создать алгоритм, который может отделить только добавленные мной байты, от байт созданных компиллятором. dosprog пишет: по его сигнатуре. Думал я об этом, чтоб создать сигнатуру, но боюсь, что вдруг сигнатура встретится в той-же самой таблице сертификатов. Если начинать искать оверлей после последней секции. Или в моем-же байт-коде, если вести поиск сигнатуры с конца файла. |
|
Создано: 08 мая 2016 16:08 · Личное сообщение · #5 Kuzya69 пишет: как определить конец файла Может, не конец файла, а конец образа? Kuzya69 пишет: Вот и интересует, как мне создать алгоритм, который может отделить только добавленные мной байты, от байт созданных компиллятором. Смотрите по концу последней секции в хидере Kuzya69 пишет: Если начинать искать оверлей после последней секции. Ну правильно ж мыслите. Что, тоже скучно? Добавлено спустя 3 минуты Пока тему не закрыли... не грамотен в терминах, поэтому - а что-то вроде "миддлвея" как называется? ----- IZ.RU |
|
Создано: 08 мая 2016 16:12 · Поправил: dosprog · Личное сообщение · #6 Kuzya69 пишет: Думал я об этом, чтоб создать сигнатуру, но боюсь, что вдруг сигнатура встретится в той-же самой таблице сертификатов. Если начинать искать оверлей после последней секции. Во-первых, не встретится, если сигнатуру выбирать старательно, а во-вторых, ищется она не с конца последней секции вперёд, а с конца файла и назад. Тогда неожиданностей не будет. |
|
Создано: 08 мая 2016 16:13 · Поправил: Kuzya69 · Личное сообщение · #7 DenCoder пишет: Может, не конец файла, а конец образа? Какой конец образа? Оверлей-же не проецируется в память, приходится маппировать файл в память, и смотреть его побайтно как файл. DenCoder пишет: Смотрите по концу последней секции в хидере Я же писал, сразу за последней секцией идет сначала таблица сертификатов, а уже потом мой оверлей. DenCoder пишет: Ну правильно ж мыслите. Что, тоже скучно? Ну а тут я совсем не понял. dosprog пишет: а во-вторых, ищется она не с конца последней секции вперёд, а с конца файла и назад. Тогда неожиданностей не быват. Ну я это и подразумевал, слова не те выбрал, я хотел написать "секции в файле" (а не секции в образе). Или если имелось ввиду направление поиска, то именно так я и думал. Конец файла, это же конец его последней секции в файле? dosprog пишет: Во-первых, не встретится, если сигнатуру выбирать старательно, Ну, например, можно показать гарантированный вариант, который не может встретиться в коде программы? Я думал о стринге "overlay", но все равно не уверен на 100%. |
|
Создано: 08 мая 2016 16:23 · Поправил: dosprog · Личное сообщение · #8 |
|
Создано: 08 мая 2016 16:32 · Личное сообщение · #9 |
|
Создано: 08 мая 2016 16:46 · Поправил: vden · Личное сообщение · #10 Kuzya69 пишет: за границей последней секции располагается сначала таблица сертификатов, а уже следом идет этот оверлей Фактически сертификат в оверлее. Но тут все просто. В data directories явно указано файловое смещение сертификата, не RVA, и размер (IMAGE_DIRECTORY_ENTRY_SECURITY). Складываете смещение + размер = нужное смещение. Если сертификата нет, тогда оверлей по смещению конца raw data последней не пустой секции. | Сообщение посчитали полезным: DenCoder |
|
Создано: 08 мая 2016 16:48 · Поправил: dosprog · Личное сообщение · #11 |
|
Создано: 08 мая 2016 17:00 · Поправил: Kuzya69 · Личное сообщение · #12 vden пишет: Фактически сертификат в оверлее. Но тут все просто. В data directories явно указано файловое смещение сертификата, не RVA (IMAGE_DIRECTORY_ENTRY_SECURITY). Складываете смещение + размер = нужное смещение. Это все понятно. Именно так я и определил, что там таблица сертификата, а не оверлей левый. А если вариант, что сертификат перенесут в середину файла, или еще какой-нибудь элемент добавят в data directories? Я так и не нашел полного описания всех элементов в data directories. Только стандартные 0х10 штук. А если "NumberOfRvaAndSizes" будет больше 0х10? |
|
Создано: 08 мая 2016 17:01 · Личное сообщение · #13 Kuzya69 пишет: Я думал о стринге "overlay", но все равно не уверен на 100%. А в чем проблема ? Открылся файл с атрибутом для чтения, например.Считали его размер, определили некоторую переменную, в которую записали размер.Читаем в цикле файл, уменьшая значение этой переменной, т.е. абсолютное смещение.Определили условие для нахождения строки "overlay" и как только смещение укажет на нужную строку, т.е. в буфер упадет нужная строка фиксированного размера в байтах (искомая сигнатура), то сразу прерываем цикл и сохраняем смещение в другую переменную.Ну и, естественно, строка встретится ровно столько раз, сколько она была определена в файле, а вот строки "DoSpRoG" там никогда не будет, если ее намеренно не вписать. ----- TEST YOUR MIGHT |
|
Создано: 08 мая 2016 17:10 · Поправил: vden · Личное сообщение · #14 Kuzya69 пишет: Это все понятно. А если вариант, что сертификат перенесут в середину файла, или еще какой-нибудь элемент добавят в data directories? Я так и не нашел полного описания всех элементов в data directories. Только стандартные 0х10 штук. А если "NumberOfRvaAndSizes" будет больше 0х10? Ну тогда лучше не гадать, а посмотреть как оригинальная программа ищет оверлей. |
|
Создано: 08 мая 2016 17:15 · Личное сообщение · #15 vden пишет: А возможности посмотреть как находит оверлей оригинальная программа нет? Ну оригинальная программа не ищет оверлея. Оверлей Я хочу прилеплять, без раздумий. Только нет уверенности, что на очередной версии недоделанный алгоритм поиска оверлея не даст сбой. Поэтому и хочется сделать нормальный, универсальный алгоритм поиска оверлея. Не задумываясь потом, может даже не только для этой программы. |
|
Создано: 08 мая 2016 17:25 · Поправил: vden · Личное сообщение · #16 |
|
Создано: 08 мая 2016 17:31 · Личное сообщение · #17 |
|
Создано: 08 мая 2016 17:39 · Личное сообщение · #18 |
|
Создано: 08 мая 2016 17:40 · Поправил: vden · Личное сообщение · #19 |
|
Создано: 08 мая 2016 18:15 · Поправил: Kuzya69 · Личное сообщение · #20 Hellspawn пишет: https://www.autoitscript.com/forum/topic/153277-pe-file-overlay-extraction/ Ну в принципе я это спрашивал в самом первом посту. Автор скрипта делает допущение, что последние байты оригинального файла - это конец сертификата. Так и я делаю. Но гложат сомнения, поэтому и открыл тему. Если бы где-то это правило о конце файла было прописано как закон, то я бы не спрашивал. Ведь никто не помешает мне изменить файл так, что свой оверлей я поставлю сразу за последней секцией файла, а сертификат после оверлея. Или сертификат поставить между секциями(тут я конечно не уверен). Но можно будет попробовать на какой-нибудь простенькой программе. |
|
Создано: 08 мая 2016 18:29 · Личное сообщение · #21 Kuzya69 и что это меняет? если сертификат будет, то о нем должно быть упоминание в таблице, а там и размер и адрес указаны ----- [nice coder and reverser] | Сообщение посчитали полезным: Rio |
|
Создано: 08 мая 2016 18:40 · Личное сообщение · #22 Hellspawn пишет: и что это меняет? Ну да поторопился с придумыванием конфликтной ситуации. Пожалуй только одна ситуация может конфликт дать. Например количество элементов в data directories будет больше 0х10. И мы не знаем какие параметры для этих (больших чем 0х10) элементов заданы (VA или Rwa). И оказывается, что один из элементов стоит за сертификатом. |
|
Создано: 08 мая 2016 20:51 · Поправил: DenCoder · Личное сообщение · #23 Kuzya69 пишет: Какой конец образа? Оверлей-же не проецируется в память мда... Go to school! Краткий ликбез: Файлы - на диске Образ (исполняемый, будь то dll, exe, ocx, scr, или ещё что) - проецируется nt-загрузчиком в память процесса по разделам. За границы разделов, указанные в массиве структур IMAGE_SECTION_HEADER, не выходит. У MapViewOfFile()/ есть аргумент dwDesiredAccess, когда он FILE_MAP_EXECUTE, то происходит именно так, как я сказал. У более низкоуровневой ZwCreateSection(), которой пользуется загрузчик, также есть dwDesiredAccess, и происходит то же, что выше, когда он равен SECTION_MAP_EXECUTE Добавлено спустя 2 минуты Kuzya69 пишет: Но гложат сомнения, поэтому и открыл тему. При сомнениях проще взять и проверить! Добавлено спустя 5 минут Kuzya69 По оверлею простой эксперимент с идой - поставьте на загрузке exe или dll галку на manual load и везде отвечаете "да", пока ида не спросит Вас, нужно ли грузить оверлей. Ильфаку-то поверите? ) Добавлено спустя 19 минут Kuzya69 пишет: Например количество элементов в data directories будет больше 0х10 Оно никогда на винде не будет больше! Потому как в WinNt.h прописано Code:
Ладно, если б не было документировано, понятно ещё - что ж делать, надо спрашивать... Но это всё уже давным давно открыто... 2004 год. Мне было интересно узнать формат PE Header'а, интернета не было. Съездил на книжный рынок, купил книгу Румянцева "Исследование программ Win32. До дизассемблера и отладчика." А Вы тут пурги нагнали с вагон!!! ----- IZ.RU | Сообщение посчитали полезным: Kuzya69 |
|
Создано: 08 мая 2016 21:10 · Поправил: VT-x · Личное сообщение · #24 Kuzya69 Разве сертификат не станет не валидным, если вы файл измените в том же EOF? Оверлей обычно так смотрю Code:
|
|
Создано: 08 мая 2016 21:19 · Личное сообщение · #25 |
|
Создано: 08 мая 2016 21:29 · Личное сообщение · #26 |
|
Создано: 08 мая 2016 21:32 · Поправил: DenCoder · Личное сообщение · #27 Да, и, кстати, про VirtualSize не забывайте, оно никогда не выровнено по границе. И всё, что свыше VirtualSize, не загрузится ) Добавлено спустя 4 минуты VT-x пишет: Просто очень часто школоло поделки попадают на вход в крипт с noaligned EOF И? У Вас код аналогичен Code:
Внимательней посмотрите Добавлено спустя 58 минут Проще говоря правильней будет Code:
Добавлено спустя 59 минут Если не прав - поправьте. Добавлено спустя 1 час 3 минуты Длина оверлея будет: Code:
Добавлено спустя 1 час 6 минут Я забыл, что в файлах, накрытых вмпротом, например, не факт, что именно за последней секцией будет оверлей. Правильней будет сказать - за секцией с максимальным конечным адресом ----- IZ.RU |
|
Создано: 08 мая 2016 23:14 · Личное сообщение · #28 DenCoder поправляю, при чем тут VirtualSize вообще?))) и к последней секции не имеет смысла цепляться, нужно перечислить все. ну и выравнивание учесть желательно для размера. вот код https://www.strchr.com/creating_self-extracting_executables Code:
----- [nice coder and reverser] | Сообщение посчитали полезным: DenCoder |
|
Создано: 09 мая 2016 00:16 · Личное сообщение · #29 |
|
Создано: 09 мая 2016 01:47 · Поправил: dosprog · Личное сообщение · #30 Kuzya69 пишет: То-есть получается, нет никакой возможности определить где заканчивается оригинальный файл и начинается оверлей в общем случае? Как это - "нет способов?" Конец последней секции, описанной в заголовке, это и есть начало оверлея. Что-то, гляжу, обсуждение по кругу пошло. DenCoder пишет: Я забыл, что в файлах, накрытых вмпротом, например, не факт, что именно за последней секцией будет оверлей. Правильней будет сказать - за секцией с максимальным конечным адресом Так это и есть последняя секция, описанная заголовке. Kuzya69 пишет: Ну оригинальная программа не ищет оверлея. Оверлей Я хочу прилеплять, без раздумий. Возня с оверлеями это костыльный вариант. Впрочем, если сделать всё по уму, то работать будет. |
. 1 . 2 . >> |
eXeL@B —› Вопросы новичков —› Где начало оверлея |