Здравствуйте, хотел поделиться своим KeygenMe (9411 - это размер исходника в байтах). Написано под линукс, x86 32bit, консольное приложение, не использует никаких библиотек помимо стандартной. Уровень сложности, надеюсь, высокий. RSA и прочие алгоритмы с открытым ключом не использую.
Ustin_LVO, Увы но дружок пойми что линукс семплы никто даже открывать не будет, не говоря про попытку решения даже вручную. Тебе тоже самое подробно обьяснил на кл. Там нет общей архитектуры, мобилы крутятся на виртах и что там внутри всем пх. Для системщика это дичайшая дикость, полнейший изврат(те ревирсить это дерьмо если не понятно, оно в принципе не реверсится).
Посмотрел бы, но линукс. Надо было изначально догадаться, что большинство не возьмутся, ибо нафиг надо.
Похоже на результат работы movfuscator-а. Там процесс запутывания прямолинейный, так что и деобфускатор можно реализовать простым сопоставлением с образцом. Скукотища, в общем. --- Сообщение объединено, 19 авг 2020 --- А, не, просто декомпилировать не получится, т. к. там же есть перемешивание инструкций, переименование регистров. Но в любом случае можно восстановить исходный CFG.
Ustin_LVO, Здрастье, тоже линь и тоже ktm (keygen - try - mi) aka (кейгень- попробуй - меня) (с) https://wasm.in/attachments/b19-zip.6325/?temp_hash=894b4aff7b954a1077fc80ec76bfbe87 Тож линь, под асик... - кто угадает - тому торт, ну только если Бабушка Ванга есть. Как прошива дешифруется/шифруется, как же менять там долбаную частоту и вольтаж? P.S: Ни в жизни не получится алго разреверсить, хотя оно и надо было бы кому то. Но увы
RETN, а где сам asic в комплекте с семплом? --- Сообщение объединено, 21 авг 2020 --- Тут есть доклад, как эта штука работает: https://github.com/xoreaxeaxeax/movfuscator/tree/master/slides. Насколько я понял из кода самого обфускатора, он переводит исходник (точнее, промежуточное представление от компилятора) в один большой конечный автомат. Примитивы, полученные от компилятора, заменяются на наборы mov-ов. Таким образом каждый набор реализует какой-то примитив. Интересно, что можно перемежать наборы, перетасовывать как угодно, - автомату на эту будет пофиг. А вот менять порядок отдельных инструкций в наборе нельзя, в этом смысле наборы атомарны. Так что попоставление с образцом актуально. Ну и дальше восстанавливаем автомат, выполняем оптимизации. Тут на ум приходит llvm, можно прогнать через него. На выходе будет уже что-то более внятное. Можно было бы заняться этим, но что-то неохота. Писать эти ваши дизассемблеры для x86 (пусть даже для одной инструкции mov) - занятие неблагодарное --- Сообщение объединено, 21 авг 2020 --- Чет забыл упомянуть Indy_ в сообщении, дополнил.
Ну так и есть. Проблема в том, что никто так и не сподобился нормальную деобфускацию для него написать, хотя попытки вроде были: https://github.com/kirschju/demovfuscator - посмотри, мало ли. Проблема в том, что мувфускатор это скорее забавный пруф оф консепт, в здравом уме для проприетарного софта его вряд ли кто-то станет применять. Хотя да, его можно рассматривать, как своего рода виртуализацию нативного кода.
Конкретно на этом keygenme деобфускатор валится, пока непонятно, в чем там дело. Покопаю немного, идея-то хорошая. Правда, он на C++ написан. Глобальные переменные, шаблоны... Такие вещи должны на человеческих языках писаться, типа ML, а не на этом.
Ну я говорю, что никто нормально еше пока не запилил. Да, он под копотом capstone и keystone использует, так что можно на почти любом языке написать аналог))
Вот, кстати, интересное чтиво от создателя того деобфускатора. Там есть ссылки на работы, посвященные девиртуализации. Конкуренты indy. https://kirschju.re/static/ba_jonischkeit_2016.pdf
Если вдруг тебе будет интересно. Есть такой интересный проект Tigress - обфускатор на уровне сорсов на сишечке, умеет в том числе и виртуализировать код. И само собой есть попытки его снимать в автоматике типа https://github.com/JonathanSalwan/Tigress_protection - как бы к конкретной теме это не относится, но может тебе будет интересно посмотреть, как там что делается. Но тоже это ни в коем случае не стоит расценивать, как полноценный и готовый к продакшену деобфускатор.
Да в общем-то идея (почти) та же, как она описана в том тезисе, принципиально ничего нового. -- Правда, та работа (тезис) меня не полностью, так сказать, удовлетворила. Да, автор приводит некоторую теорию, но все как-то поверхностно. Пока поймёшь, как работает алгоритм деобфускации в его изложении, умом поедешь. Надо искать более фундаментальные труды.
Принес вам графы вызовов: И переходов вообще: Значение 00000000 - это на самом деле точка входа, а 080c34b8 - функция main. --- Сообщение объединено, 25 авг 2020 --- Ну и все сразу. для наглядности: --- Сообщение объединено, 25 авг 2020 --- Переходы не все, только безусловные.
Ну а если кому-то вдруг интересно, вот более полный граф: Обычные дуги - вызовы функций, пунктирные - переходы по меткам. А число на дуге - адрес, откуда переход, символы типа nei, lti - это код операции сравнения, приводящей к переходу. Если нет, то это безусловный переход. Сразу видно, весь треш в происходит в функции sub_0804be47. Ну а там либо быдлокод, либо макроговно.
Написал эмулятор, чтобы можно было запустить этот keygenme под виндой. Вдруг кому-то захочется. Ну и хелло-ворлд заодно добавил, проверить. Правда, сейчас эмулятор довольно сильно тормозит, т. к. все инструкции каждый раз дизассемблируются заново. Надо кеширование добавить. Ну и другие причины есть.
Круто. На x64 Win 10 2004 19041 (последняя) норм эмуль отрабатывает. Но не все файлы пашут: "ERROR: elf_parse() failed"
RETN, ну там там только 32-х разрядные поддерживаются, i386 которые. И я не все системые вызовы реализовал, только те, что в keygenme. Перешёл, кстати, на другой дизассемблер (nmd_assembly), с ним раза в три быстрее работает. Правда, в нем есть некоторые косяки, что печалит слегка. Сырой ещё.
Хорошо, что Инде этого не видел, он бы тебя основательно облил гуаном за использование capstone. Если уж его использовал, то могу бы сразу и unicorn заюзать, они от одного автора, хорошо интегрируются друг с другом. Во всяком случае так говорят, я же не авер, чтобы крекми решать и тысячи семплов гонять.
Rel, проверил unicorn, чет c ним медленнее, чем мой вариант. Вроде как там есть jit, но что-то он никакой. А я уж было обрадовался, что все теперь летать будет.