|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 2, 2004 08:48:03 Решил разобрать PE формат и для примера взял исходник sectionAdd. У меня возникло пару вопросов, если можно помогите: когда добавляется секция, добавляется ещё одна Object Entry, причём по смещению Num_of_Objects*28h Кто сказал, что там не кому не нужных 28h байт ? |
|
|
Дата: Сен 2, 2004 11:35:27 Сначала смотришь есть ли в section table свободное место, потом рассчитываешь параметры секции (выравнивание считаешь, адреса и все такое), потом перемапливаешь файл в соответствии с новым размером, а уж потом прибавляешь в заголовке 1 в количестве секций, пишешь в section table новую запись и про SizeOfImage не забудь |
|
|
Дата: Сен 2, 2004 13:25:24 28h - это размер Object Entry, тоесть последний свободный оффсет так и считается Num_of_Objects*28h (тут написано умножить а не плюс =) |
|
|
Дата: Сен 3, 2004 07:10:34 Попробовал я такой "последний свободный оффсет" для taskmgr.exe и оказался он не таким уж и свободным, попробуй сам, советую ! |
|
|
Дата: Сен 3, 2004 10:43:13 вот только что смотрел на этот таск менеджер... ну так там с секциями накручено :) VirtualSize (то бишь реальное количество полезных данных в секции) больше чем размер секции на диске... а еще там в конце оверлей есть |
|
|
Дата: Сен 3, 2004 10:53:56 что с оверлеем, что без него один результат ругается, что не может библиотеку найти. кажется, что новая запись что-то затирает. |
|
|
Дата: Сен 3, 2004 11:33:12 · Поправил: sep хе-хе :) у них вобщем какого-то хм... ну вобщем таблица импорта (часть таблицы) находится в свободном месте таблицы секций. может кто-нибудь из знающих расскажет, что это за прием такой ? P.S. все сказанное про taskmgr.exe [w2k sp4] |
|
|
Дата: Сен 3, 2004 13:45:44 sep может кто-нибудь из знающих расскажет, что это за прием такой ? Так вроде у Касперски http://www.wasm.ru/article.php?article=h2000_05 описан взлом программы с хитрыми секциями. |
|
|
Дата: Сен 3, 2004 14:09:53 · Поправил: Dr.Golova > VirtualSize (то бишь реальное количество полезных > данных в секции) больше чем размер секции на диске... Было бы удивительно, если бы размер выделяемой памяти под секцию был меньше чем данных на диске =) > а еще там в конце оверлей есть А в нем конечно же путь до файла с отладочной инфой > у них вобщем какого-то хм... ну вобщем таблица импорта > (часть таблицы) находится в свободном месте таблицы > секций. Это называется Bound Import Directory, так штааа делаешь PE->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].V irtualAddress = 0; PE->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].S ize = 0; И преспокойно пишешь новый заголовок секции поверх этого крэпа. |
|
|
Дата: Сен 3, 2004 14:53:31 И преспокойно пишешь новый заголовок секции поверх этого крэпа. и вовсе это не крэп, MS в свои системные бинарники везде bound import напихала(типа быстрее грузиться будут?) |
|
|
Дата: Сен 4, 2004 04:13:47 > Кто сказал, что там не кому не нужных 28h байт ? никто ;) хотя обычно свободное место там есть, поскольку стартовый адрес первой секции на диске должен быть выровнен на 200h байт, а стандартный заголовк занимает чуть-чуть больше 200h байт, то в ~90% файлах мы имеем поряка 200h байт халявного пространства, но встречаются и исключения. надо проверить, что SizeOfHeaders располагает к внедрению и что здесь находятся одни нули, в противном случае лучше отказаться от внедрения > что с оверлеем, что без него один результат ругается, > что не может библиотеку найти. кажется, что новая > запись что-то затирает. здесь расположена таблица BOUND IMPORT'а (кстати, подробно описанная мной в стаье по PE-формату, опубликованной в одном из последних номеров "системного администратора"). решение - либо пененести BOUND IMPORT на любое свободное место, либо прибить его нахер. работать будет и без него, только файл будет грузиться чуть-чуть дольше. даже когда оверлей есть, то можно смело дописываться в его конец, при условии что ImageSize будет расчитан верно (оверлей будет болтаться в памяти) > Было бы удивительно, если бы размер выделяемой памяти > под секцию был меньше чем данных на диске =) и такое встречается ;) ситуацию с размером равным нулю мы рассматривать не будем, т.к. тут все понятно (если размер выделяемой памяти равен нулю, берем размер секции на диске, выравнивая его до OA). лучше возьмем оверлей, расположенный в середине файла ;) |
|
|
Дата: Сен 4, 2004 04:19:18 kaspersky > при условии что ImageSize будет расчитан верно (оверлей будет болтаться в памяти) А когда это оверлей в память грузился? |
|
|
Дата: Сен 4, 2004 09:54:23 · Поправил: sep Asterix А когда это оверлей в память грузился? когда нужным образом заголовок подправить :) kaspersky вот все вспоминаете про сей чудесный журнал, а найти его где ? и вот как раз эта статья интересует |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.050 |