Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых) |
![]() |
eXeL@B —› Программирование —› RvaToFileOffset |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 08 августа 2006 13:06 · Поправил: Hellspawn · Личное сообщение · #1 всем известен стандартный метод перевода RVA в offset
но я тут наткнулся на файл, в котором этом метод даёт не правильный результат, как следствие пе-ид пишет "Not a valid PE file", пе-туулз падает с ошибкой, да и пе-едитор не блещет, файл в атаче ![]() ![]() и интересно было бы услышать причину этого, как мне кажется там опять замуты с размером секции и выравниванием... ![]() ----- [nice coder and reverser] ![]() |
|
Создано: 08 августа 2006 13:15 · Поправил: theCollision · Личное сообщение · #2 |
|
Создано: 08 августа 2006 13:15 · Личное сообщение · #3 |
|
Создано: 08 августа 2006 13:20 · Поправил: Hellspawn · Личное сообщение · #4 xShadow пишет: А у меня PEID пишет "nSPack 2.2 -> North Star/Liu Xing Ping" не знаю че у тебя за пе-ид, у меня PEiD 2006 + пробовал голым ![]() theCollision пишет: Out of range ! - ты об этом? Более того, хотел дизасмить точку входа и PE тулз вылетел )) прикольно. Но олли в норме скушала! да об этом... и вообще был задан конкретный вопрос... не надо флейма ![]() ----- [nice coder and reverser] ![]() |
|
Создано: 08 августа 2006 13:24 · Поправил: theCollision · Личное сообщение · #5 |
|
Создано: 08 августа 2006 13:33 · Личное сообщение · #6 я понимаю, что 11 - это слишком мало (0000101B - не попадает в первую секцию), но тут весь замут в выравнивании nt.OptionalHeader.FileAlignment=$200 а оффсет первой секции $110, наверное надо сделать так,
и проверять это для 1-ой секции... хотелось бы выслушать мнение знатоков ПЕ ![]() ----- [nice coder and reverser] ![]() |
|
Создано: 08 августа 2006 13:35 · Поправил: UsAr · Личное сообщение · #7 |
|
Создано: 08 августа 2006 14:08 · Личное сообщение · #8 почитал пару статей и запутался окончательно ![]() SizeOfRawData: DWORD; // Количество инициализирующих данных (помещаемых в // начало секции из исходного файла при ее создании); округлено // вверх до FileAlignment ... FileAlignment: DWORD; // Для любой секции данные, помещаемые в нее, находятся в исходном // файле по смещению, кратному этому числу значит в исходном файле было
а станет
??? чёт совсем мозги от отдыха поплавились ![]() ----- [nice coder and reverser] ![]() |
|
Создано: 08 августа 2006 14:12 · Поправил: UsAr · Личное сообщение · #9 |
|
Создано: 08 августа 2006 14:26 · Поправил: Hellspawn · Личное сообщение · #10 ой точно ![]() ![]() ща провёл эксперименты с файлом ![]() 1) ROffset=0 RSize=200 | файл не запускается 2) ROffset=200 RSize=0 | файл не запускается 3) ROffset=100 RSize=100 | файл запускается и все утилиты с ним работают корректно кто-нить объяснит почему? ----- [nice coder and reverser] ![]() |
|
Создано: 08 августа 2006 14:34 · Поправил: UsAr · Личное сообщение · #11 |
|
Создано: 08 августа 2006 14:37 · Поправил: DrGolova · Личное сообщение · #12 |
|
Создано: 08 августа 2006 15:00 · Личное сообщение · #13 |
|
Создано: 08 августа 2006 15:06 · Личное сообщение · #14 |
|
Создано: 08 августа 2006 15:11 · Личное сообщение · #15 |
|
Создано: 09 августа 2006 11:59 · Личное сообщение · #16 |
|
Создано: 09 августа 2006 22:15 · Поправил: =TS= · Личное сообщение · #17 PE_Kill прикол в том, что у меня в плаге нормально импорты смотрелись во всех WinUpack до этого файла ДОБАВЛЕНО Блин, оказывается по этой ссылке скачался какой-то левый файл ![]() (Это походу NsPack) ДОБАВЛЕНО2 Hellspawn, не путай людей ![]() ----- DREAMS CALL US ![]() |
|
Создано: 09 августа 2006 23:09 · Поправил: Hellspawn · Личное сообщение · #18 =TS= - ты почаще на улицу выходи, проветривайся! иногда помогает.. ![]() вот второй файлик, тут весь подвох с импортами... ![]() ----- [nice coder and reverser] ![]() |
|
Создано: 09 августа 2006 23:12 · Поправил: =TS= · Личное сообщение · #19 |
|
Создано: 10 августа 2006 00:54 · Личное сообщение · #20 |
|
Создано: 10 августа 2006 03:22 · Личное сообщение · #21 |
|
Создано: 10 августа 2006 09:46 · Личное сообщение · #22 |
|
Создано: 10 августа 2006 13:34 · Поправил: Hellspawn · Личное сообщение · #23 |
|
Создано: 10 августа 2006 14:46 · Личное сообщение · #24 насчет 111.exe я попробую ответить RawOffset 1 и 3 секции = 10h. виртуальные же адреса их разные, т.е. одни и те же raw-данные загрузятся по 2 ( или 3, если с учетом загловка) разным адресам (1 и 3 секции). загрузите 111.exe в ольке и сдампите. в дампе будет 3 заголовка (MZ + PE) - первый это родной по смещению 0, второй это 1 секция (10h выровенная до 0) и третий заголовой (RawOffset тоже 10h и выровенный до 0) как быть с импортом? RVA импорта - 000C1EE указывает в правильное место т.е. в 3 секцию, которая загрузится по адресу 000C000 то есть реально в файле импрт лежит так 000C1EE-000C000 (rva последней секции), а не 000001FE как считает PETools например. те.е иначе говоря до тгого как переводить RVA в Offset надо оффсет выровнять в меньшую сторону до 200h вроде так. кажись нигде я не ошибся ![]() |
|
Создано: 10 августа 2006 14:50 · Поправил: Hellspawn · Личное сообщение · #25 BaGiE до этого мы дошли (rvatooffset - универсальный, спасибо за это =TS=), импорт лежит по адресу 1EE, дальше хуже... как писал =TS= Там RVA FirstChunk = 0x857f11e8 =( т.е. надо отбросить часть 0x857f11e8 and 0000FFFF = 11E8 тогда всё более менее норм.. но интересно, как поступает ОС в данном случае? ![]() ----- [nice coder and reverser] ![]() |
|
Создано: 10 августа 2006 15:10 · Личное сообщение · #26 Hellspawn если ты юзаешь CreateFileMapping, то можешь юзать его так: CreateFileMapping(hFile, nil, PAGE_READONLY or SEC_IMAGE, 0, 0, nil); Тогда файл разместится в памяти так как если бы его грузил виндовый лоадер. Тогда функции типа OffsetToRva не понадобятся и ты получишь нормальный файл. Но тогда тебе чувствую много придется переписывать. Но может это стоит того? Я столкнулся с примерно такой же ситуацией, когда проект был написан на 50%. Но я решился на переделку, исправлял всё за 3 дня но теперь я абсолютно доволен. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 10 августа 2006 15:11 · Личное сообщение · #27 |
|
Создано: 10 августа 2006 15:19 · Поправил: UsAr · Личное сообщение · #28 |
|
Создано: 10 августа 2006 15:19 · Личное сообщение · #29 а потому что FirstChunk в этом файле не dword а word. те.е старшая часть слова 0x857f11e8! ,те. эти тупые 0x857fxxxx на диске указываеют в другую секцию!!!! т.е. они являеются ДРУГОЙ секцией а когда файл загрузится то загрузчик грузит тока этот word, а не весь dword т.к. секция уже закончилась и понятно что в памяти будет не 0x857f11e8, а 0x000011E8!!! ![]() |
|
Создано: 10 августа 2006 15:20 · Поправил: Hellspawn · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Программирование —› RvaToFileOffset |