Сейчас на форуме: (+5 невидимых) |
eXeL@B —› Протекторы —› Неизвестная защита |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 29 августа 2017 11:24 · Поправил: Boostyq · Личное сообщение · #1 Всем привет, Сейчас разбираю анти-чит от одной игры Сам экзешник тоже запакован, я просто запустила и сняла дамп, для статического анализа хватает Но! Ни один анализатор не определяет что это за защита, пишет что вообще ничего нет Не определяет и ладно, но изучая я вскоре поняла что все важные функции либо запакованы либо под виртуальной машиной Я пыталась в ручную трассировать разбирая куда уходит код, но потом он начинает так ветвится что не могу уследить Сам исполняемый код после дампа нормальный, но самое важное уходит под защиту Защищенный код явно обфусцирован, особенно переходы, весь код раздроблен на мелкие части и переплетается Code:
Code:
Code:
Вот листинг (начала!) защищенной функции Как я поняла, в начале собираются параметры для функции которую нужно распаковать Или может быть это контекст виртуалки Code:
Code:
Дальше выполняется операция shl в цикле Code:
Code:
Далее все уходит к xor в цикле и так далее, очень запутанно Code:
Сама ида путается, она вообще не умеет такие прыжки обрабатывать Клиент собран в 2014 году, хотя может защита прилинкована позже Все функции вызываются примерно одинаково: собирается контекст и далее распаковка Но нет единой vm_entry или чего-го похожего Может быть кто-то узнает что нибудь знакомое? Заранее спасибо ----- В облачке многоточия |
|
Создано: 29 августа 2017 11:42 · Поправил: VodoleY · Личное сообщение · #2 вангую что там вмпрот. не потому что функи знакомые.. а потому что его суют куда ток можно и куда ток нельзя.. попробуй подебажить.. и найти цикл ВМ и таблицу примитивов ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... | Сообщение посчитали полезным: BlackCode |
|
Создано: 29 августа 2017 11:50 · Поправил: Boostyq · Личное сообщение · #3 VodoleY пишет: вангую что там вмпрот Секции названы абсолютно нормально, у меня есть лицензия третий версии и там есть выбор имени секций - всех сразу, а тут все названы по разному Вот ссылка на экзешник, если нужен любой другой хостинг или доп.файлы скажите, я просто не знаю на какой лучше https://mega.nz/#!Uk9zzYyS!zsJcn3vJUBtuavH-47Sr9WUhjO_sd8oMgID60KfRw7E Так же разработчики не русские и я не думаю, что вмпрот настолько популярен за рубежом Кроме этого, если это виртуальная машина, то она здесь децентрализованная, ни как в темиде push + jmp на vm_entry, а тут один и тот же код ветвится и дублируется множество раз Даже приаттачиться не могу, в x64dbg игра закидывает исключениями, cheat engine просто крашит процесс игры, хоть через Windows хоть через Veh ----- В облачке многоточия |
|
Создано: 29 августа 2017 12:48 · Личное сообщение · #4 |
|
Создано: 29 августа 2017 12:52 · Поправил: difexacaw · Личное сообщение · #5 Boostyq > весь код раздроблен на мелкие части и переплетается А вы уверены что это именно протектор, а не приложение инфицировано, уж сильно описание и те несколько примеров кода, что вы привели похожи на макро морф. Виртуальная машина не может быть децентр. по определению, так в ней должен быть цикл выборки-трансляции-эмуляции. Если же такого цикла нет, то это не вм, а типичный обфускатор(морф). 3-й ваш код есть ничто иное, как отморфленное условное ветвление(Jge), так как адреса не передаются непосредственно в данный стаб, а статически слинкованы. Если бы адреса передавались аргументом, то была бы необходима эмуляция, те цикл вм. ----- vx | Сообщение посчитали полезным: Boostyq |
|
Создано: 29 августа 2017 13:02 · Личное сообщение · #6 |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 29 августа 2017 13:05 · Личное сообщение · #7 Короче OEP тут: Code:
Секция кода вроде чистая, анти-дебага нет, ничего особенного...разве что dll'лок для запуска с ексешником нет)) Дампите, фиксите таблицу импорта - если запускается без проблем, забудьте за это навесное говно (скорее всего, обычный пакер и не более того). Правда, там ещё steam есть. |
|
Создано: 29 августа 2017 16:01 · Личное сообщение · #8 ELF_7719116 пишет: Секция кода вроде чистая, анти-дебага нет, ничего особенного...разве что dll'лок для запуска с ексешником нет)) Дампите, фиксите таблицу импорта - если запускается без проблем, забудьте за это навесное говно (скорее всего, обычный пакер и не более того). Правда, там ещё steam есть. Спасибо за ответ, но это мне уже известно У меня нет проблем с кодом игры, как я сказала ранее - я уже сдампила и восстановила импорт, для статического анализа Проблема в доп. секции по адресу 0x12846000, сразу в ней видны массивы байт, которые, как я думаю есть защищенные функции 1) 12846000 2) 12846610 3) 12847210 ...и так далее Я думаю эта секция пришита пакером, в чем в принципе и задача - опознать его Вот начала некоторых защищенных функций: 1) 10C42E34 - не используется, или может быть используется после распаковки какой-нибудь другой функции 2) 109EF0F6 - в теории должна быть функция записи скриншота с фронт-буфера рендеринга от анти-чита 3) 112EBAF4 - в теории должна быть функция записи скриншота с бэк-буфера рендеринга от анти-чита ...и так далее Все начинаются с сохранения состояния Code:
Но в разных вариациях Интерес распаковать именно защищенные функции Вообще нет проблемы скрыться от анти-чита, но хочется знать именно что он делает ----- В облачке многоточия |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 29 августа 2017 17:21 · Личное сообщение · #9 |
|
Создано: 29 августа 2017 17:54 · Поправил: vden · Личное сообщение · #10 |
|
Создано: 29 августа 2017 18:47 · Поправил: Boostyq · Личное сообщение · #11 ELF_7719116 пишет: Всё увидел. Выложите, пожалуйста, распакованный ексешник с dll'ками, которые в папке - там их штук 7 должно быть. Хочу уточнить главное тогда - распакованный файло запускается?? Дело в том, что как я и сказала, у меня только дамп с исправленной таблицей импорта, я думаю он не работоспособен - мне только для статического анализа с идой Но вот ссылка на архив со всеми бинарниками игры Без ресурсов она вряд ли заработает, но для запуска хватит https://mega.nz/#!Yw8mDDZL!9ql0J4qQO3yaj0DFsvdsiEeEmjGFkXpllFUuDH_b2Uw Так же добавила APB_dump.exe это дампленый файл, который я изучала, в иду подгрузится, импорт есть Добавлено спустя 4 часа 47 минут Попробовала в ручную протрассировать одну функцию по адресу 0x109EF0F6 Там где смогла на автомате пропустила прыжки и т.п. Все таки имеется конечное число ответвлений, максимальная глубина 9 Чем больше островков добавляешь, тем чаще встречается переход одного в другой Вроде бы нашла все которые используются в этой функции ea64_30.08.2017_EXELAB.rU.tgz - tracetest.txt ----- В облачке многоточия |
|
Создано: 30 августа 2017 02:00 · Поправил: difexacaw · Личное сообщение · #12 Boostyq А зачем это дампить что бы потом запустить, если оно каждый раз запускается и без всяких дампов и правок ? Подпилить что бы под иду ? Так она не для разбора морфов, это статик дизасм, морф не дебажится, он сворачивается(обратная макрозамена), но для этого нужно кодить. Логика работы вначале выясняется по сервисному логу или в худшем случае по винапи логу. А это и есть реальная работа приложения, его интерфейс. А в памяти теоретически что угодно можно делать(обычно рекурсивный морф приводит к огромному выхлопу после нескольких поколений), такие извраты что их никак не проанализить известными способами. Вот и начинать нужно с общих вещей, а не сразу лезть дебажить код сгенеренный автоматикой ----- vx |
|
Создано: 30 августа 2017 08:52 · Поправил: ajax · Личное сообщение · #13 |
|
Создано: 30 августа 2017 11:09 · Поправил: Boostyq · Личное сообщение · #14 Все ковыряюсь с той трассой Перенесла в функцию чтобы скомпилить Убираю понемногу обфускационные прыжки Code:
И тому подобное, но не знаю верно ли Но не знаю чем заменить вот такое Code:
Вообщем собрала и отдала иде На выходе получилось что-то, но мне кажется это фуфло xD Code:
----- В облачке многоточия |
|
Создано: 30 августа 2017 11:21 · Личное сообщение · #15 Code:
на сях это указатель, типа такого ebp = *esp; на асме его исправить на такое Code:
Code:
да, тоесть получается так esp = esp+4; esp = esp+4; esp = esp-4; jmp esp если упростить получается jmp [esp+4]; и весь этот кусок будет Code:
|
|
Создано: 30 августа 2017 11:26 · Поправил: Boostyq · Личное сообщение · #16 Попробовала прогуглить кусочки кода Первая часть похожа на функцию decodeULEB128 Code:
Взято отсюда https://hackage.haskell.org/package/LibClang-3.4.0/src/llvm/include/llvm/Support/LEB128.h Но зачем оно здесь вообще, это типо декомпрессия сжатого числа, но тут речь должна быть о функции ----- В облачке многоточия |
|
Создано: 30 августа 2017 11:57 · Личное сообщение · #17 Boostyq кто-то с кодекэйвами и джамподелалкой поигрался прикольно. не встречал ранее. плюс, часть кода запихали в доп секцию. из-за нелинейности процедур и есть проблема анализа. трассу делать по каждой ветке, асмить и сворачивать, если нужны какие-то алго. обфускацию, как таковую, не вижу. мож clerk что-то дельное подскажет. ----- От многой мудрости много скорби, и умножающий знание умножает печаль |
|
Создано: 30 августа 2017 12:04 · Личное сообщение · #18 |
|
Создано: 30 августа 2017 13:44 · Личное сообщение · #19 ajax Так а что подсказать, сворачивать нужно - выделить базовые макро и свернуть автоматикой. Из текста #11 можно элементарно выделить следующее: Code:
Это отморфленное условное ветвление в виде макро, обратите внимание что до этой вставки переменные адресуются нормальным способом(ebp). На входе условие и два адреса, если условие верно, то переход на второй адрес без изменения контекста. Code:
- то же самое, условное ветвление. Макро в данном случае легко находятся по esp-адресации и обращению ниже стека, остальной код вроде как нормальный. Отморфленный leave/ret: Code:
Выделить ключевые макро для ветвлений, тогда можно пересобрать конструктором код в кучу, что бы стал человеко читаем. ----- vx |
|
Создано: 30 августа 2017 15:06 · Поправил: ajax · Личное сообщение · #20 |
|
Создано: 30 августа 2017 16:38 · Поправил: Boostyq · Личное сообщение · #21 Немного разобралась Растрассировала другую функцию, на этот раз я прямо на ходу деобфусцировала прыжки Далее я поняла, что в прошлый раз упустила ответвление Следующим открытием было то, что конструкция Code:
Ни что иное как call, а addr1 это адрес возврата Таким образом, всего на самом деле 3 функции внутри А поняла это через инструкции sub esp, xxx - они не обфусцированы Итого первая функция это просто враппер, сохраняет регистры и флаги в разном порядке во всех функциях В конце возвращает все назад в обратном порядке Code:
Далее вторая функция именно та, которую я упустила в первый раз Это главный расшифровщик, как я полагаю И она вызывает ту функцию, которую я нашла в самом начале Та первая это, как я и думала, функция decodeULEB128 Итого загрузила все в иду Code:
Так же прилагаю файл из которого это все получилось Там полная трасса и разбитый на функции код 25ef_30.08.2017_EXELAB.rU.tgz - tracetest2.h Полагаю, что для каждой функции код одинаковый, вначале собирается контекст Затем идет расшифровка и наверное прыжок на расшифрованную функцию, но пока не знаю точно Добавлено спустя 18 минут А нет, там не 3, а 4 Просто одну вложенную матрешку я не заметила ----- В облачке многоточия |
|
Создано: 30 августа 2017 17:07 · Личное сообщение · #22 Так что финальный код будет такой Code:
----- В облачке многоточия |
|
Создано: 31 августа 2017 01:25 · Личное сообщение · #23 Boostyq > Так что финальный код будет такой Code:
Стесняюсь спросить, вы что понимаете в этом мусоре/рандоме что то ? ajax > автоматикой... не представляю. нейросеть? Какие есчо сети, пример был в теме про вмпрот. Можно всё это весь просто обработать, только для построения графа(те покрытия всего кода) нужно свернуть макросы, так как конструктор не проходит по константам, так как не известно что это - данные, указатель, указатель на данные или код. ----- vx |
|
Создано: 31 августа 2017 01:44 · Личное сообщение · #24 нормальные люди загоняют такой код в промежуточный язык как раз созданный для таких целей, строят граф и применяют алгоритмы для оптимизации графа с оглядкой на шаблоны, подобным образом работает и оптимизаторы оптимизирующих компиляторов. в таком фарше нет смысла жать F5, асм код проще читать чем подобный выхлоп рельс. на гхабе валялось несколько проектов для оптимизации кода после обфускации, у одного из них даже шаблонизатор на луа был. |
|
Создано: 31 августа 2017 01:53 · Поправил: difexacaw · Личное сообщение · #25 shellstorm Тут не стандарт случай, морф примитивный, он реализован однократно лишь к не многим конструкциям, либо это даже не морф, а обфускация, что более вероятно. Так как макро полностью изолированы от основного кода(нет перемещения инструкций) и большая часть его не тронута. Та мат экзотика на которую вы ссылаетесь малопригодна в реале, это всё матчасть и бесполезный POC. Покажите пример как это юзать. Добавлено спустя 7 минут shellstorm > загоняют такой код в промежуточный язык Вон тс прогнал это через декомпиль, выхлоп получился совсем не пригодным к каким либо дальнейшим действиям. Декомпилем можно взять только код известного ему компиля, но никак не разбирать морф кодес стандарт декомпилем ----- vx |
|
Создано: 31 августа 2017 02:03 · Поправил: iNOTaDUMPERasYOU · Личное сообщение · #26 |
|
Создано: 31 августа 2017 02:09 · Личное сообщение · #27 |
|
Создано: 31 августа 2017 08:45 · Личное сообщение · #28 |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 31 августа 2017 09:46 · Личное сообщение · #29 iNOTaDUMPERasYOU За OEP уже выяснили. Кстати, Boostyq, в Вашем дампе нужно корректно эту EP в хидере прописать, там нуль стоит. Я ещё обратил внимание, что много указателей в космос смотрят: Code:
по крайней мере, если дампилось в OEP, тогда очевидно, что запутанный код до OEP выполняет их инициализацию. Вообще на вм это не очень похоже - как-то "обфускация" здесь больше подходит. |
|
Создано: 31 августа 2017 10:19 · Личное сообщение · #30 ELF_7719116 пишет: Секция кода вроде чистая, анти-дебага нет, ничего особенного...разве что dll'лок для запуска с ексешником нет)) Дампите, фиксите таблицу импорта - если запускается без проблем, забудьте за это навесное говно (скорее всего, обычный пакер и не более того). Правда, там ещё steam есть Да конечно можно забыть про это часть прыжков Code:
0ed4_31.08.2017_EXELAB.rU.tgz - jmp code.txt ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
. 1 . 2 . >> |
eXeL@B —› Протекторы —› Неизвестная защита |