Сейчас на форуме: ut2004, vsv1 (+8 невидимых)

 eXeL@B —› Вопросы новичков —› Упаковщики и таблица импорта
Посл.ответ Сообщение

Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 17 октября 2006 13:29 · Поправил: Sturgeon
· Личное сообщение · #1

Привет!
Сейчас читаю статьи по распаковке и у меня возник вопрос. В статье "Ручная распаковка файлов, используя ProcDump" от Dr.Golova он не дает упаковщику заменить имена функций на их реальный адрес. И в результате снимает полностью рабочий дамп, не заморачиваясь с восстановлением таблицы импорта. В статьях "Об упаковщиках в последний раз" есть примерно такие же мысли. И такой вопрос.
Много ли пакеров/протекторов делают такие штуки (я как понял практически все)? Реально ли найти это место? И, соответсвенно, реально ли его обойти, чтобы получить рабочий дамп? Если можно объясните пожалуйста немножко поподробней и попроще, а то я же чайник, и от "упаковщиков в последний раз" у меня зубы ломит




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 17 октября 2006 14:05
· Личное сообщение · #2

Sturgeon пишет:
Много ли пакеров/протекторов делают такие штуки

...ну,есть такие.Возьмём к примеру SafeDisc.
Sturgeon пишет:
Реально ли найти это место?

...если знаешь,что ищешь,то реально.Аппаратная точка останова на запись в какое-нибудь место в IAT,где находятся переходники протектора.Лучше ставить условную точку -- меньше будет ложных срабатываний. И дальше развиваешь мысль по обстоятельствам.
Sturgeon пишет:
реально ли его обойти

...реально.NOPишь нужный переход,и таблица заполняется правильными адресами API(SafeDisc в пример).
Sturgeon пишет:
чтобы получить рабочий дамп?

...вот только рабочий дамп ты в случае протектора наврятли получишь,т.к. он гадит ещё и секцию кода,и её необходимо приводить в чувства.

Моё мнение,нахождение и обход данного момента не даёт особого преимущества,т.к. восстановление импорта -- это обычно самая лёгкая часть в снятии протектора(SafeDisc в пример) и не занимает так много времени по сравнению с остальными механизмами.

-----
the Power of Reversing team





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

Создано: 17 октября 2006 20:42
· Личное сообщение · #3

DillerInc он не про это спрашивал, он имел ввиду вообще импорт не восстанавливать.
Sturgeon вполне реально, писал как это сделать в PECompact
http://www.exelab.ru/art/?action=view&id=325

Тоже делал и для FSG и для WinUpack только для них я вообще в конце уже дамп правил, прогу писал по быстрому в 50 строчек...

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




Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

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

Спасибо!



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 24 октября 2006 11:41 · Поправил: Sturgeon
· Личное сообщение · #5

Начитался статей. Решил попробовать самостоятельно UPX таким образом распаковать. И как обычно облом.
По аналогии со статьей дошел до такого места (это в самом конце кода распаковщика):

00462AEC . 95 XCHG EAX,EBP ; kernel32.7C800000
00462AED > 8A07 MOV AL,BYTE PTR DS:[EDI]
00462AEF . 47 INC EDI ; Cross.0046125E
00462AF0 . 08C0 OR AL,AL
00462AF2 .^ 74 DC JE SHORT Cross.00462AD0
00462AF4 . 89F9 MOV ECX,EDI ; Cross.0046125E
00462AF6 . 79 07 JNS SHORT Cross.00462AFF
00462AF8 . 0FB707 MOVZX EAX,WORD PTR DS:[EDI]
00462AFB . 47 INC EDI ; Cross.0046125E
00462AFC . 50 PUSH EAX ; kernel32.CloseHandle
00462AFD . 47 INC EDI ; Cross.0046125E
00462AFE B9 DB B9
00462AFF . 57 PUSH EDI ; Cross.0046125E
00462B00 . 48 DEC EAX ; kernel32.CloseHandle
00462B01 . F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00462B03 . 55 PUSH EBP ; kernel32.7C800000
00462B04 . FF96 602B0600 CALL DWORD PTR DS:[ESI+62B60] ; kernel32.GetProcAddress
00462B0A . 09C0 OR EAX,EAX ; kernel32.CloseHandle
00462B0C . 74 07 JE SHORT Cross.00462B15
00462B0E . 8903 MOV DWORD PTR DS:[EBX],EAX <-стоим здесь ; kernel32.CloseHandle
00462B10 . 83C3 04 ADD EBX,4
00462B13 .^ EB D8 JMP SHORT Cross.00462AED
00462B15 > FF96 642B0600 CALL DWORD PTR DS:[ESI+62B64] ; kernel32.ExitProcess
00462B1B > 61 POPAD
00462B1C .- E9 D804FAFF JMP Cross.00402FF9


в EBX адрес, куда записывается новый адрес импорта, в EDI указатель на имена фунуций (скорее всего), в ЕАХ адрес функции в библиотеке.

А как пропатчить этот код я не додумаю никак. Как я понял из статьи, смысл в том, чтобы адрес из указателя скопировался в новое место без изменений. Но как поправить код я не соображу.


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


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