Начинающий
- Статус
- Оффлайн
- Регистрация
- 21 Июн 2025
- Сообщения
- 94
- Реакции
- 5
Всем привет, решил написать свою первую статью про протектор, никогда не думал что малоизвестные протекторы могут меня так порадовать, приступим к статье:
От скуки я на просторах интернета ищу малоизвестные и редкие упаковщики и протекторы.
И хочу рассказать об одном интересном протекторе, который вызвал у меня нехилую такую улыбку - PELock.
Плюсом вообще малоизвестных протекторов является прежде всего отсутствие всяких готовых скриптов для распаковки, то есть это практически чистые и девственные протекторы, до которых никто не дотрагивался.
Конечно, как и любой другой упаковщик, его защита от отладки спокойно обходилась с помощью ScyllaHide, но дело в самом способе защиты - прежде всего, хочу отметить ну просто невероятно красивую обфускацию... Функции очень хорошо запутаны, и проходят через очень сложные ветвления.
А что меня заинтересовало больше всего - так это способ защиты импорт-таблицы, из-за этого я решил написать эту статью, и сижу сейчас с жуткой лыбой. В общем, он переводит импортированные функции в свои обёртки, которые состоят из ПРОЛОГА импортированной функции, а затем прыгают на середину импортированной функции. Это гениально...
На Tuts4You висит одно задание, основанное на этом PELock, задача которого состоит в распаковке. И дело в том, что из-за этой обёртки над импорт-таблицей, никто не может распаковать файл, решения на задаче до сих пор нет, а публикация была 2022 года.
Хотя, конечно, я уже представляю, как это решить, и это достаточно просто - нужно написать скрипт на x64dbg, который бы сконвертировал все эти обёртки в импорт-таблицу, сдампил код, и всё это собрал воедино.
Облегчает то, что протектор запускает код по его начальному базовому адресу, и сохраняет все адреса других секций. То есть, импорт-таблица находится всё по той же 402000, например. Просто там на самом деле не импорт-таблица, а куски импортированных функций с переходом на них.
Естественно, всё это ещё и генерируется динамически.
Программы, защищённые PELock с 2 килобайт возрастают до 613 килобайт, можно представить какой функционал там вложили)
Кода реально много, поэтому я долго не разбирался с тем, как реализован переход на оригинальный код, но вот такая реализация защиты импорт-таблицы меня очень сильно порадовала...
В моей программе для тестирования протектора был MessageBoxA, и чтобы определить, как PELock доходит до оригинального кода, мне надо было узнать хотя бы адрес оригинального кода и точки возврата в стеке, а поэтому надо было поставить точку останова на этой функции, и некоторое время я не понимал, почему точка останова на конце функции срабатывает, а на начале - нет.
Как раз по причине этого интереснейшего решения защиты импорт-таблицы - MessageBoxA исполнялся не с начала, а с середины.
Ссылка на протектор:
От скуки я на просторах интернета ищу малоизвестные и редкие упаковщики и протекторы.
И хочу рассказать об одном интересном протекторе, который вызвал у меня нехилую такую улыбку - PELock.
Плюсом вообще малоизвестных протекторов является прежде всего отсутствие всяких готовых скриптов для распаковки, то есть это практически чистые и девственные протекторы, до которых никто не дотрагивался.
Конечно, как и любой другой упаковщик, его защита от отладки спокойно обходилась с помощью ScyllaHide, но дело в самом способе защиты - прежде всего, хочу отметить ну просто невероятно красивую обфускацию... Функции очень хорошо запутаны, и проходят через очень сложные ветвления.
А что меня заинтересовало больше всего - так это способ защиты импорт-таблицы, из-за этого я решил написать эту статью, и сижу сейчас с жуткой лыбой. В общем, он переводит импортированные функции в свои обёртки, которые состоят из ПРОЛОГА импортированной функции, а затем прыгают на середину импортированной функции. Это гениально...
На Tuts4You висит одно задание, основанное на этом PELock, задача которого состоит в распаковке. И дело в том, что из-за этой обёртки над импорт-таблицей, никто не может распаковать файл, решения на задаче до сих пор нет, а публикация была 2022 года.
Хотя, конечно, я уже представляю, как это решить, и это достаточно просто - нужно написать скрипт на x64dbg, который бы сконвертировал все эти обёртки в импорт-таблицу, сдампил код, и всё это собрал воедино.
Облегчает то, что протектор запускает код по его начальному базовому адресу, и сохраняет все адреса других секций. То есть, импорт-таблица находится всё по той же 402000, например. Просто там на самом деле не импорт-таблица, а куски импортированных функций с переходом на них.
Естественно, всё это ещё и генерируется динамически.
Программы, защищённые PELock с 2 килобайт возрастают до 613 килобайт, можно представить какой функционал там вложили)
Кода реально много, поэтому я долго не разбирался с тем, как реализован переход на оригинальный код, но вот такая реализация защиты импорт-таблицы меня очень сильно порадовала...
В моей программе для тестирования протектора был MessageBoxA, и чтобы определить, как PELock доходит до оригинального кода, мне надо было узнать хотя бы адрес оригинального кода и точки возврата в стеке, а поэтому надо было поставить точку останова на этой функции, и некоторое время я не понимал, почему точка останова на конце функции срабатывает, а на начале - нет.
Как раз по причине этого интереснейшего решения защиты импорт-таблицы - MessageBoxA исполнялся не с начала, а с середины.
Ссылка на протектор:
Пожалуйста, авторизуйтесь для просмотра ссылки.