Сейчас на форуме: zds (+7 невидимых) |
eXeL@B —› Протекторы —› Подскажите как восстановить импорт на "родное место" |
Посл.ответ | Сообщение |
|
Создано: 08 декабря 2010 03:26 · Поправил: daFix · Личное сообщение · #1 Распаковываю хасповский конверт и столкнулся с задачей поставить импорт на родное место. Раньше как-то не было необходимости так извращаться, поэтому слабо представляю как можно это сделать Если встречали статью с сабжем, киньте плиз PS. Помогла прога Imports Fixer v1.6 by SuperCracker Но всё-же не плохо было бы знать в теории, так что вопрос не снимается ----- Research For Food |
|
Создано: 08 декабря 2010 04:49 · Личное сообщение · #2 |
|
Создано: 08 декабря 2010 07:04 · Личное сообщение · #3 |
|
Создано: 08 декабря 2010 08:17 · Личное сообщение · #4 |
|
Создано: 08 декабря 2010 08:42 · Поправил: vnekrilov · Личное сообщение · #5 daFix пишет: Если встречали статью с сабжем, киньте пли Посмотри мои статьи по распаковке Asprotect. К ним приложен скрипты "Восстановление секции импорта (.idata) в распакованных программах.osc" и "Перенос данных из секции mackt, созданной ImpRec, в родную секцию импорта файла.osc", которые находят оригинальную секцию импорта, и ставят импорт на его родное место. Алгоритм поиска оригинальной секции импорта можно вставить в любой скрипт, и восстановить импорт на его родное место. Причем этот алгоритм работает на программах, написанных на разных языках программирования. Если нужна более подробная консультация, можно писать мне в личку или на vnekrilov@yandex.ru. |
|
Создано: 08 декабря 2010 09:43 · Личное сообщение · #6 Не всегда можно на 100% вернуть импорт в первоначальное место, особенно для си, я когда сталкивался с подобной задачей - тупо искал примерное место либо по названиям библиотек либо функций, либо просто на глаз свободное место в ориентировочном районе расположения импорта и делал полный ребилд импорта импреком с указанием нужного рва. Многие пакеры\протекторы вообще можно поймать до обработки импорта, скопировать оригинальную таблицу и вставить её на место после обработки, тогда импорт будет вообще идеально чистым, с хасповским конвертом правда сталкиваццо не приходилось ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 08 декабря 2010 10:20 · Личное сообщение · #7 Smon пишет: Не всегда можно на 100% вернуть импорт в первоначальное место Иногда просто это место забивается мусором, Smon пишет: я когда сталкивался с подобной задачей - тупо искал примерное место либо по названиям библиотек либо функций В армадилло остаются название системных библиотек,а чуть выше остатки таблици инициализации самой иат pavka пишет: С чего он не катит ? Может мы друг друга недопоняли но, имперек восстоналвливает табличку по сишному стандарту, Import Directory Table Hint-Name Table а у делфи идёт Import Directory Table Import Address Table Hint-Name Table Если мы попытаемся вписать её на место то имперек испортит IAT, можно конешно записать после IAT но это будет некрасиво и невсигда может поместится в выделенную область. ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 08 декабря 2010 10:34 · Личное сообщение · #8 ClockMan пишет: Иногда просто это место забивается мусором, А иногда просто нулями, суть не в этом, я имел в виду восстановление импорта к первоначальному состоянию до упаковки\защиты. ClockMan пишет: В армадилло остаются название системных библиотек,а чуть выше остатки таблицы инициализации самой иат Не только в арме, во многих пакерах\протах остаются названия и куски от оригинальной иат, что как раз и помогает определить примерное местоположение, а мусор\нули вовсе не помеха для того кто знает как должна выглядеть и где располагаться иат. ClockMan пишет: и невсигда может поместится в выделенную область. Да, есть такое дело, полный ребилд не всегда возможен, иногда восстановленная таблица тупо может не влезть в предоставленное для неё пространство. ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 08 декабря 2010 10:40 · Личное сообщение · #9 |
|
Создано: 08 декабря 2010 11:21 · Личное сообщение · #10 IMAGE_IMPORT_DESCRIPTOR(Начало Import Directory) 0045C000 00000000 0045C004 00000000 0045C008 00000000 0045C00C 0005C758 0045C010 0005C12C 0045C014 00000000 0045C018 00000000 0045C01C 00000000 0045C020 0005C9D0 0045C024 0005C1B8 Import Address Table 0045C12C >7C91188A ntdll.RtlDeleteCriticalSection 0045C130 >7C9010ED ntdll.RtlLeaveCriticalSection 0045C134 >7C901005 ntdll.RtlEnterCriticalSection 0045C138 >7C809FA1 kernel32.InitializeCriticalSection 0045C13C >7C809B14 kernel32.VirtualFree 0045C140 >7C809A81 kernel32.VirtualAlloc 0045C144 >7C80995D kernel32.LocalFree 0045C148 >7C8099BD kernel32.LocalAlloc 0045C14C >7C8114AB kernel32.GetVersion 0045C150 >7C809737 kernel32.GetCurrentThreadId 0045C154 >7C809794 kernel32.InterlockedDecrement 0045C158 >7C80977B kernel32.InterlockedIncrement Hint-Name Table 0045C758 6E72656B kern 0045C75C 32336C65 el32 0045C760 6C6C642E .dll 0045C764 00000000 .... 0045C768 656C6544 Dele 0045C76C 72436574 teCr 0045C770 63697469 itic 0045C774 65536C61 alSe 0045C778 6F697463 ctio PE_Kill пишет: Что за названия такие? В делфях идет Из справки по PE формату PE_Kill пишет: С помощью импрека всё отлично встает на место, если ему указать RVA первого массива IMAGE_IMPORT_BY_NAME. Значит у тебя особенный империк у моего в настройках только NewImportInfos ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 08 декабря 2010 11:25 · Личное сообщение · #11 |
|
Создано: 08 декабря 2010 11:50 · Личное сообщение · #12 ClockMan пишет: Из справки по PE формату Какого автора? Вот от микрософта: msdn.microsoft.com/en-us/magazine/cc301808.aspx IMAGE_IMPORT_DESCRIPTOR->IMAGE_THUNK_DATA->IMAGE_IMPORT_BY_NAME ClockMan пишет: Значит у тебя особенный империк у моего в настройках только NewImportInfos Ну так туда и прописывай. Конечно сначала он запишет IID, к сожалению этой опции у него нет, но с учетом выравнивания секции на границу SectionAlign IID влезает. У меня один раз только не влез 1 байт, пришлось нарушить 2 байтовое выравнивание последнего IMAGE_IMPORT_BY_NAME и всё прекрасно уместилось. ----- Yann Tiersen best and do not fuck |
|
Создано: 08 декабря 2010 12:02 · Личное сообщение · #13 |
|
Создано: 08 декабря 2010 12:50 · Личное сообщение · #14 |
|
Создано: 08 декабря 2010 15:22 · Личное сообщение · #15 Мне приходилось распаковывать много программ, написанных на разных языках программирования, и, когда я хотел, то всегда вставлял импорт на его родное место, несмотря на то, что таблица Импорта может быть заполнена мусорным кодом, или забита нолями. Всегда можно найти (во всяком случае, в тех программах, с которыми я сталкивался) место, где была записана таблица Импорта, и место, где записываются имена APIs. Правда, при использовании Импрека, я обычно восстанавливаю импорт в новую секцию файла, добавляемую Импреком, а затем переношу таблицу Импорта и область имен APIs с этой секции на их родное место с помощью специального скрипта, и все получается нормально. |
|
Создано: 08 декабря 2010 16:08 · Личное сообщение · #16 |
eXeL@B —› Протекторы —› Подскажите как восстановить импорт на "родное место" |