Как стать автором
Обновить
10
0

Пользователь

Отправить сообщение
А кто это слева, Сноуден? :)

И спасибо за интересные подкасты
лучше поздно чем никогда
Эх, библиотеки уже не те пошли :(
А возможность импортировать закладки из Opera 12 есть в коробке?
Тоже самое, решил в Opere через переопределение заголовков, установил Accept-Language: en-gb, заработало)
Ненавижу я эти ТЗ, как-то заставили меня (тогда еще программиста фрилансера) и менеджера писать ТЗ на небольшой гос.проект, дали номер заказчика и дедлайн сутки. Худшие 24 часа в моей жизни.
Статья интересная, но как я понимаю в топике автора не будет?
Будущее на дворе, а они всё на древних x86 сидят
Что касается общей сложности, тут не поспоришь, но никто не говорит что это нужно в ручную анализировать, я лишь показал базовые возможности трассировки.

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

Почему вы так решили? Разве расшифрованные данные и вычесления хранятся в регистровой памяти? Нет, они скорее всего будут находится в промежуточном буфере, который можно предугадать(стек) и трассировать.

Поэтому я и говорю, что восстановить черный ящик на основе входа и выхода можно только в достаточно простых случаях.

Необязательно трассировать только входные параметры, мы можем трассировать стек (локальные буферы), кучу, глобальную память модуля. Т.е. можно предпологать, что в нашем распоряжении может быть доступ к любым данным используемым в закрытом алгоритме и все обращения к ним трассируются.
А вы посмотрите на пример из 0x03, в том эксперементе над кодом была произведена мутация + виртуализация, но трасса обращений к памяти была точно такой же как на не обфусцированном коде. Если мы зашифруем данные, то компилятор всё равно сгенерирует код, который будет скидывать результат в память после выполнения каждого выражения. Мы ведь не можем хранить все необходимые данные только в регистрах. Хотя в случаях когда промежуточные вычисления долго не скидываются в память, восстановить такой код достаточно сложно, но это не в стиле компиляторов.
Спасибо, в принципе я этот процесс так и представлял
Нет с темидой я не тестировал, но думаю темида будет страдать от тех же проблем
Понимаете, тут проблема в том, что мы любые вычисления можем отслеживать по обращениям к памяти. Стек, глобальная память, кучи, всё это нам извесно. Ведь если вы будете расшифровывать что-то или генерировать, то как не крути для хранения данных и промежуточных вычислений будет использоватся память. Другое дело если это реализовать на регистровой арифметике, с минимальными обращениями к памяти, такой код очень хорошо будет разбавлен мусором и его ревер будет возможен только деобфускацией. Но компиляторы генерируют код шаблонно, так что такое разве что на ассемблере можно сделать
Спасибо. Что касается VMProtect'a, то для тестов я брал именно 2.12.3, а вот Safengine бралась демо и там явно урезана обфускация

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность