![]() |
eXeL@B —› Основной форум —› Загрузчик для NsPack / WinUpack? |
Посл.ответ | Сообщение |
|
Создано: 20 апреля 2006 23:24 · Личное сообщение · #1 Вопрос такой: как ОС Windows загружает файлы упакованные этими упаковщиками в память? Любой дизассемблер интерпритирует команду по OEP (согласно первой секции), а если загрузить в отладчик, то по адреса первой секции располагаются все заголовки файла и т.п. Почему после загрузки меняется содержимое первой секции на содержимое заголовков, короче что по адресам 0x400000 - 0x401000? ![]() |
|
Создано: 20 апреля 2006 23:30 · Личное сообщение · #2 Мда, а причём тут Winupack и NsPack? mag3d пишет: Любой дизассемблер интерпритирует команду по OEP (согласно первой секции), а если загрузить в отладчик, то по адреса первой секции располагаются все заголовки файла и т.п. Ничего не понял.... mag3d пишет: Почему после загрузки меняется содержимое первой секции на содержимое заголовков, короче что по адресам 0x400000 - 0x401000? Содержимое первой секции меняется??? Заголовок загружается там где ImageBase, а секция загружается в ImageBase + Virtual Offset этой секции ![]() |
|
Создано: 20 апреля 2006 23:31 · Поправил: Hellspawn · Личное сообщение · #3 догадался интуитивно, что хочет чел... ![]() тут в одной тема промелькнуло вот что, цитата (PE_Kill): Он (WinUpack) как то заставляет лоадер грузить секцию не с офсета 10, а с 0. Т.е. прямо с начала файла. Это легко проверить, если прокрутить секцию в отладчике вверх, то увидим сигнатуру "MZ", тогда, как в хекс редакторе там "PE". Походу это из-за File Aligment =200, т.е. минимальный RAW Offset =200, а первая секция = 10. И лоадер грузит её с ближайшего, выравненого на 200h байт офсета надеюсь тебе поможет... ----- [nice coder and reverser] ![]() |
|
Создано: 20 апреля 2006 23:40 · Личное сообщение · #4 Походу это из-за File Aligment =200, т.е. минимальный RAW Offset =200, а первая секция = 10. И лоадер грузит её с ближайшего, выравненого на 200h байт офсета Не совсем так: он грузит правильно заголовки, а затем в первую секцию грузит опять полностью все заголовки заголовки, а не с 200h. Или я не понял твоего ответа? ![]() |
|
Создано: 20 апреля 2006 23:50 · Поправил: arnix · Личное сообщение · #5 А, теперь понял твой вопрос, щас обясню, посмотри на значение Real Offset первой секции. Видишь, очень маленькое число (< 200), а так как File Alignment = 200 то это число принимается как 0, вот и первая секция и есть заголовок. Тойть заголовок грузится как заголовок в 400000 (ImageBase) и как первая секция в 401000. (ImageBase + Virtual Offset) ![]() |
|
Создано: 20 апреля 2006 23:55 · Поправил: Hellspawn · Личное сообщение · #6 |
|
Создано: 20 апреля 2006 23:59 · Поправил: arnix · Личное сообщение · #7 |
|
Создано: 21 апреля 2006 00:06 · Личное сообщение · #8 Большое спасибо за помощь, тем не менее что я не до понимаю: В этих файлах некорректно поле PointerToRawData - оно меньше File Alignment а в документации по PE написано, если такая ситуация, то округлять в большую сторону. По-моему и Крис Касперски, это тоже подтверждает в книге "Техника отладки ..." стр. 711 Где косяк то? Но твоя идея скорее всего правильная ! ![]() |
|
Создано: 21 апреля 2006 00:10 · Поправил: arnix · Личное сообщение · #9 Блин я всё перепутал ![]() Проверил, оказалось зависит не от Section Alignment а от File Alignment, так что то что написано сверху можно переформулировать вот так: число округляется до File Alignment. Тойсть если File Alignment равно 200 то любое число меньше 200 примется как 0, а от 200 до 399 - как 200, и так далее. ![]() |
|
Создано: 21 апреля 2006 00:10 · Личное сообщение · #10 Я сейчас открыл файл упакованный NsPack-ом, там некорректно поле PointerToRawData - оно меньше File Alignment цитата (PE_Kill): Походу это из-за File Aligment =200, т.е. минимальный RAW Offset =200, а первая секция = 10. И лоадер грузит её с ближайшего, выравненого на 200h байт офсета. Может ошибается все же Касперский, тем не менее в книге он приводит макросы из winnt.h ![]() |
|
Создано: 21 апреля 2006 00:17 · Личное сообщение · #11 |
|
Создано: 21 апреля 2006 00:23 · Личное сообщение · #12 |
![]() |
eXeL@B —› Основной форум —› Загрузчик для NsPack / WinUpack? |