File Location Calculator 1.4
Скриншот программы File Location Calculator
Программа File Location Calculator предназначена для расчета и конвертирования файлового смещения, Virtual Address (VA) и Relative Virtual Address (RVA) в исполняемых файлах формата x86. В отличие от имеющихся аналогов, калькулятор корректно работает даже с поврежденными или хитро упакованными файлами. File Location Calculator не использует стандартные функции API типа ImageRvaToVa, самостоятельно разбирая структуру файла. Для VA можно сразу же поискать перекрестные ссылки, то есть адреса, которые ссылаются на этот участок памяти. Также в комплекте есть плагин flc.dll для анализаторов исполняемых файлов PEiD, Bit Detector, DiE, SCANiT, ExeScan, FastScanner, PE Tools и других утилит, поддерживающих этот формат плагинов. Калькулятор был написан, когда я столкнулся с печальным фактом, что ВСЕ существующие инструменты выполняют расчеты с ошибками. Даже такие именитые, как HIEW, CFF Explorer, PETools, для всех них я нашел абсолютно корректные PE-файлы и значения, на которых они обламываются. Мой File Location Calculator все считает правильно.
File Location Calculator 1.4 + Plugin для анализаторов файлов
File.Location.Calculator.1.4-PCL.zip (35,509 bytes)
File.Location.Calculator.1.4-PCL.zip (35,509 bytes)
Просмотров: 23728 | Комментариев: 75
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(11.04.2020 в 10:24):
Все-таки не соглашусь. По своему опыту использования, адрес обычно подразумевает, что там будут выполняться какие-то действия, например, патчинг файла или памяти. То есть блок Адрес+N байт. Какие там будут VA/RVA у следующих байтиков - это уже не особо важно, на крайняк можно в уме посчитать. Следующий блок в большинстве случаев будет уже в совершенно другом месте файла, до которого крутить колесиком, да еще с точным попаданием, просто замахаешься.
RVA
(11.04.2020 в 05:13):
Калькулятор просто шикарен! Единственный момент: было бы очень удобно иметь возможность инкремента и декремента значений адреса, например, по колёсику мыши и/или по клавишам Up/Down или Left/Right, с автоматическим обновлением. А то получается лишь "один адрес за один раз" :(
ManHunter
(21.04.2019 в 00:59):
Качай браузером и будет счастье.
Anatoly
(20.04.2019 в 23:46):
Архив поврежден и не открывается.
ManHunter
(29.11.2016 в 07:54):
С тех пор ничего не изменилось, и не планируется.
Metabolic
(29.11.2016 в 01:36):
Будет ли поддержка файлов x64?
user
(16.02.2016 в 14:12):
Вот, вспомнилось, кстати, - типичный случай с правками "хвостов" -
exelab.ru/f/index.php?action=vthread&forum=3&topic=13687&p age=11#10
(См. в том посте "--Добавлено--")
- Сейчас то последний пост в теме. Дата 9 ноября 2015 08:05:10
exelab.ru/f/index.php?action=vthread&forum=3&topic=13687&p age=11#10
(См. в том посте "--Добавлено--")
- Сейчас то последний пост в теме. Дата 9 ноября 2015 08:05:10
user
(01.12.2015 в 17:44):
--Добавлено--
Кстати, снова вопросы к загрузчику PE в системе. Нынешние ОС, точно включая XP, размещают в памяти запускаемой программы все страницы секции, физически находящиеся в PE-файле, вместе с заполнителями "хвостов". Если в какой-то из последующих версий ОС адгоритм работі загрузчика станет подобен алгоритму упаковщика UPX, то файлы с правками на месте нулей-заполнителей (выравнивающих секцию по страниуе) окажутся неработоспособны.
Впрочем, пока это только предположение.
Кстати, снова вопросы к загрузчику PE в системе. Нынешние ОС, точно включая XP, размещают в памяти запускаемой программы все страницы секции, физически находящиеся в PE-файле, вместе с заполнителями "хвостов". Если в какой-то из последующих версий ОС адгоритм работі загрузчика станет подобен алгоритму упаковщика UPX, то файлы с правками на месте нулей-заполнителей (выравнивающих секцию по страниуе) окажутся неработоспособны.
Впрочем, пока это только предположение.
user
(01.12.2015 в 17:31):
Ну, нет так нет.
Траблы с правками в "хвостах" могут возникать только после запаковки и последующей распаковки файла упаковщиками, например, UPX-ом или PECOmpact'ом.
При запаковке упаковщики включают в упакованный код секции только те данные, которые попали в диапазон (FileOffset)...(FileOffset + VirtualSize).
В принципе, это логично. Но таким образом данные из "хвоста", где обычно нули-заполнители для выравнивания по странице, - эти данные не попадают в запаковываемый код. И, естественно, их не оказівается при распаковке секции на их прежнем месте.
Вот если бы они (упаковщики) забирали все данные из диапазона (FileOffset)...(FileOffset + PHISICALlSize), тогда бы не возникло и самой постановки вопроса с этими "хвостами" секций.
Натыкался многократно на эту неприятность.
Раньше я после всяких врезок для проверки тут же паковал-распаковывал файл UPX'ом - если всё работало, тогда моя врезка в "хвост" не попала.
Сейчас я использую новую утиль CMP32.EXE, с помощью которой всё равно протоколирую изменения, - и она мне сразу сообщает о таких стрёмных патчах, если они встречаются (это из этой утилиты была взята та процедурка для ребилда FLC 1.4.0.4).
Ну, в общем такие вот мысли возникли по этому поводу.
Траблы с правками в "хвостах" могут возникать только после запаковки и последующей распаковки файла упаковщиками, например, UPX-ом или PECOmpact'ом.
При запаковке упаковщики включают в упакованный код секции только те данные, которые попали в диапазон (FileOffset)...(FileOffset + VirtualSize).
В принципе, это логично. Но таким образом данные из "хвоста", где обычно нули-заполнители для выравнивания по странице, - эти данные не попадают в запаковываемый код. И, естественно, их не оказівается при распаковке секции на их прежнем месте.
Вот если бы они (упаковщики) забирали все данные из диапазона (FileOffset)...(FileOffset + PHISICALlSize), тогда бы не возникло и самой постановки вопроса с этими "хвостами" секций.
Натыкался многократно на эту неприятность.
Раньше я после всяких врезок для проверки тут же паковал-распаковывал файл UPX'ом - если всё работало, тогда моя врезка в "хвост" не попала.
Сейчас я использую новую утиль CMP32.EXE, с помощью которой всё равно протоколирую изменения, - и она мне сразу сообщает о таких стрёмных патчах, если они встречаются (это из этой утилиты была взята та процедурка для ребилда FLC 1.4.0.4).
Ну, в общем такие вот мысли возникли по этому поводу.
ManHunter
(30.11.2015 в 23:27):
Посмотрел поподробнее. "Хвост секции" поглощается при выравнивании и становится полноценной составляющей секции. У тебя в проверке выравнивание не учитывается, что не есть правильно, мне тут уже в камментах на это указали. Так что доработок все-таки не будет.
user
(21.11.2015 в 16:34):
..хотя, конечно, врезка по всем параметрам значительно надёжней ребилда.
user
(21.11.2015 в 16:12):
)) спс.
Труд на удивоение небольшой - на всё-про-всё ушло пару часов.
И то - пытался вначале сделать врезку, но потом решил не заморачиваться и применил тотальный подход.
Прога аккуратно написана - с такими обычно нет проблем.
Труд на удивоение небольшой - на всё-про-всё ушло пару часов.
И то - пытался вначале сделать врезку, но потом решил не заморачиваться и применил тотальный подход.
Прога аккуратно написана - с такими обычно нет проблем.
ManHunter
(21.11.2015 в 15:59):
Не лень же было дизасмить это все. Ну при таком раскладе доделаю предупреждение, раз такой труд уже был вложен.
user
(21.11.2015 в 15:37):
Хех.
Не удержался, сорри, - малость влез в эту тулзу - очень уж удобная оказалась.
Всё по этому самому поводу проверки "хвостов" секций.
В общем, с минимальным вмешательством в функционал, вышлел вот такой вариант - Картинка:
rghost.ru/7lBjdFwHN
Вот тут архив, в котором можно глянуть, что добавлялось:
rghost.ru/65LCvRQkP
Пассворд тот же, что и раньше.
Дай знать, плз, как утянешь - я прибью раздачу.
Не удержался, сорри, - малость влез в эту тулзу - очень уж удобная оказалась.
Всё по этому самому поводу проверки "хвостов" секций.
В общем, с минимальным вмешательством в функционал, вышлел вот такой вариант - Картинка:
rghost.ru/7lBjdFwHN
Вот тут архив, в котором можно глянуть, что добавлялось:
rghost.ru/65LCvRQkP
Пассворд тот же, что и раньше.
Дай знать, плз, как утянешь - я прибью раздачу.
user
(20.11.2015 в 14:52):
Ну, в принципе, согласен.
ManHunter
(20.11.2015 в 14:49):
Не согласен про некорректность адреса. Такой адрес фактически есть в файле, он присутствует в памяти после загрузки файла, к нему можно обратиться из программы по VA, значит он не является некорректным.
бесполезно != недопустимо
бесполезно != недопустимо
user
(20.11.2015 в 03:49):
)Не совсем.
Было бы вот неплохо ввести ещё такую фичу, как предупреждение, что указанный VirtualAddress попадает в необъявленный хвост секции.
Сейчас вспомнил про эту утиль "File Location Calculator", проверил - да, здесь этот неприятный момент тоже никак не обрабатывается.
Обрабатывал такой вот скользкий случай в собственной утилитке CMP32.EXE, после того, как уже натыкался на эту же неприятность при тестировании ArmadilloEnvVarInjector.
Сейчас утиль CMP32.EXE после записи (например!) в FLC v.1.4 по смещению 3380h при сравнении ругнётся, что там патчить что-либо бесполезно.
Вот, сделал картинку, может, пригодится: rghost.ru/7wWX8nPdn
ManHunter
(30.08.2015 в 17:24):
Ну раз все починилось, то программу можно считать завершенной. Больше ничего добавлять или изменять я не планирую.
addhaloka
(30.08.2015 в 14:25):
Хех, нижеописанные глюки с окном FLC на Win 8.1 x64 больше не наблюдаются (в пред. обновлении (с фиксом для Win 10) они были). Спасибо!
ManHunter
(28.08.2015 в 22:31):
For example, here is test files: https://www.sendspace.com/file/skzwmx (be carefull!!! malware!!!)
Check file "test_file3" with overlapped sections.
Check file "test_file3" with overlapped sections.
mrexodia
(28.08.2015 в 15:04):
Hello,
Sorry for the English comment, but I don't know Russian. Would it be possible for you to publish the algorithm you use for the calculations? I think this will benefit a lot of people in the security industry will benefit from correct calculations.
If you don't want to publish the code, could you maybe outline the mistakes other algorithms (possibly including the ImageRvaToVa one) made?
Thanks in advance
Sorry for the English comment, but I don't know Russian. Would it be possible for you to publish the algorithm you use for the calculations? I think this will benefit a lot of people in the security industry will benefit from correct calculations.
If you don't want to publish the code, could you maybe outline the mistakes other algorithms (possibly including the ImageRvaToVa one) made?
Thanks in advance
ManHunter
(26.08.2015 в 01:07):
Исправлена ошибка с горячими клавишами. Архив обновлен до версии 1.4.0.4
ManHunter
(19.08.2015 в 22:25):
Проблема запуска под Win10 x64 локализована и устранена. Архив обновлен.
hatmaster
(19.08.2015 в 21:02):
Win 10 x86 D) Мсье знает толк в извращениях ;)
ManHunter
(19.08.2015 в 00:58):
Под Win10 тоже работает, тестировал на виртуалке Win10 x86. На 64-битной не работает.
ManHunter
(18.08.2015 в 23:15):
Удалось победить ошибку запуска плагина на Win8, архив обновлен. Теперь dll работает без упаковки.
ManHunter
(18.08.2015 в 21:27):
Это просто предположение. На ублюдочном Win8 не взлетал плагин flc.dll, пока не упаковал его UPX. Может быть и тут поможет. Никаких опций при упаковке не использую.
hatmaster
(18.08.2015 в 21:19):
ManHunter, а с какими опциями паковать? а то на 10 действительно никак (
ManHunter
(18.08.2015 в 11:55):
Ну хз, никакого подобного функционала в программу не закладывалось. Даже воспроизвести не могу, у меня стартует из Total'а без спецэффектов (Win7 и WinXP).
upd. Проверил на виртуалке Win8, тоже без спецэффектов.
upd. Проверил на виртуалке Win8, тоже без спецэффектов.
addhaloka
(18.08.2015 в 11:33):
На Win 8.1 x64 тоже немного странно себя ведёт, если запускать из Total Commander (в x32 и в x64, тыцканьем по flc.exe, где-то минуту крутится курсор мыши: http://fs1.directupload.net/im...f4wyg6h.png, а если из Проводника, то всё норм., также нет проблем, если открыть что-нибудь в flc через кнопку Тотала) или с ярлыка на раб. столе (устанавливается фокус на заголовке окна flc). С версией 1.3 такого не наблюдается.
ManHunter
(14.08.2015 в 15:13):
Попробуй упаковать файл обычным UPХ. Не знаю почему, но помогает.
AyTkACT
(14.08.2015 в 14:59):
На планшете с Windows 10 не запустилась :(
speedboy
(12.08.2015 в 06:56):
Update,thanks
ManHunter
(11.08.2015 в 00:03):
Версия 1.4. Исправлены ошибки с обработкой буфера обмена, улучшена работа с виртуальными секциями (мои благодарности crc1), добавлен просмотр секций PE-файла, прочие мелкие изменения и доработки.
ManHunter
(02.04.2015 в 20:03):
Да, виртуальная секция портила всю картину. Теперь порядок. Спасибо!
UPD. Еще раз обновил архив.
UPD. Еще раз обновил архив.
crc1
(02.04.2015 в 16:30):
Как и обещал, выкладываю файл clipboard1.exe. http://rghost.ru/7nKdXKxxq
1. SizeOfRawData первой секции = 0. Твоя утилита flc.exe при VA = 401003h
показывает File Offset = 403h, имя секции .data и байты 10 40 00 00 00 00 00 6A... Но т.к. размер секции .data на диске = 0, эти байты принадлежат секции .code и мое имхо некорректно в этом случае говорить об имени секции и Offset'е. Байты 10 40 00 00 00 00 00 6A... расположены по адресу VA = 402003h (хотя их Offset = 403h)
2. При VA = 402150h flc.exe сообщает нам Offset < Out of file > и имя секции ERROR, хотя Offset в данном случае будет 550h имя секции .code и байты по этому сещению 50 50 50 0A 00 00 (это я их нарисовал в файле для наглядности).
RVA тоже имеется за счет выравнивания секции, SectionAlignment = 1000h.
1. SizeOfRawData первой секции = 0. Твоя утилита flc.exe при VA = 401003h
показывает File Offset = 403h, имя секции .data и байты 10 40 00 00 00 00 00 6A... Но т.к. размер секции .data на диске = 0, эти байты принадлежат секции .code и мое имхо некорректно в этом случае говорить об имени секции и Offset'е. Байты 10 40 00 00 00 00 00 6A... расположены по адресу VA = 402003h (хотя их Offset = 403h)
2. При VA = 402150h flc.exe сообщает нам Offset < Out of file > и имя секции ERROR, хотя Offset в данном случае будет 550h имя секции .code и байты по этому сещению 50 50 50 0A 00 00 (это я их нарисовал в файле для наглядности).
RVA тоже имеется за счет выравнивания секции, SectionAlignment = 1000h.
ManHunter
(29.03.2015 в 20:29):
Ошибка с буфером обмена исправлена, архив обновлен. Спасибо!
crc1
(29.03.2015 в 20:12):
Если буфер обмена пустой или там содержатся данные отличные от CF_TEXT, при Ctrl+V в поле VA прога крешится.
Думается нужно сделать проверочку при событии WM_PASTE
If IsClipboardFormatAvailable(CF_TEXT)...
Еще, имхо, утилита не всегда корректно считает, сейчас нет под рукой файла где ошибка, через день выложу
Думается нужно сделать проверочку при событии WM_PASTE
If IsClipboardFormatAvailable(CF_TEXT)...
Еще, имхо, утилита не всегда корректно считает, сейчас нет под рукой файла где ошибка, через день выложу
ManHunter
(04.02.2015 в 14:51):
Мелкое обновление - улучшена работа с хоткеями. Архив обновил.
ManHunter
(19.01.2015 в 18:34):
Можно упаковать dll-ку обычным UPX, тогда она загружается без проблем. Протестировано на Win 8.1 Pro x64. Архив обновил.
ps. Какая же эта восьмерка ублюдочная... Даже на виртуалке с трудом сдерживался от того, чтобы не выключить питание.
ps. Какая же эта восьмерка ублюдочная... Даже на виртуалке с трудом сдерживался от того, чтобы не выключить питание.
Movic
(17.01.2015 в 00:16):
Ну может из за того что восьмерка система у меня.
Хотя все работает и 2005 года и 2010.
Только этот не хочет.
Но проблему решил.
Написал плуг который запускает утилиту.
Спасибо.
Нужная вещь.
Хотя все работает и 2005 года и 2010.
Только этот не хочет.
Но проблему решил.
Написал плуг который запускает утилиту.
Спасибо.
Нужная вещь.
ManHunter
(16.01.2015 в 11:11):
Под x64 тоже все замечательно работает: http://rghost.ru/60376862/image.png
Перекомпилировал на всякий случай с последним FASMом, перезалил.
Перекомпилировал на всякий случай с последним FASMом, перезалил.
Movic
(15.01.2015 в 14:57):
У меня прблем нет ни с однип плагом для пейда.
Только этот не пашет, сама утилита работает.
Архитектура х64.
http://i008.radikal.ru/1501/0c...3e726b71.png
http://s50.radikal.ru/i127/150...00f2fdd3.png
Мне почемуто кажется что это из за ультрасовместимости плуга с анализаторами.
Старая только под дие и пейд была.
Только этот не пашет, сама утилита работает.
Архитектура х64.
http://i008.radikal.ru/1501/0c...3e726b71.png
http://s50.radikal.ru/i127/150...00f2fdd3.png
Мне почемуто кажется что это из за ультрасовместимости плуга с анализаторами.
Старая только под дие и пейд была.
ManHunter
(15.01.2015 в 14:29):
Все прекрасно работает:
http://higgs.rghost.ru/60361336/image.png
http://higgs.rghost.ru/60361336/image.png
Movic
(15.01.2015 в 14:24):
Plugin для Peid не пашет.
Выдает ошибку при запуске Peid-а 0хс0000005.
Версия 1.0 без проблем.
Выдает ошибку при запуске Peid-а 0хс0000005.
Версия 1.0 без проблем.
ManHunter
(10.01.2015 в 02:34):
64-bit PE is NOT SUPPORTED and WILL NOT be supported.
If you have any problems - send me samples.
If you have any problems - send me samples.
speedboy
(17.12.2014 в 16:59):
good
X-Wing Top Ace
(12.12.2014 в 15:58):
Пережал из zip'а в 7z, 7 кило веса сэкономил. ;) Даешь весовую культуру! ;))
X-Wing Top Ace
(12.12.2014 в 10:18):
Спасибо, полезно. Версию 1.3 сразу же вытянул на винт.
ManHunter
(11.12.2014 в 08:57):
Версия 1.3. Добавлена возможность поиска перекрестных ссылок на адреса, которых физически нет в файле. Так, например, теперь можно найти команду перехода на OEP в упакованных файлах. Добавлены горячие клавиши Alt+1, Alt+2, Alt+3, Ctrl+O. Мелкие доработки.
ManHunter
(25.09.2014 в 12:52):
You welcome ;)
speedboy
(24.09.2014 в 15:24):
thanks
ManHunter
(29.07.2014 в 14:09):
Нет. Хватает того, что есть.
Жека
(29.07.2014 в 14:09):
Спасибо за инструмент! ManHunter, я не было такой мысли написать свой инструмент для восстановления импорта, все существующее на данный момент тоже не всегда корректно справляются с этой задачей?
AyTkACT
(28.07.2014 в 22:16):
ManHunter, вот тепеь всё ясно и понятно.
ManHunter
(28.07.2014 в 11:07):
Личной неприязнью.
AyTkACT
(28.07.2014 в 04:28):
ManHunter, так чем DIE от Hors'а то не угодил? Чем вызвана такая политика?
DimitarSerg
(27.07.2014 в 23:13):
Хехе, класс ! для моего основного детектора Die 0.65 в самый раз )
ManHunter
(27.07.2014 в 11:30):
И не увидит. Это плагин для оригинального DiE до версии 0.65 от Hellsp@wn.
AyTkACT
(27.07.2014 в 11:21):
Detect It Easy 0.88 не видит плагина.
ManHunter
(26.07.2014 в 01:03):
Откорректирована работа калькулятора на всяких очень хитро упакованных и покореженных файлах типа малвары, в поиск перекрестных ссылок добавлены команды передачи управления (условные и безусловные переходы, call, loop и т.п.), в плагин добавлены новые анализаторы файлов. Благодарности Владимиру за предоставленные образцы.
ManHunter
(27.11.2012 в 14:40):
До момента перехода на 64-битную систему - нет. То есть никогда.
Horna
(27.11.2012 в 14:05):
Большое спасибо! Очень пригодилась и помогла. А вы можете сделать поддержку 64-бит приложений?
ManHunter
(26.11.2012 в 17:52):
тунец, после таких утверждений надо добавлять "имхо"
тунец
(25.11.2012 в 19:27):
А как же память как аргумент перехода? 4Гб очень мало.
DimitarSerg
(23.11.2012 в 22:31):
Спасибо, забираю плаг для любимого анализатора Die 0.65 ;)
speedboy
(18.11.2012 в 10:24):
it's well.
ManHunter
(14.11.2012 в 00:03):
В новой версии добавлен поиск перекрестных ссылок, плагин доработан для совместимости с SCANiT и Bit Detector, внесен ряд исправлений и доработок разной степени тяжести.
ManHunter
(15.02.2012 в 14:54):
Не вижу _НИ ОДНОЙ_ весомой причины для перехода на 64 бит.
Tam-Tam
(15.02.2012 в 14:53):
Переходите кодить на 64 бит... 21 век всё таки... Там веселее...
speedboy
(30.05.2010 в 05:38):
very good!
AyTkACT
(08.04.2010 в 19:06):
Приходилось натыкаться на ошибки расчётов PETools и CFF Explorer.
Спасибо! Отличная утилита, супер что есть плаг!
Спасибо! Отличная утилита, супер что есть плаг!
Soso
(04.04.2010 в 22:20):
Спасибо, за тулзу !!!
INC.
(04.04.2010 в 18:28):
Thanks
Добавить комментарий
Заполните форму для добавления комментария
Ну почти на эту, но всё равно удобный:
http://old-dos.ru/dl.php?id=25428