icebp (INT1) как последствие запаковщика?

Тема в разделе "WASM.BEGINNERS", создана пользователем KaperGL, 6 апр 2021.

  1. KaperGL

    KaperGL New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2021
    Сообщения:
    14
    Это код приложения, работающего с программатором.
    Мало-мальский начальный опыт у меня был, поскольку разбирал слабозащищённые приложения,
    но на этот раз я столкнулся с проблемой, которая мне пока не под силу.
    На сколько я могу понимать исполнительный файл частично запакован.
    IDA и Olly определили одно и то же смещение для TlsCallback по адресу 0х00A81AF0

    :00A81AF0 jmp near ptr loc_A7A8C1+4 | E9 D0 8D FF FF
    :00A81AF0 TlsCallback_0 endp
    ..............................
    Но в таком случае я попадаю на не законченную инструкцию CMP
    0x00A7A8C1 3D 4E 16 B4 E9 F1 D4 00 00 FF 30 8F 04 24 60 FF

    :00A7A8C1 loc_A7A8C1:
    :00A7A8C1 cmp eax, 0E9B4164Eh |3D 4E 16 B4 E9
    :00A7A8C6 icebp |F1
    :00A7A8C7 aam 0 |D4 00
    :00A7A8C9 add bh, bh |00 FF
    :00A7A8CB xor [edi-9FDBFCh], cl
    :00A7A8D1 jz short loc_A7A8F7
    :00A7A8D3 and dl, al
    :00A7A8D5 and al, 0
    :00A7A8D7
    ...............................
    Если выполнить разбор начиная с указанного адреса, получаю такую конструкцию
    0x00A7A8C5 E9 F1 D4 00 00 FF 30 8F 04 24 60 FF 74 24 20

    :0A7A8C5 jmp loc_A87DBB ; CODE XREF: TlsCallback_0
    :00A7A8CA ; ---------------------------------------------------------------------------
    :00A7A8CA push dword ptr [eax] ; CODE XREF: sub_A876A8+F
    :00A7A8CC pop dword ptr [esp]
    :00A7A8CF pusha
    :00A7A8D0 push dword ptr [esp+20h]
    :00A7A8D4 retn 24h
    .......................................................
    :00A87DBB loc_A87DBB: ; CODE XREF: :loc_A7A8C5
    :00A87DBB pusha
    :00A87DBC push dword ptr [esp+4]
    :00A87DC0 mov dword ptr [esp+20h], 4F7490EEh
    :00A87DC8 lea esp, [esp+20h]
    :00A87DCC jo loc_A886DC ; CODE XREF: :00A87D88
    :00A87DD2 pushf
    :00A87DD3 mov dword ptr [esp], 0DD73E297h
    :00A87DDA pushf
    :00A87DDB pusha
    :00A87DDC mov [esp+8], ch
    :00A87DE0 lea esp, [esp+24h]
    :00A87DE4 jmp loc_A896CE
    ...........................................
    Если есть возможность, дайте направление дальнейшего анализа - какие-то ресурсы в виде патчей или литературы,
    может где-то разбирались похожие ситуации и методы их решения.

    ссылка на программу https://cloud.mail.ru/public/9qHa/SjnoWHeJG
     
  2. FoxB

    FoxB Member

    Публикаций:
    0
    Регистрация:
    10 июл 2003
    Сообщения:
    105
    vmprotect
     
  3. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    KaperGL,

    Смотри таблицы опкодов, по памяти если сказать F1 это префикс блокировки. Получается что у тебя кривой диз. VMP не использует такие конструкции. Даже если помотреть:

    > :00A7A8CF pusha

    - нет такой инструкции в 86/64.

    Каким кривым декомпилем это разобрано ?
    --- Сообщение объединено, 7 апр 2021 ---
    Код (Text):
    1. :00A7A8C6 icebp |F1
    2. :00A7A8C7 aam 0 |D4 00
    3. :00A7A8C9 add bh, bh |00 FF
    4. :00A7A8CB xor [edi-9FDBFCh], cl
    - декомп ошибся прошёл ветвь и влез в середину инструкций. Он не может туда попасть, вероятно ты туда вписал int3 отладчиком, из за чего диз не верно разобрал ветку.
     
    Последнее редактирование модератором: 7 апр 2021
  4. KaperGL

    KaperGL New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2021
    Сообщения:
    14
    1 - опкоды, естественно, перед глазами.

    2 - про F1 я прочитал перед тем, как задать вопрос здесь, вполне разобравшись в его прямом назначении.

    3 - Возможно я не правильно понял замечание - "нет такой инструкции в 86/64.", но инструкция PUSHA заявлена во всех "мурзилках" асма на 86/64 (опкод 60 - сохранение всех 8 регистров). Исключения, как я понял преимущественно в компиляторах, которые требуют непосредственно переноса каждого регистра посредством PUSH, поскольку PUSHA им игнорируется.

    4 - не могу со своим отсутствием опыта судить, насколько кривой у меня диз. IDA 6.8 и Olly 2.1 показали один и тот же результат при первом проходе.
    Естественно я ничего не вписывал и не менял предложенный порядок. И именно об этом мой вопрос и был сформулирован, и приложен исходник.

    5 - "VMP не использует такие конструкции" - поскольку набор инструментов слабый и пока собираю, одна из утилит провела анализ с результатом "Generic check : VMProtect v.2.07 ". Остальные не определили этого факта. Объективно, конечно же я не могу судить о наличии методов VMP.

    6 - руки понюхал - говном не воняют, значит как минимум не из жопы... На критику такого рода не обижаюсь, понимаю, что она неизбежна. Мне нужно набивать руку, набивать глаз и учиться решать такие проблемы.

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

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    KaperGL,

    2. F1 кидает отладочную ловушку, блокировка это F0.

    3. Я имел ввиду что pushA и pushAD имеют общий опкод, для первой сохраняются 16-битные регистры, тоесть теряется старшая часть расширенных. А такое не нужно в 86, а в 64(не путать с режимом совместимости тот самый wow) и вовсе приведёт к исключению:

    Код (Text):
    1. IF 64-bit Mode
    2. THEN #UD
    3. FI;
    Если это останов, то дальше нет смысла дизить. вмп активно использует исключения. Диз пошёл по данным, либо не с начала ветви(это по опкодам нужно смотреть).

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

    https://archivevx.net/exelab/f/pages/action=vthread&forum=6&topic=24488&page=0.html#12
    https://wasm.in/threads/kak-poborot-ehtot-trjuk-v-dizzasemblere.33524/#post-414102
    --- Сообщение объединено, 7 апр 2021 ---
    KaperGL,

    6. Ты не обижайся, тут такое отношение к новичкам норма оно не со зла" это просто так скажем мысли вслух :)

    По причине того, что обычно леняться открыть документацию или есчо какие то действия выполнить. Полтора десятилетия это всё мусолить" конечно у любого будет так, не желание описывать подробности, тк есть поиск как минимум на двух форумах этот и дамп кл.
     
  6. KaperGL

    KaperGL New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2021
    Сообщения:
    14
    Да, я уже начитался про суровость VMP и ему подобных и на этом форуме и на других, поверхностно ознакомился с его методами. Понятно что можно сливать эту затею до лучших времён.
    Сам девайс работает через FTDI. Потыкал кнопки под сниффером, вижу инструкции, вижу данные, но беда в том, что все пакеты подкрепляются CRC32 (возможно) с не определённым пока мною полиномом. Перепробовал все известные и прямо и обратно с опорой 00 и FF, да и после модификации файлов при сохранении ещё рассчитываются контрольные суммы. Из-за них в общем-то и был замут с разбором кода.
    Спасибо откликнувшимся!
     
  7. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    KaperGL,

    Искал долго нашёл что то по вмп https://archivevx.net/exelab/f/pages/action=vthread&forum=6&topic=25760&page=0.html я искал иное. Там было в какой то теме сборка я даже могу билд поискать у себя, смысл был в том что крутился протектор, затем лог по выборке собирался выделялась сама вирт машина. Но я не могу найти ту тему.
     
  8. Carnival

    Carnival New Member

    Публикаций:
    0
    Регистрация:
    31 дек 2020
    Сообщения:
    26
    Адрес:
    ::1/128
    Ерундой не занимайтесь: не слушайте якобы спецов здесь, то что у человека много сообщений не значит что в них есть какая-либо польза.
    Тем более не бойтесь ковырять протекторы, вмп декомпилировался на протяжении всего своего существования в статике, не нужно ничего крутить и запускать, это для идиотов.
    Сперва это сделал Vamit с экселаба, и декомпилятор даже был публичным до тех пор пока вамиту не надоело вытаскивать палки из колес из-за публичности, затем проект продолжил существовать в привате и способен декомпилировать код из ультра в полный оригинал и даже вставить туда где он был изначально. Кстати этот персонаж, которого вы слушаете хамил автору этой тулзы и был послан нахрен на том же лабе.
    Затем Can1357 запустил публичные стримы и в реальном времени написал декомпилятор для вмп транслируя это всем. Он справляется с задачей не так чисто как VMSweeper вамита, но у него мощный оптимизатор, который снимает большую часть обфускаций засчет промежуточного представления. Есть небольшие проблемы с конечной компиляцией обратно в X86, код получается не такой эффективный как был в оригинале, но вполне работоспособен и читаем например в иде. Кроме этого, проект публичный, вы сами можете его изучить https://github.com/can1357/NoVmp, он базируется на языке VTIL который и служит пром представлением для оптимизаций. На данный момент дерматолог (автор вмп) не предоставил никакого ответа на декомпиль, хотя обещал мясо.
     
    Rel нравится это.
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.235
    Да куда проще сказать, кому он не хамил, и кем не был послан нахрен.
     
  10. KaperGL

    KaperGL New Member

    Публикаций:
    0
    Регистрация:
    5 апр 2021
    Сообщения:
    14
    За ссылки и поддержку спасибо. Буду заполнять пробелы. Вчера наскочил на https://wasm.in/threads/kto-nibud-lomal-vmprotect.20683/page-14 как отправную точку. Понятное дело, что вопрос не закроется за ближайшие дни, потихоньку из разных источников постараюсь собирать мозаику в голове. Уже нашёл VMP light - как минимум смогу ставить эксперименты над своими кодами, тем более чтобы что-то сломать, нужно понимать как это изначально устроено.
     
  11. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    KaperGL,

    То что написал Carnival чушь полная и не правда. Последняя решаемая задача перед закрытием кл, никто кроме меня не осилил и это только определение вектора для начала работы с кодом вмп и послан Vamit я никуда небыл https://archivevx.net/exelab/f/pages/action=vthread&forum=13&topic=26404&page=3.html#3

    Что он затирает про декомпилеры тоже чушь - они не паблик, пилятся очень долго вручную и для каждого протектора разные. С таким успехом дешевле не покупать декомпилер, а отдать семпл на распаковку, тому у кого уже есть декомп. А есчо тот троль позабыл, что есть разница между понять разобраться и решить vs купить решение.
    --- Сообщение объединено, 8 апр 2021 ---
    Ну и докучи аргумент https://archivevx.net/exelab/f/pages/action=vthread&forum=13&topic=25465&page=2.html#1