Сейчас на форуме: Slinger, Rio (+5 невидимых)

 eXeL@B —› Основной форум —› Странный DLL... (Aspr)
Посл.ответ Сообщение

Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 14 мая 2005 16:42
· Личное сообщение · #1

Скачал я English-Spanish Interpreter Professional 4.4 (http://www.wordmagicsoft.com, 48 MB), там стоит Аспр версии 1.2х-1.3х, стрпперы и старые и новые (до версии 2.13, не знаю есть ли поновее) распаковывают его (ЕХЕ), но не корректно.. Распаковал вручную, всё отлично, только спёртые байты для Дельфи программы странные были:


push ebp
mov ebp,esp
mov ecx,6


Потом пропатчил его чтоб триал окно не показывало, и щас могу использовать его в вечном триале, ограничений нет. Но программа имеет также плагин для MS Word, который позволяет использовать его из ворда. он тоже запакован тем же аспром и стрипперы опять не корректно распаковывают. Попробовал опять вручную, и тут началось.. во первых, очень странно что ДЛЛ-ка имеет ImageBase равным почему-то 00400000, ясно что по этому адресу подгружена программа, которая его вызывает, так что она конечно грузиться в другое адресное пространство, в моём случае с loaddll.exe от Olly вот так:


Memory map
Address Size Owner Section Contains Type Access Initial Mapped as
...
...
...
00400000 00001000 LOADDLL PE header Imag R RWE
00410000 00001000 LOADDLL CODE code Imag R E RWE
00420000 00003000 LOADDLL DATA data Imag RW RWE
00430000 00001000 LOADDLL .idata imports Imag RW RWE
00440000 00001000 LOADDLL .edata exports Imag R RWE
00450000 00001000 LOADDLL .rsrc resources Imag RW RWE
00460000 00087000 Map R E R E
00760000 00001000 Priv RW RW
00770000 00001000 Priv RW RW
00780000 00004000 Priv RW RW
00790000 00002000 Map R R
007A0000 00001000 WMPlugIn PE header Imag R RWE
007A1000 001B7000 WMPlugIn code Imag R RWE
00958000 00004000 WMPlugIn data Imag R RWE
0095C000 00005000 WMPlugIn Imag R RWE
00961000 00004000 WMPlugIn Imag R RWE
00965000 00001000 WMPlugIn exports Imag R RWE
00966000 0001A000 WMPlugIn Imag R RWE
00980000 0014D000 WMPlugIn .rsrc resources Imag R RWE
00ACD000 00013000 WMPlugIn .WMSPLUG SFX,imports, Imag R RWE
00AE0000 00001000 WMPlugIn .adata Imag R RWE
00AF0000 00004000 Priv RW RW
00B00000 00010000 Priv RW RW
00F00000 00004000 Priv RW RW
00F10000 00001000 Priv RW RW
00FB0000 0001E000 Priv RW RW
00FD0000 00011000 Map R R
...
...
...


тойсть библиотека грузиться конечно не в 00400000 а в моём случае в 007A0000.
Доxожу до ОЕР, а может и Fake OEP, не проверял так-как я нахожу спёртые байты после корректировки IAT.


DLL OEP VA: 00957980
DLL OEP RVA: 00557980 ( если IB считать 00400000 )
DLL OEP RVA: 001B7980 ( если IB считать 007A0000 )


гружу ImpRec, чтоб восстановить таблицу, если ОЕР писать 001B7980, говорит не в пространстве модуля естественно, так как он принимает ImageBase как 00400000.. если ОЕР писать 00557980, говорит что не может таблицу найти...
таблицу нашёл вручную:


DLL IAT START VA: 009611E0 (RVA: 005611E0 [IB: 00400000], or 001C11E0 [IB: 007A0000])
DLL IAT END VA: 00961AB8 (RVA: 00561AB8 [IB: 00400000], or 001C1AB8 [IB: 007A0000])
DLL IAT SIZE: 00961AB8 - 009611E0 = 8D8


Get Imports, получили их, Show Invalid, Disasm Level 1, OK, и после этого плагины для обработки аспровых апи не работают почему-то, импрек вешаеться... пришлось дизасмить вручную каждую апи и решить что это за функция.. с этим тоже справились.. но когда жму Fix Dump, выводиться ошибка что не может конвертсровать адреса в RAW address.. пробовал на дампах и c ImageBase 00400000 и c 007A0000.. и еще одна странновсть, не могу восстановить релоки, плагин PETools-а ругается что их очень много... есть советы?

Файлы:
assoft.it.hosting.am/files/WMPlugIn.rar (994 kb)
assoft.it.hosting.am/files/WMPlugIn_Dumped.rar (998 kb)
assoft.it.hosting.am/files/WMPlugIn_iat_imprec.txt (25 kb)



Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 15 мая 2005 14:33
· Личное сообщение · #2

никто не попробовал или вы тоже не смогли? жаль..




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 15 мая 2005 15:55
· Личное сообщение · #3

arnix пишет:
гружу ImpRec, чтоб восстановить таблицу, если ОЕР писать 001B7980, говорит не в пространстве модуля естественно,

а "pick dll" нажать пробовал ? ) а по поводу автофайндов всяких, так они косячат часто, поэтому я например всегда в протах адрес таблицы вручную указываю, а "Fix EP to OEP" вообще в опциях отключено.

arnix пишет:
не могу восстановить релоки, плагин PETools-а ругается что их очень много

Relox рулит ;)



Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 15 мая 2005 16:15 · Поправил: arnix
· Личное сообщение · #4

Mario555 пишет:
а "pick dll" нажать пробовал ?


ну я жe не тумбочка ) конечно я про эту кнопку знаю

Mario555 пишет:
Relox рулит ;)


им никогда не пользовался, попробую им, если импорты восстанавлю

Mario555 пишет:
протах адрес таблицы вручную указываю


а я только если сам он не находит

P.S.
есть ли другие соображения отчего это?

Offtop:
по ходу, я тут анпакер пишу, хочу поставить брейк на VirtualAlloc , но туды писать запрещено, не подскажите какя винапи фунция меняла тип доступа на части памяти (xoчy ReadWriteExecutable ), ато я забыл a в Win32 Programmers Referense'e что-то не нахожу...




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 15 мая 2005 16:22
· Личное сообщение · #5

arnix пишет:
а я только если сам он не находит

дык он частенько криво находит... пока проверишь не скосячил ли он быстрее сразу вписать...

arnix пишет:
есть ли другие соображения отчего это?

если вся проблема только в " RAW address" то попробуй в опциях поставить "CreateNewIAT", иногда помогает на кривых файлах.

arnix пишет:
не подскажите какя винапи фунция меняла тип доступа на части памяти

VirtualProtect ?



Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 15 мая 2005 16:29
· Личное сообщение · #6

большое спаибо, щас попробою (и то и другое)



Ранг: 25.9 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 21 января 2006 00:22
· Личное сообщение · #7

arnix пишет:
гружу ImpRec, чтоб восстановить таблицу, если ОЕР писать 001B7980, говорит не в пространстве модуля естественно, так как он принимает ImageBase как 00400000.. если ОЕР писать 00557980, говорит что не может таблицу найти...

недавно снимал Armadillo с некой DLL -- проблема была та же самая. в процессе исследования выяснилось, что это РЕАЛЬНАЯ БАГА ImpREC'а! вместо того чтобы брать offset EXE/DLL из памяти исследуемого процесса он считывает ImageBase из файла. т.к. EXE всегда грузится по указанному ImageBase, то проблем не возникает, а вот с DLL беда...

лечится эта бякость так: после выбора DLL и перед нажатием на OK ставится BP на ReadFile и после 3-го(!) останова в памяти (адрес буфера будет в EDX) правится ImageBase PE заголовка на требуемый offset.

всем:
может кто знает держателя исходников этой тулзы? было бы неплохо пофиксить данную багу...



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

Создано: 21 января 2006 06:01
· Личное сообщение · #8

arnix
У меня была такая же история с Patch Faktory! Только Аспр 2.1х
Лучше не пользоватся loaddll.exe а ловить на эксепшены в Олли и распаковывать а потом править ImageBase как предлагает stalker а затем Relox!



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 21 января 2006 12:53
· Личное сообщение · #9

stalker, а я просто снимаю чек-бокс с 'use pe-header from disk', или я не про то?



Ранг: 25.9 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 21 января 2006 12:58 · Поправил: stalker
· Личное сообщение · #10

Av0id пишет:
а я просто снимаю чек-бокс

мдя ... слона-то я и не заметил. и похоже, что не я один



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 21 января 2006 14:43
· Личное сообщение · #11

христа ради простите за офтоп

[offtopic]
stalker, это ничего, просто кому-то часто приходится возиться с dll'ками (кому-то нет), но вот почему трейсер на работает на dll'ках? или меня глючит? вешается просто imprec и усё

ps. а revirgin кто-нибудь пробовал? он реально работает или нет?
[/offtopic]



Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 21 января 2006 23:54
· Личное сообщение · #12

stalker пишет:
и похоже, что не я один


Хе Точно... Я тогда здорово над импреком рассердился и кажется revirgin-ом сделал, если хорошо помню... Ну а "use pe-header from disk" заметил слишком поздно, в другой раз... Во как бывает



Ранг: 25.9 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 02 ноября 2006 10:59
· Личное сообщение · #13

поднимаю тему чтоб не плодить новую

---
исследую программу в которой присутствует несколько секций кода. при выставлении на них галок в окошке: /Advanced Options -> /Select Code Section(s) импорт по идее должен восстанавливаться во всех отмеченных ... но это происходит только в последне выделенной секции!

может быть кто сталкивался с подобным поведение ImpREC'а? это его настраиваемая фича (или все же бага) и как ее можно победить?




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 02 ноября 2006 11:35
· Личное сообщение · #14

stalker пишет:
при выставлении на них галок в окошке: /Advanced Options -> /Select Code Section(s)

а зачем это надо ? я часто пользовался импреком, но о такой опции даже не знал, ибо остальных возможностей импрека мне хватало.



Ранг: 25.9 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 02 ноября 2006 11:49
· Личное сообщение · #15

Mario555 пишет:
а зачем это надо?

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

более того (как удалось выяснить опытным путем) -- если выставить галочки на нескольких секциях, то именно в них ImpREC и пытается править переходники (ссылки) на IAT. основная фигня заключается в том, что он почему-то пока отказывается править их во всех выделенных секциях, а производит коррекцию только в "верхней" (расположенной выше по памяти) ...




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 02 ноября 2006 12:04
· Личное сообщение · #16

тоесть это ради возможности использовать "CreateNewIAT" ? Задача получается нетривиальной =) обычно и "CreateNewIAT" то редко используют, а тут ещё и с какой-то кастомной опцией чтоб он правил переходники в других секциях... я бы не стал так доверять опции "CreateNewIAT", она ведь и накосячить может... вообще по твоему описанию похоже что действительно бага импрека, но о ней наверно не знали ибо никому не надо было %)



Ранг: 25.9 (посетитель)
Активность: 0.010
Статус: Участник

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

Mario555 пишет:
тоесть это ради возможности использовать "CreateNewIAT"?

типа того в этой проге новая секция 7kB кода получается и воткнуть ее на место прежней ну ни как не получается

Mario555 пишет:
о ней наверно не знали ибо никому не надо было

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


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


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