Сейчас на форуме: zds (+7 невидимых)

 eXeL@B —› Протекторы —› Подскажите как восстановить импорт на "родное место"
Посл.ответ Сообщение


Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 08 декабря 2010 03:26 · Поправил: daFix
· Личное сообщение · #1

Распаковываю хасповский конверт и столкнулся с задачей поставить импорт на родное место. Раньше
как-то не было необходимости так извращаться, поэтому слабо представляю как можно это сделать
Если встречали статью с сабжем, киньте плиз

PS. Помогла прога Imports Fixer v1.6 by SuperCracker
Но всё-же не плохо было бы знать в теории, так что вопрос не снимается

-----
Research For Food




Ранг: 1045.7 (!!!!), 31thx
Активность: 0.570
Статус: Участник

Создано: 08 декабря 2010 04:49
· Личное сообщение · #2

Если просто поставить, это не вопрос это и импрек делает. Если восстановить оригинальную иат это другое




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 08 декабря 2010 07:04
· Личное сообщение · #3

daFix
Открываем любой неупакованный файл и смори как построина таблица и.т.д, статей я невидал, для программ написанных на си и бейсике можно воспользоватся импереком, для делфи он некатит я использую скрипт )

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 1045.7 (!!!!), 31thx
Активность: 0.570
Статус: Участник

Создано: 08 декабря 2010 08:17
· Личное сообщение · #4

ClockMan пишет:
импереком, для делфи он некатит

С чего он не катит ? С борланд си есть проблемы да и и то решаемые



Ранг: 329.6 (мудрец), 192thx
Активность: 0.140.01
Статус: Участник

Создано: 08 декабря 2010 08:42 · Поправил: vnekrilov
· Личное сообщение · #5

daFix пишет:
Если встречали статью с сабжем, киньте пли


Посмотри мои статьи по распаковке Asprotect. К ним приложен скрипты "Восстановление секции импорта (.idata) в распакованных программах.osc" и "Перенос данных из секции mackt, созданной ImpRec, в родную секцию импорта файла.osc", которые находят оригинальную секцию импорта, и ставят импорт на его родное место. Алгоритм поиска оригинальной секции импорта можно вставить в любой скрипт, и восстановить импорт на его родное место. Причем этот алгоритм работает на программах, написанных на разных языках программирования. Если нужна более подробная консультация, можно писать мне в личку или на vnekrilov@yandex.ru.



Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 08 декабря 2010 09:43
· Личное сообщение · #6

Не всегда можно на 100% вернуть импорт в первоначальное место, особенно для си, я когда сталкивался с подобной задачей - тупо искал примерное место либо по названиям библиотек либо функций, либо просто на глаз свободное место в ориентировочном районе расположения импорта и делал полный ребилд импорта импреком с указанием нужного рва. Многие пакеры\протекторы вообще можно поймать до обработки импорта, скопировать оригинальную таблицу и вставить её на место после обработки, тогда импорт будет вообще идеально чистым, с хасповским конвертом правда сталкиваццо не приходилось

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 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 но это будет некрасиво и невсигда может поместится в выделенную область.

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 08 декабря 2010 10:34
· Личное сообщение · #8

ClockMan пишет:
Иногда просто это место забивается мусором,

А иногда просто нулями, суть не в этом, я имел в виду восстановление импорта к первоначальному состоянию до упаковки\защиты.

ClockMan пишет:
В армадилло остаются название системных библиотек,а чуть выше остатки таблицы инициализации самой иат

Не только в арме, во многих пакерах\протах остаются названия и куски от оригинальной иат, что как раз и помогает определить примерное местоположение, а мусор\нули вовсе не помеха для того кто знает как должна выглядеть и где располагаться иат.

ClockMan пишет:
и невсигда может поместится в выделенную область.

Да, есть такое дело, полный ребилд не всегда возможен, иногда восстановленная таблица тупо может не влезть в предоставленное для неё пространство.

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 08 декабря 2010 10:40
· Личное сообщение · #9

Что за названия такие? В делфях идет

Массив IMAGE_IMPORT_DESCRIPTOR
Массивы IMAGE_THUNK_DATA
Массивы IMAGE_IMPORT_BY_NAME

С помощью импрека всё отлично встает на место, если ему указать RVA первого массива IMAGE_IMPORT_BY_NAME.

-----
Yann Tiersen best and do not fuck





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 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

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 08 декабря 2010 11:25
· Личное сообщение · #11

Не нужно забывать, что иногда на месте съеденного импорта могут располагаться части ВМ.

-----
Everything is relative...





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 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





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 08 декабря 2010 12:02
· Личное сообщение · #13

PE_Kill пишет:
Какого автора?

www.emanual.ru/download/www.eManual.ru_1298.html

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 08 декабря 2010 12:50
· Личное сообщение · #14

Есть один официальный док, который от мелкомягких. И который не так давно обновился, кстати. Его и стоит глядеть, остальные вилами на воде писаны.



Ранг: 329.6 (мудрец), 192thx
Активность: 0.140.01
Статус: Участник

Создано: 08 декабря 2010 15:22
· Личное сообщение · #15

Мне приходилось распаковывать много программ, написанных на разных языках программирования, и, когда я хотел, то всегда вставлял импорт на его родное место, несмотря на то, что таблица Импорта может быть заполнена мусорным кодом, или забита нолями. Всегда можно найти (во всяком случае, в тех программах, с которыми я сталкивался) место, где была записана таблица Импорта, и место, где записываются имена APIs. Правда, при использовании Импрека, я обычно восстанавливаю импорт в новую секцию файла, добавляемую Импреком, а затем переношу таблицу Импорта и область имен APIs с этой секции на их родное место с помощью специального скрипта, и все получается нормально.



Ранг: 1045.7 (!!!!), 31thx
Активность: 0.570
Статус: Участник

Создано: 08 декабря 2010 16:08
· Личное сообщение · #16

Имхо спор ни о чем . Если нет эламинейшн можно импреком сделать в родное место импорт без всяких проблем. кроме борланд си


 eXeL@B —› Протекторы —› Подскажите как восстановить импорт на "родное место"
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати