KeygenMe 9411

Discussion in 'WASM.RESEARCH' started by Ustin_LVO, Jun 13, 2020.

Tags:
  1. Ustin_LVO

    Ustin_LVO New Member

    Blog Posts:
    0
    Joined:
    Apr 28, 2019
    Messages:
    1
    Здравствуйте, хотел поделиться своим KeygenMe (9411 - это размер исходника в байтах).
    Написано под линукс, x86 32bit, консольное приложение, не использует никаких библиотек помимо стандартной. Уровень сложности, надеюсь, высокий. RSA и прочие алгоритмы с открытым ключом не использую.
     

    Attached Files:

  2. Indy_

    Indy_ Well-Known Member

    Blog Posts:
    4
    Joined:
    Apr 29, 2011
    Messages:
    4,788
    Ustin_LVO,

    Увы но дружок пойми что линукс семплы никто даже открывать не будет, не говоря про попытку решения даже вручную. Тебе тоже самое подробно обьяснил на кл. Там нет общей архитектуры, мобилы крутятся на виртах и что там внутри всем пх. Для системщика это дичайшая дикость, полнейший изврат(те ревирсить это дерьмо если не понятно, оно в принципе не реверсится).
     
    M0rg0t likes this.
  3. f13nd

    f13nd Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 22, 2009
    Messages:
    2,020
    Посмотрел бы, но линукс. Надо было изначально догадаться, что большинство не возьмутся, ибо нафиг надо.
     
    Indy_ likes this.
  4. Microedition

    Microedition Active Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2008
    Messages:
    814
    Похоже на результат работы movfuscator-а. Там процесс запутывания прямолинейный, так что и деобфускатор можно реализовать простым сопоставлением с образцом. Скукотища, в общем.
    --- Сообщение объединено, Aug 19, 2020 ---
    А, не, просто декомпилировать не получится, т. к. там же есть перемешивание инструкций, переименование регистров. Но в любом случае можно восстановить исходный CFG.
     
  5. Indy_

    Indy_ Well-Known Member

    Blog Posts:
    4
    Joined:
    Apr 29, 2011
    Messages:
    4,788
  6. RETN

    RETN Member

    Blog Posts:
    4
    Joined:
    Apr 4, 2020
    Messages:
    71
    Ustin_LVO,
    :blum2:
    Здрастье,
    тоже линь и тоже ktm (keygen - try - mi) aka (кейгень- попробуй - меня) :sarcastic:(с)
    https://wasm.in/attachments/b19-zip.6325/?temp_hash=894b4aff7b954a1077fc80ec76bfbe87


    Тож линь, под асик...
    - кто угадает - тому торт, ну только если Бабушка Ванга есть.
    Как прошива дешифруется/шифруется, как же менять там долбаную частоту и вольтаж? :boast:
    P.S: Ни в жизни не получится алго разреверсить, хотя оно и надо было бы кому то. Но увы :preved:
     

    Attached Files:

    • b19.zip
      File size:
      166.6 KB
      Views:
      510
  7. Microedition

    Microedition Active Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2008
    Messages:
    814
    RETN, а где сам asic в комплекте с семплом?
    --- Сообщение объединено, Aug 21, 2020 ---
    Тут есть доклад, как эта штука работает: https://github.com/xoreaxeaxeax/movfuscator/tree/master/slides.

    Насколько я понял из кода самого обфускатора, он переводит исходник (точнее, промежуточное представление от компилятора) в один большой конечный автомат. Примитивы, полученные от компилятора, заменяются на наборы mov-ов. Таким образом каждый набор реализует какой-то примитив. Интересно, что можно перемежать наборы, перетасовывать как угодно, - автомату на эту будет пофиг. А вот менять порядок отдельных инструкций в наборе нельзя, в этом смысле наборы атомарны. Так что попоставление с образцом актуально. Ну и дальше восстанавливаем автомат, выполняем оптимизации. Тут на ум приходит llvm, можно прогнать через него. На выходе будет уже что-то более внятное.

    Можно было бы заняться этим, но что-то неохота. Писать эти ваши дизассемблеры для x86 (пусть даже для одной инструкции mov) - занятие неблагодарное :lol:
    --- Сообщение объединено, Aug 21, 2020 ---
    Чет забыл упомянуть Indy_ в сообщении, дополнил.
     
    RETN likes this.
  8. Rel

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    Ну так и есть. Проблема в том, что никто так и не сподобился нормальную деобфускацию для него написать, хотя попытки вроде были: https://github.com/kirschju/demovfuscator - посмотри, мало ли. Проблема в том, что мувфускатор это скорее забавный пруф оф консепт, в здравом уме для проприетарного софта его вряд ли кто-то станет применять. Хотя да, его можно рассматривать, как своего рода виртуализацию нативного кода.
     
  9. Microedition

    Microedition Active Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2008
    Messages:
    814
    Конкретно на этом keygenme деобфускатор валится, пока непонятно, в чем там дело.

    Покопаю немного, идея-то хорошая. Правда, он на C++ написан. Глобальные переменные, шаблоны... Такие вещи должны на человеческих языках писаться, типа ML, а не на этом.
     
    Last edited: Aug 22, 2020
  10. Rel

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    Ну я говорю, что никто нормально еше пока не запилил.

    Да, он под копотом capstone и keystone использует, так что можно на почти любом языке написать аналог))
     
  11. Microedition

    Microedition Active Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2008
    Messages:
    814
    Вот, кстати, интересное чтиво от создателя того деобфускатора. Там есть ссылки на работы, посвященные девиртуализации. Конкуренты indy.

    https://kirschju.re/static/ba_jonischkeit_2016.pdf
     
  12. Rel

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    Если вдруг тебе будет интересно. Есть такой интересный проект Tigress - обфускатор на уровне сорсов на сишечке, умеет в том числе и виртуализировать код. И само собой есть попытки его снимать в автоматике типа https://github.com/JonathanSalwan/Tigress_protection - как бы к конкретной теме это не относится, но может тебе будет интересно посмотреть, как там что делается. Но тоже это ни в коем случае не стоит расценивать, как полноценный и готовый к продакшену деобфускатор.
     
  13. Microedition

    Microedition Active Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2008
    Messages:
    814
    Да в общем-то идея (почти) та же, как она описана в том тезисе, принципиально ничего нового.

    --
    Правда, та работа (тезис) меня не полностью, так сказать, удовлетворила. Да, автор приводит некоторую теорию, но все как-то поверхностно. Пока поймёшь, как работает алгоритм деобфускации в его изложении, умом поедешь. Надо искать более фундаментальные труды.
     
  14. Microedition

    Microedition Active Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2008
    Messages:
    814
    Принес вам графы вызовов:

    [​IMG]

    И переходов вообще:

    [​IMG]

    Значение 00000000 - это на самом деле точка входа, а 080c34b8 - функция main.
    --- Сообщение объединено, Aug 25, 2020 ---
    Ну и все сразу. для наглядности:

    [​IMG]
    --- Сообщение объединено, Aug 25, 2020 ---
    Переходы не все, только безусловные.
     
  15. Microedition

    Microedition Active Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2008
    Messages:
    814
    Ну а если кому-то вдруг интересно, вот более полный граф:

    [​IMG]

    Обычные дуги - вызовы функций, пунктирные - переходы по меткам. А число на дуге - адрес, откуда переход, символы типа nei, lti - это код операции сравнения, приводящей к переходу. Если нет, то это безусловный переход.

    Сразу видно, весь треш в происходит в функции sub_0804be47. Ну а там либо быдлокод, либо макроговно.
     
  16. Microedition

    Microedition Active Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2008
    Messages:
    814
    Написал эмулятор, чтобы можно было запустить этот keygenme под виндой. Вдруг кому-то захочется.

    Ну и хелло-ворлд заодно добавил, проверить.

    Правда, сейчас эмулятор довольно сильно тормозит, т. к. все инструкции каждый раз дизассемблируются заново. Надо кеширование добавить. Ну и другие причины есть.
     

    Attached Files:

    Last edited: Aug 28, 2020
    RETN likes this.
  17. RETN

    RETN Member

    Blog Posts:
    4
    Joined:
    Apr 4, 2020
    Messages:
    71
    Круто. На x64 Win 10 2004 19041 (последняя) норм эмуль отрабатывает.
    Но не все файлы пашут: "ERROR: elf_parse() failed"
     
  18. Microedition

    Microedition Active Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2008
    Messages:
    814
    RETN, ну там там только 32-х разрядные поддерживаются, i386 которые. И я не все системые вызовы реализовал, только те, что в keygenme.

    Перешёл, кстати, на другой дизассемблер (nmd_assembly), с ним раза в три быстрее работает. Правда, в нем есть некоторые косяки, что печалит слегка. Сырой ещё.
     
  19. Rel

    Rel Well-Known Member

    Blog Posts:
    2
    Joined:
    Dec 11, 2008
    Messages:
    5,317
    Хорошо, что Инде этого не видел, он бы тебя основательно облил гуаном за использование capstone. Если уж его использовал, то могу бы сразу и unicorn заюзать, они от одного автора, хорошо интегрируются друг с другом. Во всяком случае так говорят, я же не авер, чтобы крекми решать и тысячи семплов гонять.
     
  20. Microedition

    Microedition Active Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2008
    Messages:
    814
    Rel, проверил unicorn, чет c ним медленнее, чем мой вариант. Вроде как там есть jit, но что-то он никакой. А я уж было обрадовался, что все теперь летать будет.