eXeL@B —› Софт, инструменты —› x64dbg - Плагины |
<< . 1 . 2 . 3 . 4 . 5 . >> |
Посл.ответ | Сообщение |
|
Создано: 01 мая 2017 07:40 · Поправил: Bronco · Личное сообщение · #1 #ifdef немного оффтопика, шапка всё таки. Отладчик набирает потихоньку обороты, базовая платформа достаточно гибкая. Сам проект опен сорс, как и остальные крос платформенные движки в нём из пользованные. Неплохой pluginsdk, к сожалению мало описания в help, но по хидерам разобраться довольно не сложно. Собственно в чём вопрос ? Парни всё есть, но никто ничего не пишет. //Для OllyDbg на тутсях целый раздел и с плагинами и с скриптами. Вот по случаю решил пополнить копилку. Хз что, но пока мутил было интересно. Рассчитываю, что это даст старт, более практичным обсуждениям и в плане программирования и в плане решения разных задач. Топик для всех плагинов, которые либо есть, либо будут. Многие из тех что есть так же опен сорс. В общем не Грааль конечно, но лудоманить на этом не приветствую. #else О плагине ! Из того что в разработке, но частично готово. Меню отладчика - Чистим историю открытия приложений, скриптов и командной строки: Меню отладчика //- Зарегистрировано пока 9 новых команд для скриптового движка. - RipAsmCode - описание в мсг - RipAsmInstruction - описание в мсг - FindAsmInstruction - описание в мсг - FunctionAsmEnd - описание в мсг - FunctionLogClear - FunctionLabelClear - FunctionScriptAbort - FunctionFindPointer - описание в мсг - FunctionGetTime Меню отладчика - Параметры Деобфускатора//сохраняются в ини Меню отладчика -- Параметры "обхода лапши"//сохраняются в ини Меню отладчика -WannabeUIF под обе архитектуры Меню диззасма: - Деобфускатор // бетка - В выделеном листинге перемещаем все нопы вниз. - Обходим лапшу из jmp&jcc//статик трассировка в выделенную страницу - Освобождаем память от выделенной страницы, и удаляем все записи в лейбах. #endif Под х86 тестировалось инерциально, под х64 пока только на паре тройке семплов..)) Из нерешённого, это кьют_виджеты, идея перетащить табшиты лога и скрипта в окно дампа как то не решается. И пройтись по элементам дальше хендлов дочерних окон с ClassName Qt5QWindowIcon, пока не получается. Линк запостил. Дальше посмотрим, что из этого топа выйдет. //ахах топ потыхеньку умирает, сколько бы не постил ----- Чтобы юзер в нэте не делал,его всё равно жалко.. | Сообщение посчитали полезным: mak, zNob, Haoose-GP, v00doo, jinoweb, ClockMan, fasteralex |
|
Создано: 17 мая 2017 19:01 · Личное сообщение · #2 difexacaw пишет: Блок" это ветвь. В данном случае блок это блок, а остальное незнание тобой матчасти. https://ru.wikipedia.org/wiki/Граф_потока_управления По поводу же ошибки то ее нет, анализатор\корректировщик не имеет отношение к самому графу чуть более чем полностью, это отдельная сущность. Добавлено спустя 4 минуты Bronco пишет: в смысле, трассировка в живую? Да. Кто то испльзует пин, кто то динамо рио, кто то пишет свое, например: https://github.com/K2/EhTrace В статике нормальный анализ невозможен, та же IDA вполне себе зацикливается. |
|
Создано: 17 мая 2017 22:01 · Поправил: difexacaw · Личное сообщение · #3 shellstorm Ты сам матчасть не знаешь и себе противоречишь: > точка, на которую выполняется переход, является первой инструкцией в базовом блоке; > базовый блок завершается инструкцией перехода. По твоему же линку. Это та самая ветвь > По поводу же ошибки то ее нет, анализатор\корректировщик не имеет отношение к самому графу > Блок это промежуток между бранчами, смотрим вхождение адреса в блок Хорошо, для перекрывающегося(для определённого диапазона адресов существует несколько ветвей) кода пример приведите. ----- vx |
|
Создано: 18 мая 2017 00:15 · Личное сообщение · #4 difexacaw пишет: По твоему же линку. Это та самая ветвь В приличном обществе не пиши подобного, засмеют. Записывай: node, edge, vertex, деревья с ветвями применимы к другим алго. Как нибудь расширь горизонты https://ru.wikipedia.org/wiki/Глоссарий_теории_графов. Это ссылка\дуга, это блеадь не дерево которое частный случай графа, а граф с вполне конкретной имплементацией алгоритма, avl, вот это дерево, осиль разницу. difexacaw пишет: кода пример приведите Открой исходники отладчика и обчитайся, можешь даже школьный курс арифметики освежить, мб тогда осилишь нехитрые вычисления над адресами. Добавлено спустя 14 минут У отладчика и с окном графов проблема, по крайне мере у меня. open dbg => open file => G => I = crash При сохранении графа, отладчик зависает, приложение запускается и в общем финита. |
|
Создано: 18 мая 2017 00:31 · Личное сообщение · #5 shellstorm Это всё формальная математика, не имеющая отношения к имплементации. Как не назови, а это всё равно ветвь. И эти формальности никак не позволят реализовать частный алгоритм. > Открой исходники отладчика и обчитайся Отладчики не умеют строить многоуровневые графы, я же говорил. Их анализер не обрабатывает перекрёстный код. Мне твоя реализация в данном случае интересна, раз посылаешь матчасти учить. ----- vx |
|
Создано: 18 мая 2017 00:37 · Личное сообщение · #6 difexacaw пишет: Это всё формальная математика, не имеющая отношения к имплементации. Как не назови, а это всё равно ветвь. Нет, это непонимание разницы, да, я тоже бываю по запаре называю ссылки ветвями, только это не правильно и на каком нибудь математическом форуме народ хором орнет в голосину. difexacaw пишет: Мне твоя реализация в данном случае интересна Я использую библиотеки, в данном случае не вижу смысла строить велосипеды, на ридер повесить анализатор и результат закинуть на обработку в библиотеку, и ей же можно рендерить граф, тем более когда с рендеренгом все плохо, моделирую графы в orang, загоняю dataset и глядя на данные струю модель графа, выгружаю готовую модель, и ее закидываю в библиотеку, 21 век, все намного проще и нет смысла усложнять. |
|
Создано: 18 мая 2017 01:06 · Поправил: difexacaw · Личное сообщение · #7 shellstorm Хорошо, вот простейший пример: Code:
В #31 вы даёте следующий метод: > смотрим вхождение адреса в блок, если его нет, значит это мусор В виде потока инструкций(граф) этот код будет таким: mov - je - jmp. При этом дворд данных будет в пределах инструкции, таким образом по вашему методу это не данные. Хотя любой конструктор их не затронет при построении графа, если конечно не привязан к адресам каким то образом. И при последующей сборке поток инструкций сохранится. ----- vx |
|
Создано: 18 мая 2017 01:31 · Личное сообщение · #8 difexacaw пишет: Хорошо, вот простейший пример mov .. является вершиной графа, вершина продолжается до первого бранча или ret. je начало блока и заканчивается на jmp, крч блок из одной инструкции, далее начинается блок с jmp, этот блок тоже из одной инструкции, потому что нет условия, переходим к блоку по адресу семь, если там нет бранчей указывающих на адрес 3 или где то далее указывающий на него, это мертвый блок, данные или мусор, размер блока легко получить, берем адрес 4 и ищем ближайшее к этому адресу вхождение, если таких нет, между 4 и 7 мертвый блок, итд. это в простейшем случае, а если рассматривать отладчик, он ориентируется на контекст. |
|
Создано: 18 мая 2017 01:56 · Поправил: difexacaw · Личное сообщение · #9 shellstorm А причём тогда предыдущее утверждение про адреса - данные в пределах инструкции, описанной ранее в графе, входят в диапазон занимаемых ей адресов. Это та самая корреляция блоков - два блока пересекаются. > если там нет бранчей указывающих на адрес 3 или где то далее указывающий на него, это мертвый блок Очевидно что если на какой то адрес нет ветвления(и адрес не указывает на начало инструкции), то это данные. Но такое утверждение так же смысла не имеет, так как граф строится по ветвлениям и естественно что данные, на которые нет ветвления не будут описаны Добавлено спустя 6 минут > если рассматривать отладчик, он ориентируется на контекст. Сабж отладчик последней версии имеет ту же проблему - он не отображает куда ведёт ветвление, так как возникает коллизия с началом блока. По нормальному должен быть второй листинг дизасма с отвязкой от адресов таким образом. А для пересекающихся инструкций без прохода по бранчу нельзя увидеть его код ----- vx |
|
Создано: 18 мая 2017 02:14 · Личное сообщение · #10 |
|
Создано: 18 мая 2017 10:06 · Поправил: Bronco · Личное сообщение · #11 |
|
Создано: 19 мая 2017 11:02 · Поправил: shellstorm · Личное сообщение · #12 Bronco пишет: --> разные форки<-- Ponce хорошая штука, хотя на вещах посложнее начинает обламываться, как в принципе и все универсальное, подобные фреймворки все же делаются для написания кода под задачу, как и тот же pin. dynamorio не смотря на все костыли проще собирать чем pin, последний очень капризный и при сборки компилятором свежее указанной версии начинаются хождения по мукам, совсем не VC френдли, с mingw жить немного проще. |
|
Создано: 19 мая 2017 15:29 · Личное сообщение · #13 shellstorm пишет: Блок это промежуток между бранчами тыкну пятак, уже наблюдения из практики.. По структуре инфо об инструкции, в бранч входят не только усл и безусл переходы, а деление на некст_блок в большей части после них и по дистанции вхождения в другой блок. Инструкция вызова может быть в любой позиции внутри блока. И есть блоки, которые выполняя условие, оператор обходит, они могут быть без бранчей. Но...хотел спросить совершенно о другом. По блокам собирать довольно весело, для графы то оно сымпатышно. а вот для сборки весьма кучеряво.. чисто пример: Code:
----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 19 мая 2017 16:43 · Личное сообщение · #14 Bronco Это вам shellstorm пыли напускал со своими блоками. Что это такое конкретно ? Участок между ветвлениями, окончание ветви - а если ветвь заканчивается ветвлением безусловным.. или это линейный участок кода, без промежутков или быть может это часть между двумя ссылками ? Чушь полная такое. Есть понятие ветви и оно достаточно, всё остальное просто фигня. ----- vx |
|
Создано: 19 мая 2017 16:45 · Личное сообщение · #15 Bronco пишет: а вот для сборки весьма кучеряво Судя по листингу, все верно. Je\Jnz зависят от условия и вершиной блока условия является этот самый переход. Остается пробежаться по всем ссылкам и посчитать расстояние между блоками, если оно больше нуля, значит там мертвый код, вот для последнего желательно завести отдельный список, поскольку в дальнейшем могут появится jmp,je,jnz,etc на мертвый блок, в таком случае его удалить из списка и добавить в основной граф. Задача на поиск путей и расстояния, в гугле полно готовых реализаций. Остальное опишите подробней, что не получается и что именно хотелось бы получить. |
|
Создано: 19 мая 2017 16:46 · Поправил: Bronco · Личное сообщение · #16 difexacaw с пылью как то всё прозрачно, классическая геометрическая фигура, с прямыми углами, что сверху, что снизу, слево или справо, но на ветку никак не похоже., а вот то, что это блок с инструкциями, греет сразу. shellstorm пишет: значит там мертвый код блок с мёртвым кодом остался в источнике. если бы из него листинг не ломался, собрать можно было быстрей , опираясь только на 2 значения старт_энд. дистанции переходов отдельный цикл ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 19 мая 2017 16:47 · Личное сообщение · #17 difexacaw пишет: а если ветвь заканчивается ветвлением безусловным И этот переход будет вершиной блока, даже если между переходом и блоком будут лежать какие то данные, на них все равно ничего не указывает, что тут сложного? Добавлено спустя 43 минуты Bronco пишет: дистанции переходов отдельный цикл Так вот для того и промежуточный список с мертвыми блоками, чтобы каждый раз не гонять цикл, проверил, ага, входит в этот блок, берем адреса из блока и переносим их в основной граф, удаляем из промежуточного списка или делаем перерасчет размера блока, в зависимости от того, полный блок покрывается переходом или частичный. difexacaw пишет: Чушь полная такое. Есть понятие ветви и оно достаточно, всё остальное просто фигня. Дружище, это все очень интересно, но расскажи нам, чем отличается дерево от графа? |
|
Создано: 19 мая 2017 18:57 · Личное сообщение · #18 shellstorm пишет: Так вот для того и промежуточный список с мертвыми блоками тут немного другое, и повторюсь что деадкоде уже нет, просто опять нужна стата и прогон, чтобы понять какова логика визуализации блоков с инструкциями у Диа. Я повторю пример, дополнив его исходными адресами инструкций и в той последовательности, в которой приходят стартовые адреса блоков. Code:
по дистанциям переходов лучше решение чем у Микаела в его плаге не придумать. Но вот как на лету слинковать *.asm предстоит ещё решать. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 19 мая 2017 19:43 · Личное сообщение · #19 Без прогона и коррекции конечно никак, в отладчике тоже запилин корректор и с первого раза бывает выдает какую то хню вместо ожидаемого графа. Что касается 4 и 5 блока: Code:
je\jnz\etc в одном случае образуют фигуру /\ , а в другом случае все линейно | на концах палочек воображением нарисовать узлы\начало блоков, расставлять блоки с учетом адресации, один переход может быть вершиной двух блоков, один из блоков может не иметь никаких бранчей, это нормально, вот оба сразу не могут, если в одном из блоков нет бранчей, значит концом этого блока служит больший адрес ссылки из двух возможных, а вершиной служит сам переход, то бишь переход может является началом двух блоков и концом одного из блоков, а с ret это отдельный вопрос. Сумбурно конечно описал, но если не понятно, добавлю уточнений. По поводу корректности самого асм листинга, хз, не вчитывался и не компилировал в уме. Добавлено спустя 6 минут Кстати, у вас практически все готово для создания паттернов на базе графа, осталось убрать всякую зависимую от конкретного exe ерунду, адреса, избыточные инструкции, после чистки пройтись fuzzy hash-ром и сигнатура готова, таким способом можно искать библиотечный код или стандартные компоненты регистрации, например протекторов. Вообще для полного счастья не хватает одной штуки, нет перегона в IR, мб mrexodia когда нибудь прикрутит llvm, от этого будет больше пользы чем от недодекомпилятора. |
|
Создано: 19 мая 2017 20:09 · Поправил: Bronco · Личное сообщение · #20 shellstorm пишет: Что касается 4 и 5 блока: Диа своим анализом, для рендера сразу распределяет блоки влево_вправо. Отсюда и та последовательность которая нарушает линейность исходного кода. Между блоками 1_3_5_4 и 2, есть зазорчик в 34D3 байт, это таблица с индексами, которые защита юзает для своего свитч конструктора. в целом она ломает листинг в источнике , и есть шанс шагая там, пропустить какую-то стартовую инструкцию в блоке. Пока непонятно почему после пятого блока, поле brfalse = 0. Асм листинг подразумевался с метками, чтобы не пересчитывать дистанции переходов. Тоже наверное сумбурно. shellstorm пишет: когда нибудь прикрутит llvm снеговик по своему не плох для не сложных задач на посмотреть, только непонятно как и кому скармливать, то что он отрыгивает. С llvm это будет бомба, но врядли, его и так уже большая шобла разрабов достаёт, он то и за этого и снапы стал реже собирать. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 19 мая 2017 23:02 · Личное сообщение · #21 Bronco пишет: это таблица с индексами, которые защита юзает для своего свитч конструктора. в целом она ломает листинг в источнике Capstone нормально разбирает этот блок? Глянул сурсы, анализ с графами завязан на capstone, если он фейлит результат как бы ясен, что поедет и сам граф. difexacaw пишет: Ладно, открою вам тайну shellstorm это сацура с васмру Тайна куда проще, ты не понимаешь разницы между деревом и графом, от чего эпично подгорает. Я никогда не регистрировался ни на каком васме и да, я не сацура или кто бы то еще с васма. |
|
Создано: 19 мая 2017 23:45 · Личное сообщение · #22 shellstorm пишет: Capstone нормально разбирает этот блок? тут любой дизасм листинг поломает. так что на капстон нет смысла грешить, так же как и на дефолтное алго построение графы. в моём случае, достаточно отсортировать свой вектор по структуре, и всё пучком Code:
difexacaw пишет: Ну так это вы же спрашиваете Конфабуля́ция ----- Чтобы юзер в нэте не делал,его всё равно жалко.. | Сообщение посчитали полезным: shellstorm |
|
Создано: 20 мая 2017 00:01 · Личное сообщение · #23 Bronco пишет: в моём случае, достаточно отсортировать свой вектор по структуре, и всё пучком Теперь ясно, я не так понял, думал двиг потерял какие то инструкции которые должны были попасть в блок. Трудности донесения мысли и понимания, бывает. Когда ждать релиз? difexacaw пишет: Я вижу какие то куски кода выдранные рандомно. Я тебе уже говорил, посмотри исходники отладчика и не задавай идиотских вопросов, обсуждается двиг отладчика и для твоего саморазвития, данный алгоритм по природе своей не может быть деревом. |
|
Создано: 20 мая 2017 11:53 · Поправил: Bronco · Личное сообщение · #24 shellstorm пишет: Когда ждать релиз? вот как на лету слинковать *.asm порешаю_обкатаю. , так бетку можно и закидывать. остальное обкатал. Хотя есть ещё в планах ребилд иат и переходников_указателей в неё, с переносом таблицы на другое место. Добавлено спустя 8 часов 28 минут Multiline Ultimate Assembler v2.3.6 (May 20, 2017) Added the following commands for x64dbg: multiasm_show, multiasm_disasm_selection, multiasm_close. Fixed a scrolling direction bug with the 64-bit version of RAEdit. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 24 мая 2017 13:13 · Поправил: Bronco · Личное сообщение · #25 Bronco пишет: как на лету слинковать *.asm порешаю_обкатаю до линковки дело не дошло, всё на много проще выходит. для обкатки, пока выделяю страницу, но есть не большой дискомфорт, при асембле инструкций переходов в выделенной странице, отладчик выдаёт мсг , по кол-ву вершин: - мол юзать тут такое низЯ, но при этом саму инструкцию пишет. Причина банальная - отключён гуй для скрипта, во время выделении страницы. сдк_апи результата не приносят, пришлось чисто скриптовыми командами: Code:
проверять дистанцию приходиться только для длинных переходов. пока вроде ничего. -------------- На 100% не уверен, но на том материале что есть, под х64 выделять страницу ближе к образу, ничего не мешает. В х32 ситуация немного другая, там вокруг образа всё зарезервировано системой. Собственно вопрос. Если страница выделяется рандомно, и возможно по низким адресам, будут ли в ней ломаться статик указатели и дистанции колов? если да, то как тогда лучше выделить страницу по нужному адресу? ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 27 мая 2017 20:13 · Поправил: Bronco · Личное сообщение · #26 ох ох ох...с ответом на вопрос прямо навалились... © Сократ Софронискович : - "Если тебе ответили молчанием, это не значит что не ответили" . х* с ним, мне х32 не в приоритете, а возникнет проблема, доберёмся_порешаем. кста, хороший индикатор конъюнктуры харизмы к топу, а ведь топтуны есть ну не будем всё время о хорошем. первый контрольный фулл тест драйв плага, результ: Code:
основная потеря времени на подсчётах в скрипте интов. Code:
а есть и тела монстры: Code:
остаток - TotalBadCodeSize 19 - тел, только для ручной работы Мультилайном. в тыкнуть не дают изменёные переходы на длинные, с дистанцией : - "0х0f847e" дополнительно теряем время из-за нагрузки чемодана регистрации и сортировки патченных байтов. Состояние отладчика терпимо. Пока отлаживал плаг вычленением доступных ему тел, дбг дышал ровно: - проц 30 % - память макси 500, мин 70 мб на фулл тест драйве при том же коде в плагине, в дбг пошли скачки: - проц мин 28%, макси 60 % - память макси 2.5 гб, с середины общего времени мин 500 мб. Поставленную задачу выдохнул и не грохнулся, автору респект за это. Для сборки юзаю 2 метода, второй либо с одним, либо с двумя проходами, он в 4 раза медленней основного. Решение загнать обработку 2 метода в потоки, пока не реализована. Лог результата в подробностях, приатачил. пыс.пыс чёрной инструкции кторая бы крашнула все три двига не выявлено. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. | Сообщение посчитали полезным: shellstorm |
|
Создано: 27 мая 2017 20:52 · Личное сообщение · #27 |
|
Создано: 27 мая 2017 22:14 · Поправил: shellstorm · Личное сообщение · #28 Bronco пишет: ох ох ох...с ответом на вопрос прямо навалились... Занят сейчас, а писать, абы что то писать не вижу смысла, мб завтра найдется пара часов > cmp 4:[prolog],CCCCCCCC < кампарить можно маски 8, но так мы проскочим, если ниже некст переход. допилить компаратор до нечетких хешей и похер будет там next или нет, подобное тоже ложится в паттерн. Добавлено спустя 2 минуты готовая библиотека, остается только прибить к движку. https://github.com/a4lg/ffuzzypp Добавлено спустя 19 часов 56 минут Bronco пишет: sprintf_s(message, "guiupdateenable"); void GuiUpdateEnable(bool updateNow); разве не работает? alloc находится в _scriptapi_misc.h На остальное нужно больше кода. |
|
Создано: 28 мая 2017 20:08 · Поправил: Bronco · Личное сообщение · #29 sendersu пишет: хорошо еще б шапку обновить последними наработками добавил FunctionGetTime, сбрасывает в лог текущее время до милисек. привёл в стандартный вид команды с аргументами, название переменных значение не имеет, главное чтобы по скрипту, где нить тыкнули в них данные. если под наработками что то другое подразумевается, то это только слабые места асм двигов. Предпочтение отдал основному XEDParse, и дополнительно AsmJit, Keystone в аутсайдерах, если и он не справляется хапаю инструкцию бинарём, и мечу лейбой адрес, в которой оригинальная мнемоника. У XEDParse 12 опкодов для записи и кодирования недоступны+ Code:
sendersu пишет: аттач потерялся Максимальный размер аттача: 500KB. а лог до турбо далеко конечно, но уже с той же богадельней, но на час быстрее, проц до 50,%, память до гига. shellstorm пишет: готовая библиотека разве что отдельной командой для скрипта, но в сам метод сборки пока не понял зачем. + поиск патерна до первого совпадения есть. клянчить или фиксить формат строки надоело, искал указатели таким способом. Code:
надо так же и для мнемоники сделать, чтобы без рефов и в своём цикле. shellstorm пишет: GuiUpdateEnable(bool updateNow); разве не работает? вот сколько вершин в функции вот столько и мсг, апишки не спасают. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 28 мая 2017 20:19 · Личное сообщение · #30 |
|
Создано: 28 мая 2017 20:32 · Личное сообщение · #31 shellstorm пишет: Скрипт нельзя пустить в несколько потоков если отдельная скрипт_команда для поиска по хешу, и она надёжна и быстрее, то почему бы не сделать. из 19 тел, 7 пропустили из-за текущего подсчёта интов, не проскочили инструкции выравнивания нопами, пока не потяно для чего там прописаных. остальные 13 достаточно в Multiline Ultimate Assembler на помеченный переход тыкнуть шорты, и асемблить пакетом. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
<< . 1 . 2 . 3 . 4 . 5 . >> |
eXeL@B —› Софт, инструменты —› x64dbg - Плагины |