Сейчас на форуме: (+6 невидимых) |
eXeL@B —› Программирование —› Свёртка. |
. 1 . 2 . 3 . >> |
Посл.ответ | Сообщение |
|
Создано: 02 мая 2019 17:22 · Личное сообщение · #1 Тут исходный материал Я взял EP модуля, обработанного вмп и вручную почистил мусор. Это мелкая тех задача, я её решу на днях(те проблема с кседом и нужно продумать алгоритмы по графам). Суть не в этом. Исходный код: Code:
После удаления мусора(если контекст сбрасывается, то предыдущая цепочка cfg мусорная, те clc/cmp -> clc мусор, так как EF.CF функция утеряна). Code:
Этого примера более чем достаточно что бы понять всю обработку, которую необходимо выполнить. В этом примере два блока с bswap. Это некоторая последовательность простых операций, которая известна и её нужно свернуть, те упростить. Vamit сделал это через хардкод всех таких конструкций. Это чистая математика, как сворачивать такие выражения, учитывая что там не просто функции, а булевый ксор и тп ? Помогут в этом ли солверы, я их не использовал никогда ? В простейшем случае такие блоки можно выполнить с нулевым аргументом, это без учёта условий. ----- vx |
|
Создано: 02 мая 2019 17:43 · Личное сообщение · #2 Оба блока, где участвует bswap - расшифровка значения, оно скорей всего было помещено в память с обратными действиями этим же самым ксорам/сдвигам/инверсиям/свопам в обратном порядке. И как-то простенько сделано, без огонька. SUB(68CC28DC),SWAP,ROR(1),XOR(6B3E5C22) -> XOR(6B3E5C22),ROL(1),SWAP,ADD(68CC28DC) Если сможешь выделять прямую и обратную последовательность в обеих ветках, где значение было помещено, и где используется, можешь безопасно их исключать. Если нет, то нету гарантии, что крайнее действие или несколько - не часть алгоритма. ----- 2 оттенка серого |
|
Создано: 02 мая 2019 17:49 · Личное сообщение · #3 Тут надо не сворачивать, а включать голову и производить вычисления: Code:
----- Everything is relative... | Сообщение посчитали полезным: difexacaw |
|
Создано: 02 мая 2019 17:49 · Личное сообщение · #4 f13nd Что это значит ? Я привёл частный пример что бы спросить про общее решение. Как такое сворачивать. После зачистки мусора остаются одни такие конструкции. Это было бы просто, если бы там небыло булевых операций. Тоесть я хз как такое решается. Есть функция, её нужно упростить. Ну или попытаться это сделать. Если упростить нельзя, то очевидно это макро появилось не как результат морфа единичной инструкции. Добавлено спустя 2 минуты Vamit Вы пропустили в коментах целевой блок. А вопрос в том, как это упростить. ----- vx |
|
Создано: 02 мая 2019 17:58 · Личное сообщение · #5 |
|
Создано: 02 мая 2019 18:04 · Личное сообщение · #6 difexacaw пишет: Что это значит ? После чистки мусора остаются инструкции, не входящие в тупиковые ветви, а эта обязательная часть остается. Если абстрагируешься от того, как это устроено, но очень хочется ислючить лишние действия, тебе надо каждое мгновенное значение считать отдельной единицей. Преобразовать например в свой промежуточный код, где можно будет выделить последовательность: a1=SUB(a0,68CC28DC) a2=SWAP(a1) a3=ROR(a2,1) a4=XOR(a3,6B3E5C22) a5=XOR(a4,6B3E5C22) a6=ROL(a5,1) a7=SWAP(a6) a8=ADD(a7,68CC28DC) В которой простым способом исключается a4-a5 (c их заменой во всех связанных операторах), потом a3-a6 и т.д. Если пофантазировать, можно не использовать эту мешанину впоследтсвии для выделения в ней алгоритмических конструкций, а применять только для чистки. Но лучше вон делай как все. ----- 2 оттенка серого |
|
Создано: 02 мая 2019 18:13 · Личное сообщение · #7 Vamit Функция, остальное не имеет значения: Code:
f13nd > Преобразовать например в свой промежуточный код Мне чутьё подсказывает что упрощения при этом не будет, новая формула и что с ней делать ? ----- vx |
|
Создано: 02 мая 2019 18:20 · Личное сообщение · #8 difexacaw пишет: Мне чутьё подсказывает что упрощения при этом не будет, новая формула и что с ней делать ? Ее не надо никуда применять, это опорная конструкция только для выявления лишних преобразований и желаемого исключения инструкций, связанных с ними, из кода. Ни пересылок, ни использования еще каких-то значений, что могло бы усложнить жизнь, тут почему-то нету. ----- 2 оттенка серого |
|
Создано: 02 мая 2019 18:22 · Поправил: difexacaw · Личное сообщение · #9 |
|
Создано: 02 мая 2019 18:24 · Поправил: Vamit · Личное сообщение · #10 Функция, остальное не имеет значения Всё что я написал значение имеет, иначе вы никуда не уйдете. А приведенный кусочек это расшифровка адреса кода примитива, алгоритм тут у каждого примитива для вмп3.2 уникальный, решение одно - эмулировать исполнение кода и вычислять реальные значения. Это ещё цветочки, а ягодки будут дальше)) ----- Everything is relative... |
|
Создано: 02 мая 2019 18:27 · Личное сообщение · #11 |
|
Создано: 02 мая 2019 18:27 · Личное сообщение · #12 Vamit Мне не нужно эмулировать, мне нужно свернуть эту функцию и понять как это делать для подобных. В этом простейшем случае очевидно - обнулить параметры и выполнить, затем можно пересчитать на произвольное значение сложением, тк функция линейна(не содержит условий). Но это годится лишь для таких примитивов как несколько линейных инструкций, обычно морф куда сложнее. Добавлено спустя 2 минуты f13nd Я уже устал повторять что это частный пример что бы найти общее решение, не нужен мне никакой [esp+8].! ----- vx |
|
Создано: 02 мая 2019 18:30 · Поправил: Vamit · Личное сообщение · #13 f13nd Абсолютно неверное суждение, пока вы не расшифруете адрес (как угодно) далее пути нет. Мне не нужно эмулировать, мне нужно свернуть эту функцию и понять как это делать для подобных. Ну тогда вперед, когда сделаешь, то покажешь... И ещё, следующий блок кодирования будет зависеть от предыдущего, с середины тут раскодировать в принципе невозможно. ----- Everything is relative... |
|
Создано: 02 мая 2019 18:33 · Личное сообщение · #14 |
|
Создано: 02 мая 2019 18:37 · Личное сообщение · #15 |
|
Создано: 02 мая 2019 18:38 · Личное сообщение · #16 Мне не нужно эмулировать, мне нужно свернуть эту функцию и понять как это делать для подобных. В некоторых случаях упростить можно, но это ничего не даст, всё равно нужно вычислять (декодировать) реальные адреса. Тут нет фиксированного алгоритма кодирования, он как в криптографии (с середины потока никогда ничего не получить), так и тут вычислил одно значение и от него будет зависеть следующее, а алгоритм кодировки адреса у каждого примитива уникален. ----- Everything is relative... |
|
Создано: 02 мая 2019 18:39 · Личное сообщение · #17 Эта вот последовательность: (A xor B) + 1 по мойму какая то странная. Из общих соображений могу предположить что прочий операнд в этой функции должен ранее выполнить туже операцию, либо как то знать результат. Хотя это не точно. Тут нужен человек который шарит в этой матчасте. Добавлено спустя 2 минуты Vamit > он как в криптографии Не согласен, это лишь морф, при усложнении функция остаётся тойже. А значит возможна её свёртка. ----- vx |
|
Создано: 02 мая 2019 18:44 · Личное сообщение · #18 |
|
Создано: 02 мая 2019 18:50 · Поправил: difexacaw · Личное сообщение · #19 |
|
Создано: 02 мая 2019 19:03 · Поправил: Vamit · Личное сообщение · #20 difexacaw Была бы матчасть, то вмпрот бы уже не жил, а давно бы подох. А по солверам могу сказать следующее, да сам алгоритм кодирования они могут привести к псевдокоду, чтобы исключить зависимость от регистров цпу (её в любом случае надо исключать, т.к. у каждой реализации вмп свой набор регистров), но вычислить конкретные значения адресов они не смогут, тут только 2 варианта или трассировать/исполнять код кусочками или эмулировать его поведение. Мой первый декомпилятор, который есть в открытом доступе работал по 1му варианту, а последний работает по второму. У первого варианта куча недостатков... ----- Everything is relative... |
|
Создано: 02 мая 2019 19:12 · Личное сообщение · #21 Недавно случайно нашел в сети две очень ценные для меня статьи на перспективу. Подумал, что они очень хорошо коррелируют с этим тредом. Может кому-нибудь пригодятся. |
|
Создано: 02 мая 2019 19:36 · Поправил: difexacaw · Личное сообщение · #22 |
|
Создано: 02 мая 2019 19:58 · Поправил: Vamit · Личное сообщение · #23 Нет тут матчасти, могу по шагам расписать кодировку адресов и параметров пикода: Code:
шаги 1 и 3 одинаковы для всех кодировок, шаг 2 уникален для каждой кодировки ----- Everything is relative... |
|
Создано: 02 мая 2019 20:22 · Личное сообщение · #24 Vamit Спасибо конечно большое. Но у меня задача совсем иная. Я говорил, функцию нужно упростить. Если это аналог, какие то штатные мат операции то не проблема. Но в таких выражениях and/xor/or/etc. Но это не означает что решения нет, просто пока кто знает не ответил. Если начать думать над подобной математикой", то решение затянется на очень большое время. Я могу легко любые манипуляции выполнить с произвольным бинарем автоматикой, но с данным вопросом я не чего не могу. Просто потому что нет мат теории или какого то фундамента", на который можно опираться. Элементарная функция и что делать дальше я хз. Но это вовсе не означает что решение не возможно или нет соответствующей теории/матчасти. ----- vx |
|
Создано: 02 мая 2019 21:04 · Личное сообщение · #25 difexacaw Всё уже по шагам расписал, вот формула: value ^= hash; variable template decode value; (уникальный алгоритм) hash ^= value; что ещё нужно - бери и решай... ----- Everything is relative... | Сообщение посчитали полезным: mak |
|
Создано: 02 мая 2019 21:10 · Поправил: difexacaw · Личное сообщение · #26 Vamit Вы говорили что полагаете что общее решение невозможно. Зачем это много раз повторять. Общее решение будет возможно если найти решение этой задачи. И это только начало поиска. Не работал я ранее с гибридными уравнениями. Добавлено спустя 16 часов 43 минуты Я заметил что эти две функции применяются к константам. Тоесть получается что до этого константа должна быть обработана обратной функцией. Тогда такая функция должна присутствовать в апп. Если её нет, то функция применялась на этапе сборки апп. Для функции 7EDF0E входной аргумент один и так же константа. Для 7EDF7D входных параметра два, это адрес и значение выбранное по адресу, причём адресация зависит от предыдущей функции. Получается что если выполнить эти две функции, образуются константы, на которые можно заменить сами функции и ничего сворачивать не нужно.. Но это лишь в этом примере. ----- vx |
|
Создано: 03 мая 2019 16:27 · Личное сообщение · #27 Я заметил что эти две функции применяются к константам. Неверное суждение, по приведенному коду нельзя построить полноценный алгоритм обработки, вот когда разберете хотя бы 10 последовательных событий вм, тогда что-то и поймете. Во вторых это не константы, а переменные, которые при входе в вм инициализируются константами и изменяются на каждом последовательном примитиве/команде вм и их нужно отслеживать. ----- Everything is relative... |
|
Создано: 03 мая 2019 17:08 · Личное сообщение · #28 difexacaw пишет: Публикации что почитать.. https://en.wikipedia.org/wiki/NAND_logic Estimating the Circuit Deobfuscating Runtime based on Graph https://arxiv.org/pdf/1902.05357 Instructions Substitution https://github.com/obfuscator-llvm/obfuscator/wiki/Instructions-Substitution Code:
Vamit пишет: value ^= hash; variable template decode value; (уникальный алгоритм) hash ^= value; Обыкновенный ВМ-ый полиморф difexacaw пишет: Vamit Тоесть по вашему функцию в #7 невозможно принципиально как то упростить ? Можно, 200% можно ... ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube | Сообщение посчитали полезным: -=AkaBOSS=- |
|
Создано: 03 мая 2019 17:34 · Личное сообщение · #29 |
|
Создано: 03 мая 2019 17:39 · Личное сообщение · #30 Обыкновенный ВМ-ый полиморф Да как угодно назови, только суть от этого не меняется, причем у каждого типа вм он свой, независимо от того цикловая вм или безцикловая. У некоторых вм его формула постоянна, а у других вариативна. Добавлено спустя 4 минуты Я так понимаю если вы не смогли разобраться в простейшем примере, то о большем нет смысла спрашивать. Да пошел ты в жопу, у меня всё решено и работает в автомате, а тебе более помогать не собираюсь... Первоначально тебе нужно заняться самовоспитанием, а не программированием. ----- Everything is relative... | Сообщение посчитали полезным: sefkrd, DimitarSerg, Gideon Vi, BlackCode, bartolomeo, soft, DenCoder |
. 1 . 2 . 3 . >> |
eXeL@B —› Программирование —› Свёртка. |
Эта тема закрыта. Ответы больше не принимаются. |