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

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

Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 мая 2007 20:01
· Личное сообщение · #1

Доброго времени суток. Решил пройти тернистый путь распаковки программ. До этого был опыт системного программирования, поэтому понимание материала по структуре PE формата и загрузчика присутствовали (по моему скромному мнению, но чем больше я узнаю тем больше убеждаюсь что ничего не знаю). Прочитал различные статьи по распаковке и связанным темам. Честно небольшая каша в голове, так что где не прав прошу указать на ошибки. Простое нажатие кнопочек в программах меня не интересует (во многих статьях этим ограничивается), мне хочется добиться понимания протекающих процессов. Чтобы мог с пониманием дела совершать действия, а не просто из-за того что кто-то так сказал (сделал) и у него получилось.
Для тренировки выбрал первый попавшийся на машине запакованный файл WebMoney.exe.
Натравил на него PEid и Pe Tools, они показали наличие ASProtect v1.23 RC1 (выбор для начала может не самый лучший, но уже просто спортивный интерес ). (Я понимаю что есть возможность того, что различные утилиты покажут различные упаковщики. Что тогда вы предпринимаете, какие методы РУЧНОГО ОПРЕДЕЛЕНИЯ УПАКОВЩИКА вы знаете, поделитесь пожалуйста. По названию секций, по стартовой функции упаковщика и т д).
Начал распаковку с поиска OEP. Как понял некоторые сначала восстанавливают импорт а потом ищут OEP. Когда какой метод вы применяете?
Начал поиск OEP. В OllyDbg (с использованием SuperBpm) поставил бп на ESP-4 и попал на 0x00415CD2 (по состоянию стека и регистров вроде все сходиться). Но вот незадача PEid выдает другую OEP (0x004010E0).
Снял дамп с использованием OllyDump (Rebuild import убрал, OEP взял равный EIP (0x00415CD2)). Затем в PE tools c использованием PE editor начал изучать заголовок и секции полученного дампа (IDA вполне адекватно разбирает дамп находит WinMain). В файле шесть секций: три безымянных и .rsrc, .data, .adata.
Первая секция.
Начало первой секции (Raw offset) совпадает с полем BaseOfCode в Optional Header, а также SizeOfCode совпадает с размером данной секции. Да и OEP лежит в данной секции. Сделал вывод что это скорее всего .text. (Я понимаю что данные рассуждения не совсем верны и на этом нельзя основываться)
Вторая секция
Аналогично совпадает с BaseofData b SizeofData. Возможно это .data.
Третья секция не понял.
.rsrc – данная секция ресурсов. Я понял что протекторы ее все таки могут корежить. Во всех статьях используют редакторы ресурсов чтобы слить в одну секцию и прикрутить к дампу. Делали Вы когда-нибудь это руками. Если да то как. И пожалуйста методы которыми пользуются протекторы для модификации ресурсов.
.adata – я понимаю это от ASprotect. Почти везде ее отрезают. Я понял что там находиться код AsProtect, а возможна ситуация когда в ней находиться нужная нам информация?
С помощю ImpRec нашел импорт, но вот незадача восстановил не все. Так вот я поныл что в данном случае работают анализируя заглушки установленные пакером. Как вы боритесь с этим? Как определяете куда ведет заглушка?
И еще вопросы.
1. Поиск OEP. Как понимаю метод с бп на esp-x (x = 4, …) срабатывает не всегда. Как найти OEP если данный метод не сработал. Какие методы нахождения OEP вы знаете?
2. PEiD выдает одну OEP, а бп на esp-4 или другой метод выдают отличный от PEiD результат. Как определить правильный OEP (я понимаю что с опытом приходит, но прошу если можно опешите свои рассуждения, поделитесь опытом). Или все знают наизусть все стандартные стартовые функции всех компиляторов?
3. Импорт. Нажимать на кнопочки в IpmRec и других утилитах конечно хорошо, но если их нет (в смысле утилит под рукой нет)? Можно ли привести пару методов восстановления импорта руками (когда он подпорчен заглушками протектора, желательно поподробнее).
4. SEH. Кто какие методы использует для обхода таких методов.
5. Краденые байты. Пожалуйста ссылочки или описание алгоритма данного метода защиты и как с ним бороться (вопрос глупый согласен, но все же кто как считает где лучше всего описана данная ситуация).
6. Насчет моих рассуждений (выше).
- можно ли сделать вывод о назначении секции по значениям полей заголовка (назначение полей смотрел в документации в статьях на Wasm.ru и книгах Криса Касперски).

P.S. Вопросов еще куча Но я и так уже задал достаточно. Если хотя бы на несколько будут даны развернутые ответы – это уже будет поистине огромная помощь. Заранее благодарю.
P.P.S. Если я по невнимательности просто не заметил статью или что-то еще… Пожалуйста не судите строго. Просто дайте ссылочку.



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 31 мая 2007 20:41
· Личное сообщение · #2

langoner, добро пожаловать.
Возьми сразу несколько разных файлов и сам повесь на них прот, так дело пойдёт быстрее в 100 раз и большая часть вопросов отпадёт.
langoner пишет:
Для тренировки выбрал первый попавшийся на машине запакованный файл WebMoney.exe

И кстати, этот выбор мне как-то ненравится.

langoner пишет:
Как понял некоторые сначала восстанавливают импорт а потом ищут OEP. Когда какой метод вы применяете?

Всегда сначала ищется OEP. Это уже когда статья пишется можно для краткости в обратном порядке.

langoner пишет:
Но вот незадача PEid выдает другую OEP (0x004010E0).

Посмотри на алгоритм поиска OEP в плаге для PEid'a.
Если это Generic, то он ведь очень тупо работает. Сначала создаёт процесс жертвы, а потомищет в нём известные сигнатуры EP разных компиляторов.

langoner пишет:
Как понимаю метод с бп на esp-x (x = 4, …) срабатывает не всегда.

Лучше hr esp-4 =)

Ой, устал отвечать, пойду ужинать...

-----
Всем привет, я вернулся




Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 мая 2007 20:49
· Личное сообщение · #3

"Лучше hr esp-4 =)"

Да, прошу прощения hr в данном случае работают только аппаратные бп



Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 мая 2007 20:57
· Личное сообщение · #4

PPPS Меня обвинили на одном форуме что я хочу внедрить свой код в WM. Если вы так думаете возьмите на рассмотрение другой пример.. Я согласен не самый лучший выбор... Но он (WM) распаковывается стрипером и я бы не задавал такие вопросы елсиб не интересовало именно само вскрытие. Логично?
просто не могу отступиться начал и както бросить ...



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 04 июня 2007 11:04
· Личное сообщение · #5

langoner
Почти на все твои вопросы есть ответ в разделах "Статьи" и "Rar-статьи"!!! сначала надо больше читать
и пробовать на примерах, тогда быстрее вьедешь!

З.Ы. мне месяц понадобился для того чтобы первый раз снять ASPR 1.23 (эт счас кажется что все так легко), поэтому не всегда все сразу получается!



Ранг: 21.1 (новичок)
Активность: 0.030
Статус: Участник

Создано: 04 июня 2007 11:41
· Личное сообщение · #6

Нахождение OEP (срабатывает только если прога запакована без опции "protect original entry point")
1. отрубаешь все игноры в отладчике
2. трассируешь по Shift+f9, пока прога не запустится, считая количество нажатий
3. перезапускаешь и трассируешь опять, но жмешь Shift+f9 на один раз меньше
4.ставишь б/п на секцию кода
5. нажимаешь Shift+f9 и либо сразу вываливаешься на OEP, либо через 1-2 шага
В случае с "protect original entry point" я ещё сам не въехал, как находить OEP, т.к. там вместо OEP стоит
Jmp xxxxxxxx и вообще оригинальный код размазан по разным местам

Насчет краденных байтов. Я использую с Аспром такой метод( не зависит от версии).
1.Открываю запакованную программу и её дамп в двух Олли-дебаггерах.
2.Дамп трассирую по F8, пока программа не упадёт.
3. Смотрю, в каком месте упала и сравниваю данную локацию кода в запакованной программе. Обычно
часть краденных байтов оказывается там, либо там какой-нибудь Call, ведущий к украденным байтам, либо цепочка из нескольких Call'ов. Затем уже байты копируются и вставляются как в обычном Hex-редакторе

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



Ранг: 120.2 (ветеран), 8thx
Активность: 0.120
Статус: Участник

Создано: 04 июня 2007 12:03
· Личное сообщение · #7

Satyr

Ты наверное немного ошибся в определении " краденные байты", как я понимаю это начало оригинальной проги, которое модифицировал аспр. Ты скорее всего описал восстановление импорта и некоторых переменных которые находились в теле аспра.



Ранг: 21.1 (новичок)
Активность: 0.030
Статус: Участник

Создано: 04 июня 2007 12:23
· Личное сообщение · #8

cadet

Я эти байты восстанавливаю уже после реконструкции таблицы импорта, и это обычно 25-30 байт в контексте какой-л. одной процедуры
например

push ecx
db 40
db 34
db 4d
восстанавливая эти байты, получается какой-нибудь call, который в дампе ведет в никуда, приходится восстанавливать и его destination...




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 04 июня 2007 12:43
· Личное сообщение · #9

Satyr пишет:
Нахождение OEP

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


1) Методов 2 штуки - используя особенности компилятора или особенности протектора.
1 - Каждый компилятор создает свой собственный стартовый код => первой вызываемой API будет какая-то конкретная функция. Для Delphi это GetModuleHandleA, для C++ - GetVersion и т.д.

2 - Протекторы некоторым образом влияют на память процесса. Я делю действия протов (с точки зрения поиска конца их работы) на доступ к определённым страницам памяти (PE header, секция ресурсов, секция кода, секция протектора), вызов некоторых API и SEH. По ним можно ориентироваться что же еще хочет сделать прот перед тем, как отдать управление коду самой программы.
Чтобы узнать на что же именно ставить брекпоинт, надо поэкспериментировать: расставить брекпоинты на секции кода у Kernel32 и user32, основного модуля. Немного потрейсить, поиграться со значением esp, короче проявить фантазию =) Первый раз исследование может продлиться довольно долго; для эффективного и быстрого поиска необходим опыт. А опыт приходит со временем =)

2) Ну практически надо уметь узнавать возможный стартовый код, даже незнакомого компирятора. Вначале следуют вызовы GetModuleHandle, GetVersion и т.д., пару раз видел QueryPerfomanceCounter. Потом обработка командной строки и вызов функции WinMain.

3) Если таблица импорта не испорчена, то возможно её чуть подправить и преподнести практически в первоначальном виде. Иногда её можно восстановить без импрека даже при создании переходников, главное чтобы названия ф-й были на своем первоначальном месте.
Восстанавливаются они либо патчингом кода протектора, отвечающим за построение импорта, либо с пом. скрипта, запущенным там же.
Если она испорчена, то без доп. программ её, к сожалению, не вернёшь.

4) Ну а конкретно какие проблеммы возникли? Просто ставишь все исключения в игнор, и всё =)

5) Читай все подряд в разделе статей.

6) Только приблизительно, ибо все хар-ки страниц легко изменить в рантайме.

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

+1, всегда надо двигаться от простого к сложному!



Ранг: 120.2 (ветеран), 8thx
Активность: 0.120
Статус: Участник

Создано: 04 июня 2007 13:25 · Поправил: cadet
· Личное сообщение · #10

Satyr
Это скорее всего называется эмуляция процедуры, по большому счету все это не столь важно.
А вот у кого нибудь есть сам aspr 1.23 rc4 или ссылочка где взять.

А по теме, чтоб не считать кол-во остановок, можно адрес последней посмотреть в логе.




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 04 июня 2007 14:30
· Личное сообщение · #11

cadet
www.tuts4you.com/download.php?list.52



Ранг: 120.2 (ветеран), 8thx
Активность: 0.120
Статус: Участник

Создано: 04 июня 2007 16:26
· Личное сообщение · #12

HoBleen

У меня правда сегодня праздник, но все равно что-то я не вЪехал. Скачал aspr 1.23 cr1, а там распакуй меня. Но все равно спасибо, а то долго что-то на этот сайт зайти не мог. Да извинят меня создатель топика и модераторы за флуд. В принципе я только хотел узнать можно в данной версии asprotect вставлять свой код? Если да, то хотелось бы поизучать.



Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 июня 2007 18:38
· Личное сообщение · #13

Большое спасибо за ответы и Ваше внимание.

Не сочтите за наглость еше один вопрос.

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



Ранг: 120.2 (ветеран), 8thx
Активность: 0.120
Статус: Участник

Создано: 04 июня 2007 18:45
· Личное сообщение · #14

Что по вашему мнению не поддается модификации - справедливость и любовь к людям!
Я опять извиняюсь за флуд!



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 04 июня 2007 18:46
· Личное сообщение · #15

Читай "Об упаковщиках в последний раз" две части!

-----
Всем привет, я вернулся




Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 июня 2007 20:17
· Личное сообщение · #16

Спасибо. Давно читал. Просто хотел узнать Ваше мнение. Может сталкивались на практике...

Я всегда пользовался SoftIce ом. Вот решил попробовать OllyDbg (скачал olly shadow).
Возник такой вопрос. когда прога противится отладке пострашному. Чем Вы БП защищаете?
Обычные не совсем подходят (CRC считает), а хардварные тоже сносит (пытается)...
superbpm в принципе помогает. А еше может кто чем пользуется?




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 05 июня 2007 20:22
· Личное сообщение · #17

langoner плагины к Ольке поищи. В инете куча. Помоему есть для этих целей..

-----
radio uno in ibisa ...



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


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