eXeL@B —› Вопросы новичков —› Подскажите инструменты для деобфускации. |
Посл.ответ | Сообщение |
|
Создано: 20 октября 2017 17:48 · Поправил: Kuzya69 · Личное сообщение · #1 Распаковал одну жертву. Хотел подглядеть алгоритм регистрации. Но весь важный код запротекчен. Не могу назвать сам протектор, он ничем не определяется. Смысл там в том, что из основного кода идет call в зону протектора. Причем этот call всегда передает управление в одно и то-же место протектора. Код протектора вычисляет адрес возврата и по таблице определяет место куда далее передать управление. Тут как-бы все просто. Но сам запротекченный код уж очень сильно обфусцирован. Я попробовал вручную разобрать один участок. Взял самый короткий, но с трудом пополам разобрал. Если браться за остальные участки, то боюсь это займет много времени. Привлек к работе коде-доктор, но тот уж очень сильно косячит, да и в местах где есть мусорные условные переходы(которых немало в коде) просто бессилен. Хотелось-бы какой-нибудь посерьезнее инструмент. Подскажите, пожалуйста, какие еще есть инструменты, для деобфускации? (неплохо было-бы ссылку или саму программу сюда выложить). |
|
Создано: 20 октября 2017 19:42 · Поправил: difexacaw · Личное сообщение · #2 Kuzya69 > Причем этот call всегда передает управление в одно и то-же место протектора. Код протектора вычисляет адрес возврата и по таблице определяет место куда далее передать управление. Так у вас не обфускация, а виртуальная машина. В одно и тоже место" - это цикл вм(вход в неё). Далее происходит трансляция и эмуляция, естественно что там таблицы - case-таблицы трансляции. В общем же если вы видите подобный цикл, то лучше закрыть отладчик. ----- vx |
|
Создано: 20 октября 2017 19:53 · Личное сообщение · #3 Ну на ВМ Ореанс или ВМПротект не похоже. Я пока не встретил ни в одном из двух запротекченных участках, обрабатываемых мною, внутреннего цикла (так сказать возврат в MainHandler) и нет ленты пи-кода. Хотя частичное (не все) сохранение и в конце восстановление регистров есть. Но такая работа с регистрами возможна и в любом коде. |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 20 октября 2017 20:03 · Личное сообщение · #4 |
|
Создано: 20 октября 2017 20:13 · Поправил: Kuzya69 · Личное сообщение · #5 Вот примерный код входа в обфускацию. Примерный, потому-что я пропустил проверку на распакованность кода протектора, ну и соответственно саму распаковку, а также показал работу с абсолютными адресами, когда на самом деле используются адреса относительно ImageBase: Code:
Ну а далее идет просто обфусцированный код. В нем нет признаков ВМ, которые я описАл выше. Добавлено спустя 3 минуты ELF_7719116 Аргументы какие нибудь передаются вместе с вызовом? Нет. Только вызов call. Этот вызов и является аргументом, вернее его адрес возврата. А сразу за вызовом call, мусорные байты, ну типа затерли основной код. А вот примерная таблица (я не стал прибавлять ImageBase, оставил как в оригинале): Code:
Если к первым dword-ам таблицы прибавить ImageBase(0x400000), то получим адреса в основном коде, где как раз и стоят эти CALL-ы, ведущие в зону протектора. Ну а прибавив ImageBase ко вторым dword-ам таблицы, получим адреса начала запротекченных (обфусцированных) кодов. То-есть сравниваем адрес возрата (минус 5) со значением первого члена в таблице, ищем равный. Когда найдем, то переходим по адресу второго члена. Добавлено спустя 48 минут ELF_7719116 а имена секций, их содержание и размеры? Секций три. 0). - 0040000, 1000, "пусто", PEheader 1). - 0040100, 215????? ".text", SFX,code 2). - 219?????, 00008000, ".rsrc", import,resource Прошу прощения за вопросики(каждый вопросик это цифра), в том что я написАл. Пишу по памяти, сейчас проги нет под рукой (я и код-то по памяти написал, так что извините если где ошибся). Покажите хотя бы кусок кода с характерной обфускацией. Это позже, сейчас не могу по памяти. Помню только что там в начале несколько rdtc-команд между push pop и безусловные переходы, путающие логику, но по сути мусорные. |
|
Создано: 21 октября 2017 01:21 · Личное сообщение · #6 |
|
Создано: 21 октября 2017 01:37 · Поправил: Kuzya69 · Личное сообщение · #7 Ничего не произойдет и не происходит. Это обычный мусор. По call-у уходит в зону протекта. А потом возвращается за этим мусором . Я трассировал, и ставил MemoryBP на доступ в область секции кода. Правда иногда выходит в обычный код, как-бы выполняя внутреннюю команду call. Короче я разобрал этот код досконально. Осталось найти деобфускатор, который может справиться с запутанным (не ВМ) кодом. Наверное нужен такой, который в процессе выполнения деобфусцирует. Т.к. в коде есть команды типа "jmp R32", значение регистра которой вычисляется прямо внутри этого-же кода. Или придется кусками до этих "jmp R32" деобфусцировать. |
|
Создано: 21 октября 2017 02:01 · Поправил: dosprog · Личное сообщение · #8 |
|
Создано: 21 октября 2017 02:06 · Личное сообщение · #9 |
|
Создано: 21 октября 2017 02:57 · Личное сообщение · #10 Kuzya69 пишет: неплохо было-бы ссылку или саму программу сюда выложить Вот это вы правильно подметили Kuzya69 пишет: Не могу назвать сам протектор, он ничем не определяется У вас не определяется, а у кого-то может и определится. В случае кастома для сокращения монотонной ручной работы можно всегда написать скрипт конкретно под этот случай. |
|
Создано: 21 октября 2017 03:09 · Поправил: Kuzya69 · Личное сообщение · #11 VOLKOFF написать скрипт Какой скрипт? Скрипт с искусственным интеллектом? Я даже не представляю, как можно написать скрипт деобфускатора. Тут полноценным плагином пахнет. Скриптом еще может можно разбить поморфленный код на части, ну там сократить push-pop комбинации, ну еще несколько простеньких вариантов. Но все это в голове быстрее можно сделать. А вот учесть всякие там команды типа "cmp xchg" "push const + retn".. , помоему вообще не реально. Или какой-нибудь переход внутрь мусорных байт. |
|
Создано: 21 октября 2017 03:15 · Личное сообщение · #12 |
|
Создано: 21 октября 2017 03:19 · Поправил: Kuzya69 · Личное сообщение · #13 Там вес приличный получится. В распакованном виде она весит 533мб (в запакованном 6 с копейками), но еще надо рядом оригинальный файл держать (итого 12 метров). Проверка FileSize тоже покриптована. Скажи куда удобнее, выложу. Только не понимаю, чего гадать-то? Мне как-бы не важно, какой протектор применен. Мне важно покриптованные функции восстановить. Поэтому и спрашиваю, может кто знает инструмент какой, чтобы от обфускации избавиться. |
|
Создано: 21 октября 2017 03:19 · Личное сообщение · #14 |
|
Создано: 21 октября 2017 03:29 · Поправил: Kuzya69 · Личное сообщение · #15 |
|
Создано: 21 октября 2017 04:40 · Поправил: difexacaw · Личное сообщение · #16 Kuzya69 > в процессе выполнения деобфусцирует. Логика работы мусора может быть сколь угодно запутанной, она формируется автоматикой(компилером) и так же должна сниматься, но никак не ручным анализом. Всегда следует исходить из общих принципов и соображений. Есть инструкция для исполнения, соответственно должна быть её выборка и исполнение. Даже если инструкция разложена путём морфа(обфускации), то пайлод её остаётся, например выборка данных(DF). Она обнаруживается через останов на память. Свернуть же мусор весьма сложно, для этого нужны сложные инструменты. Обычно в этом смысла нет, достаточно следить за потоком инструкций(IF). Так как вся работа апп сводится к вызову ядерных сервисов и передачи в них аргументов, то именно это должно быть основой для анализа, так как сервисный вызов нельзя никак модифицировать. ----- vx |
|
Создано: 21 октября 2017 06:20 · Личное сообщение · #17 Kuzya69 пишет: Ну на ВМ Ореанс Oreans 90% 1. Code:
вместо push XXXXXXXX jmp XXXXXXXX 2. поиск в массиве Code:
ну и конечно сама виртуальная машина обфусцирована ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. | Сообщение посчитали полезным: difexacaw |
|
Создано: 21 октября 2017 09:02 · Личное сообщение · #18 |
eXeL@B —› Вопросы новичков —› Подскажите инструменты для деобфускации. |