![]() |
eXeL@B —› Вопросы новичков —› Проблема с двухслойной защитой. |
Посл.ответ | Сообщение |
|
Создано: 18 марта 2017 12:14 · Поправил: CharlyChaplin · Личное сообщение · #1 Привет! Не получается разобраться с двойной защитой, в которой упаковщик MPress 2.17 + PeStubOEP 1.6. Прежде чем обратиться на форум попытался сам решить задачу: скачал PeStub и MPress и упражнялся с файлами, снимая защиту. По отдельности у меня получается, но здесь - нет. Читал разные Tutorials по восстановлению краденных байт, по распаковке, а также руководство(Распаковка PeStubOEP - двухслойная защита https://exelab.ru/rar/htm.php?n=085) с exelab.ru. Хотя и говорят там всё легко, но я не смог сам разобраться, сколько бы не бился. Прошу вашей помощи. 1. (Рис. 1) Проанализировал файл. Как видим имена секций затёрты. 2. (Рис. 2) Запускаем в отладчике и оказываемся в модуле ntdll. Жмём F9 и оказываемся на 5E7000. Из моего небольшого опыта я сразу понимаю, что здесь поработал PeStub. Но возник вопрос, что за адрес кладётся в стек - 5E425D? Не адрес ли это упаковщика? Также вопрос, с чего начинается программа, я в том плане, что изначально идёт не работа Stub, а как-будто начинает работу упаковщик, а потом уже идёт Stub. Может быть программа сначала была обработана Stubом, а потом упакована MPress? 3. (Рис. 3) Для интереса смотрю на адрес 5E425D и вижу PUSHAD, но что вызывается после него я так и не понял. Хотя вроде как после сохранения регистров переходят на упаковщик, если не ошибаюсь. Также я поставил бряк на GetModuleHandleA, как было в одном из руководств по распаковке MPress. Жмём F9 до тех пор, пока не остановимся на бряке. 4. (Рис 4.) После остановки мы оказываемся на GetModuleHandleA. Идём в конец и ставим бряк на выход из функции. Опять жмём F9, чтобы опять остановиться на этой функции. То есть первое срабатывание мы пропустили. 5. (Рис. 5) Пришли сюда второй раз. Выходим из функции и оказываемся на 44E870. Мотаем в конец, пока не увидим POPAD с последующим переходом на точку входа программы. POPAD для меня служит дополнительным подтверждением, что потом идёт именно OEP, т.к. упаковщик должен вернуть все регистры на свои места и передать управление программе. Вроде всё нормально, но потом возникла проблема. 6. (Рис. 6) При помощи OllyDump дампим программу, находясь на OEP. 7. (Рис. 7) В ImpREC я хотел прикрутить импорт, но увидел вот это. Вот здесь я остановился и просто не знаю что делать дальше. Импорта нет, прикручивать нечего. ![]() Кто знает, помогите плиз. ![]() Извиняюсь, забыл выложить исследуемый файл: http://dropmefiles.com/IGeYS ![]() |
|
Создано: 18 марта 2017 12:58 · Поправил: Jaa · Личное сообщение · #2 Сам файл с "двухслойной защитой" где? Или вы предлагаете колдовать по скриншотам которые вы сделали? Добавлено спустя -44 минут CharlyChaplin пишет: 7. (Рис. 7) В ImpREC я хотел прикрутить импорт, но увидел вот это. Если импрек автоматом не нашел то или ему надо указать его вручную или восстановить сначало импорт после протектора, а потом указывать. Дельный совет, почитайте вначале хотя бы основы "Введение в крекинг с нуля, с помощью ollydbg". Миллион видео по распаковке несложных протекторов. ![]() |
|
Создано: 18 марта 2017 13:16 · Личное сообщение · #3 |
|
Создано: 18 марта 2017 13:20 · Личное сообщение · #4 CharlyChaplin Отвечаю на твой вопрос (рис. 3): Code:
E8 00000000 - это call на адрес следующей команды. Что происходит в момент вызова? В стек пушится адрес возврата. После чего происходит переход на новый адрес. В данном случае новый адрес - это следующая за этим call команда. Для информации: переход на адрес может быть не только через jmp, но и через push address / ret. Тогда при ret будет переход на address. Таким образом, следующая команда pop eax, забирает из стека адрес возврата, который туда лёг в результате предыдущего вызова call. Этот трюк используется для получения текущего адреса в базонезависимом коде. Что происходит дальше: Code:
1. Получение смещения данных (текущий адрес + 0B5Ah = 005E425E + 0B5Ah = 5E4DB8h) 2. Загрузка данных 3. Исправление указателя ----- EnJoy! ![]() |
|
Создано: 18 марта 2017 22:26 · Личное сообщение · #5 |
|
Создано: 19 марта 2017 04:46 · Личное сообщение · #6 инфа для распаковки ![]() кстати внутри встроили западло типа дополнительной заshitы 1. 0044DE1A cmp eax, 1C6713 ; проверка на размер файла 2. 0044DE25 call 0044D4BC ; в процедуре читаются байты из файла, если не совпадут - вырубает комп через ExitWindowsEx ![]() |
|
Создано: 19 марта 2017 09:23 · Поправил: CharlyChaplin · Личное сообщение · #7 AkaBOSS, спасибо огромное! А нужно ли здесь восстанавливать байты после PeStub? Видимо я не с того места начинаю дампить. Почему-то после дампа и восстановления импорта загрузка в отладчике всё равно начинается с ntdll. То есть распаковка не произошла. Также, почему результаты в ImpREC и CHimpREC разные (на рисунке), хотя стою на OEP? ![]() ![]() |
|
Создано: 19 марта 2017 10:13 · Поправил: -=AkaBOSS=- · Личное сообщение · #8 CharlyChaplin пишет: А нужно ли здесь восстанавливать байты после PeStub? о каких байтах речь? дамп стоя на оеп + прикрутить импорт, и всё работает CharlyChaplin пишет: загрузка в отладчике всё равно начинается с ntdll по секрету - она и без отладчика оттуда начинается в отладчике есть настройка, на какой точке останавливать приложение при запуске - системный старт, TLS, ModuleEntryPoint или WinMain (если определился) CharlyChaplin пишет: Также, почему результаты в ImpREC и CHimpREC разные (на рисунке), хотя стою на OEP? а почему рва и размер IAT в импрек не ввёл? автопоиск не всегда работает корректно, ручками надо учиться определять ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Проблема с двухслойной защитой. |
Эта тема закрыта. Ответы больше не принимаются. |