Это код приложения, работающего с программатором. Мало-мальский начальный опыт у меня был, поскольку разбирал слабозащищённые приложения, но на этот раз я столкнулся с проблемой, которая мне пока не под силу. На сколько я могу понимать исполнительный файл частично запакован. 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
KaperGL, Смотри таблицы опкодов, по памяти если сказать F1 это префикс блокировки. Получается что у тебя кривой диз. VMP не использует такие конструкции. Даже если помотреть: > :00A7A8CF pusha - нет такой инструкции в 86/64. Каким кривым декомпилем это разобрано ? --- Сообщение объединено, 7 апр 2021 --- Код (Text): :00A7A8C6 icebp |F1 :00A7A8C7 aam 0 |D4 00 :00A7A8C9 add bh, bh |00 FF :00A7A8CB xor [edi-9FDBFCh], cl - декомп ошибся прошёл ветвь и влез в середину инструкций. Он не может туда попасть, вероятно ты туда вписал int3 отладчиком, из за чего диз не верно разобрал ветку.
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 - руки понюхал - говном не воняют, значит как минимум не из жопы... На критику такого рода не обижаюсь, понимаю, что она неизбежна. Мне нужно набивать руку, набивать глаз и учиться решать такие проблемы. По итогу выходит, что мне нужно точнее определить инструмент обфускации моего приложения? Просто застряв на этом этапе я не могу внятно составить себе план мероприятий, как действовать дальше.
KaperGL, 2. F1 кидает отладочную ловушку, блокировка это F0. 3. Я имел ввиду что pushA и pushAD имеют общий опкод, для первой сохраняются 16-битные регистры, тоесть теряется старшая часть расширенных. А такое не нужно в 86, а в 64(не путать с режимом совместимости тот самый wow) и вовсе приведёт к исключению: Код (Text): IF 64-bit Mode THEN #UD 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. Ты не обижайся, тут такое отношение к новичкам норма оно не со зла" это просто так скажем мысли вслух По причине того, что обычно леняться открыть документацию или есчо какие то действия выполнить. Полтора десятилетия это всё мусолить" конечно у любого будет так, не желание описывать подробности, тк есть поиск как минимум на двух форумах этот и дамп кл.
Да, я уже начитался про суровость VMP и ему подобных и на этом форуме и на других, поверхностно ознакомился с его методами. Понятно что можно сливать эту затею до лучших времён. Сам девайс работает через FTDI. Потыкал кнопки под сниффером, вижу инструкции, вижу данные, но беда в том, что все пакеты подкрепляются CRC32 (возможно) с не определённым пока мною полиномом. Перепробовал все известные и прямо и обратно с опорой 00 и FF, да и после модификации файлов при сохранении ещё рассчитываются контрольные суммы. Из-за них в общем-то и был замут с разбором кода. Спасибо откликнувшимся!
KaperGL, Искал долго нашёл что то по вмп https://archivevx.net/exelab/f/pages/action=vthread&forum=6&topic=25760&page=0.html я искал иное. Там было в какой то теме сборка я даже могу билд поискать у себя, смысл был в том что крутился протектор, затем лог по выборке собирался выделялась сама вирт машина. Но я не могу найти ту тему.
Ерундой не занимайтесь: не слушайте якобы спецов здесь, то что у человека много сообщений не значит что в них есть какая-либо польза. Тем более не бойтесь ковырять протекторы, вмп декомпилировался на протяжении всего своего существования в статике, не нужно ничего крутить и запускать, это для идиотов. Сперва это сделал Vamit с экселаба, и декомпилятор даже был публичным до тех пор пока вамиту не надоело вытаскивать палки из колес из-за публичности, затем проект продолжил существовать в привате и способен декомпилировать код из ультра в полный оригинал и даже вставить туда где он был изначально. Кстати этот персонаж, которого вы слушаете хамил автору этой тулзы и был послан нахрен на том же лабе. Затем Can1357 запустил публичные стримы и в реальном времени написал декомпилятор для вмп транслируя это всем. Он справляется с задачей не так чисто как VMSweeper вамита, но у него мощный оптимизатор, который снимает большую часть обфускаций засчет промежуточного представления. Есть небольшие проблемы с конечной компиляцией обратно в X86, код получается не такой эффективный как был в оригинале, но вполне работоспособен и читаем например в иде. Кроме этого, проект публичный, вы сами можете его изучить https://github.com/can1357/NoVmp, он базируется на языке VTIL который и служит пром представлением для оптимизаций. На данный момент дерматолог (автор вмп) не предоставил никакого ответа на декомпиль, хотя обещал мясо.
За ссылки и поддержку спасибо. Буду заполнять пробелы. Вчера наскочил на https://wasm.in/threads/kto-nibud-lomal-vmprotect.20683/page-14 как отправную точку. Понятное дело, что вопрос не закроется за ближайшие дни, потихоньку из разных источников постараюсь собирать мозаику в голове. Уже нашёл VMP light - как минимум смогу ставить эксперименты над своими кодами, тем более чтобы что-то сломать, нужно понимать как это изначально устроено.
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