Сейчас на форуме: -Sanchez-, Alf, Adler (+4 невидимых)

 eXeL@B —› Софт, инструменты —› x64dbg - Плагины
. 1 . 2 . 3 . 4 . 5 . >>
Посл.ответ Сообщение


Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 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, пока не получается.
--> Эта <-- тема актуальна, оптимизация по шаблонам(потернам) довольна реальна, но как организовать базу данных для них, пока не решалась.
Линк запостил.
--> от 24 июля 2017<--
Дальше посмотрим, что из этого топа выйдет.
//ахах топ потыхеньку умирает, сколько бы не постил

-----
Чтобы юзер в нэте не делал,его всё равно жалко..


| Сообщение посчитали полезным: mak, zNob, Haoose-GP, v00doo, jinoweb, ClockMan, fasteralex

Ранг: 64.9 (постоянный), 47thx
Активность: 0.120.02
Статус: Участник

Создано: 01 мая 2017 15:46
· Личное сообщение · #2

анти анти дебаг, китайский...
https://github.com/stonedreamforest/NaiHeQiao

авто хуки на CreateProcess etc, vs малварь
https://github.com/David-Reguera-Garcia-Dreg/DbgChild

итд...
https://github.com/search?q=topic%3Ax64dbg-plugin&type=Repositories

хм, а Вудман RCE Tools - Collaborative RCE Tool Library прикрыли...

х64дбг бажное, Иду даж приятней применять...




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 01 мая 2017 19:31
· Личное сообщение · #3

Bronco

> - Собираем код в отдельную страницу так сказать в пром код, обходим лапшу из джампов.

Как это реализовано, что за конструктор ?

-----
vx





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 01 мая 2017 19:48
· Личное сообщение · #4

difexacaw

> - Как это реализовано, что за конструктор ?
да все нужные данные на ладошке
SELECTIONDATA select;
BASIC_INSTRUCTION_INFO currentdata;
Code:
  1. typedef struct
  2. {
  3.     DWORD type; //value|memory|addr
  4.     VALUE_INFO value; //immediat
  5.     MEMORY_INFO memory;
  6.     duint addr; //addrvalue (jumps + calls)
  7.     bool branch; //jumps/calls <<
  8.     bool call; //instruction is a call <<
  9.     int size;
  10.     char instruction[MAX_MNEMONIC_SIZE * 4];
  11. } BASIC_INSTRUCTION_INFO;

GuiSelectionGet(GUI_DISASSEMBLY, &select);
Code:
  1. if (currentdata.call == true)
  2. DbgAssembleAt($result, currentdata.instruction);
  3. $result += currentdata.size;
  4. addr_start += currentdata.size;
  5. }
  6. else
  7. {
  8. addr_start = currentdata.addr;
  9. }


-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 01 мая 2017 19:54
· Личное сообщение · #5

Bronco

А как связываются эти BASIC_INSTRUCTION_INFO в списки ?

-----
vx




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 01 мая 2017 19:54 · Поправил: VodoleY
· Личное сообщение · #6

Bronco та да.. ток это можно сделать ток в динамике (трассировка). статик анализ будет чертовски адский и глючный.. либо в конце концов получится микровиртуальная машина.
ЗЫ к чему я это веду... динамик построенние трассы.. чертовски тормознутая тема.

Добавлено спустя 3 минуты
difexacaw пишет:

А как связываются эти BASIC_INSTRUCTION_INFO в списки

да блин все просто.. у тебя 1ая инструкция.. а потом инструкция + ее размер.. типа следующая инсрукция.. и так до посинения. я таку байду чисто на дизасемблере делал Walker называл. все норм работает.. пока нету jmp eax или call [ebx] ну в этом роде .... те работает ток для простых вещей. но зато кода.. 30 строчек

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 01 мая 2017 20:09 · Поправил: Bronco
· Личное сообщение · #7

VodoleY пишет:
это можно сделать ток в динамике (трассировка).

в процессе чтения_записи в секцию_страницу, чем не динамика ?
либо уже позже с пром_кодом в живую в самой странице,
VodoleY пишет:
пока нету jmp eax или call [ebx] ну в этом роде

duint addr; //addrvalue (jumps + calls)
если поле в структуре равно 0, то это либо переходники в таблицы, либо переходники по содержимому указателей в регистрах общего пользования.
тут так же всё просто, повторюсь плагинсдк неплохой.

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 01 мая 2017 20:16
· Личное сообщение · #8

Bronco пишет:
в процессе чтения_записи в секцию_страницу, чем не динамика ?

короче это копимем из армы получается.. а переходы.. считай наномиты..

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 01 мая 2017 21:04
· Личное сообщение · #9

Bronco

ап.

Добавлено спустя 1 минуту
VodoleY

Я у тс спросил как это реализовано, а не как реализуется. Разницу понимаете ?

-----
vx





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 01 мая 2017 21:42 · Поправил: Bronco
· Личное сообщение · #10

difexacaw пишет:
ап.

difexacaw
и наше вам с кисточкой..
ответы на подобные "глубокие" вопросы , с высокой долей вероятности возможно найти --> здесь <--

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 01 мая 2017 22:08
· Личное сообщение · #11

Bronco пишет: Из не решённого, перехват и обработка исключений самого Multiline Ultimate Assembler.

зачем вообще хвататься за MUA? в самом же x64dbg есть keystone и xed, достаточно набросать небольшой парсер и обойтись без костылей с MUA.




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 01 мая 2017 22:28 · Поправил: Bronco
· Личное сообщение · #12

shellstorm пишет:
зачем вообще хвататься за MUA?

он хорошо справляется со свёрткой цикличных конструкций, с дистанциями операторов пост и пред условий.
автор предоставил хоткеи, воспользоваться этим самое простое решение.
есть keystone и xed
Ок...а как переключать режим асемблирования ?
я этого в сдк не нашёл. и потом, каждый из этих движков на каких то инструкциях спотыкается, кеды на каких то хмм и выше, кейстоун чуть получше, асмжт ещё лучше, но и у него есть пределы. ну а так полностью согласен, возможность своей реализации всегда есть. но и тут подводные -->камни <--

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 01 мая 2017 22:39
· Личное сообщение · #13

Bronco пишет: Ок...а как переключать режим асемблирования ?

В смысле x86/x64? asmjit флагом x64 \ false\true. Keystone завязан на разрядности отладчика, x86 отладчик и опция выставлена x86, в x64 соответственно x64. Можно совсем радикально подойти, прикрутить fasm.dll, компилить bin и уже его лить, тем более дизасм есть и можно разбить по инструкциям. Это все же проще чем связывать два плагина.

Добавлено спустя 3 минуты
#ifdef _WIN64
parse.x64 = true;
#else //x86
parse.x64 = false;
#endif




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 01 мая 2017 22:57
· Личное сообщение · #14

shellstorm пишет:
В смысле x86/x64?

не в архитектуре препятствие.
в интерфейсе дизасма есть выбор движка (space). аналог в аписдк не нашёл.
MUA выдаёт эксепшены , в зависимости от возможностей текущуго активного движка.
ну а два плага увязать через регистрацию новых скриптовых команд, задача не сложная.
так то всё шустро, за минуту до 100 подпрограмм, с размером от 60 до 600 и выше байт, переносит на родные места, а тут их порядка 17000.

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 01 мая 2017 23:24
· Личное сообщение · #15

Выставляется в настройках.

Code:
  1. enum class AssemblerEngine
  2. {
  3.     XEDParse = 0,
  4.     Keystone = 1,
  5.     asmjit = 2
  6. };
  7. extern AssemblerEngine assemblerEngine;
  8.  
  9. bool assemble(duint addr, unsigned char* dest, int* size, const char* instruction, char* error);
  10. bool assembleat(duint addr, const char* instruction, int* size, char* error, bool fillnop);


Добавлено спустя 17 минут
забыл привести сами настройки.

Code:
  1. typedef unsigned long long duint;
  2. #else
  3. typedef unsigned long __w64 duint;
  4. duint setting;
  5. if(BridgeSettingGetUint("Engine", "Assembler", &setting))
  6. assemblerEngine = AssemblerEngine(setting);
  7. else
  8. assemblerEngine = AssemblerEngine::XEDParse;


| Сообщение посчитали полезным: Bronco


Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 01 мая 2017 23:52
· Личное сообщение · #16

shellstorm
грамотно, предметно, глыба...
может что и по кьютвиджетам там есть, помимо стандарта адд ; шоу и тд?

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 02 мая 2017 00:07
· Личное сообщение · #17

Bronco пишет: может что и по кьютвиджетам там есть, помимо стандарта адд ; шоу и тд?

все gui здесь: https://github.com/x64dbg/x64dbg/blob/development/src/gui/Src/Bridge/Bridge.h
остальное самому дописывать или подменять через хаки и надеяться, что ничего не рухнет, ну или как вариант получить размеры виджета и рисовать все поверх родного.




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 02 мая 2017 08:38
· Личное сообщение · #18

shellstorm пишет:
все gui здесь

оки. посмотрю
shellstorm пишет:
достаточно набросать небольшой парсер и обойтись без костылей с MUA.

вот теперь полностью согласен.
для этой задачи вышло где то 30 строчек. при отключенном гуе шустро получается.
порядка 300х подпрограм с общими размером 30000 байт за минуту. весьма оптимистично.
ну и как плуг теперь назвать?
с AssemblerEngine ещё не разбирался но это нужно. без тру катч падать будем.
вот первая инструкция что попалась с которой -кеды и кейстоун не дружат, асмжт проглатывает не морщась.
COMISS XMM0, XMMWORD PTR [RCX + 0x188]

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 02 мая 2017 09:09
· Личное сообщение · #19

Bronco пишет:
кеды и кейстоун не дружат

репорти авторам, там народ дб вменяемым вполне

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 02 мая 2017 13:44 · Поправил: shellstorm
· Личное сообщение · #20

Bronco пишет: оки. посмотрю

еще этот шаблон можно глянуть, если требуется что то кастомное: https://github.com/x64dbg/QtPlugin


Bronco пишет: порядка 300х подпрограм с общими размером 30000 байт за минуту. весьма оптимистично.

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




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 02 мая 2017 13:46
· Личное сообщение · #21

ajax пишет:
репорти авторам

пусть кто ближе, или в теме тот и репостит.
LOCK XADD DWORD PTR [0x1421D552C], EAX - RW XED&CAPSTON, аasmjt онли R
MOVSS DWORD PTR [R8], XMM0 RW CAPSTON& , XEDparser онли R
COMISS XMM0, XMMWORD PTR [RCX + 0x188] RW аasmjt , XED&CAPSTON онли R
чтобы все в ауте такого не было. одна инструкция с указателем либо пересчитвать, либо мнемоника, так что таскать бинариным не вариант
Ексепшен "could not allocate memory", как из плага перехватить_обработать пока не разабрался

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 02 мая 2017 18:36 · Поправил: ajax
· Личное сообщение · #22

Bronco
я не из этой "оперы". пару раз юзал их творение и очень специфически. в "испорченный телефончик" играть нет смысла

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 03 мая 2017 03:54 · Поправил: Bronco
· Личное сообщение · #23

ajax пишет:
я не из этой "оперы"

да у меня так же гранаты не той системы...
Bronco пишет:
как из плага перехватить_обработать пока не разабрался

у нас булка, тут и перехватывать ничего не надо.,
BRIDGE_IMPEXP bool DbgAssembleAt(duint addr, const char* instruction)
а вот с AssemblerEngine пока разбираюсь
shellstorm пишет:
можно еще выжать скорости добавив многопоточность

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

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 03 мая 2017 05:10
· Личное сообщение · #24

Bronco пишет:а вот с AssemblerEngine пока разбираюсь

Скиньте проект вашего макета плагина и опишите кратко, что именно хочется и что не получается, допилю эту часть.

Bronco пишет: по моему частному случаю слишком много , поэтому в первую очередь качество. чтобы бокарезы потом не искать.

Да нет, если использовать нормальную библиотеку никаких проблем не будет, тем более думаю в будущем все равно появятся cfg, иначе как код чистить.




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 03 мая 2017 05:19 · Поправил: Bronco
· Личное сообщение · #25

shellstorm пишет:
Скиньте проект вашего макета плагина и опишите кратко, что именно хочется и что не получается, допилю эту часть.

по умолчанию использую asmjt, энум в хидер бриджа закинул, пока так, но уже не закрываеимся.
Code:
  1. if (!DbgAssembleAt(address_for, currentdata.instruction)){
  2. if (BridgeSettingGetUint("Engine", "Assembler", &setting))
  3. auto assemblerEngine = Assembler::AssemblerEngine(setting);
  4. else
  5. auto assemblerEngine = Assembler::AssemblerEngine::XEDParse;
  6. Register::SetCIP(address_from);
  7. Cmd("guiupdateenable");
  8. Script::Comment::Set(address_for, currentdata.instruction, 0);
  9. Script::Bookmark::Set(address_for, 0);
  10. DbgScriptAbort();
  11. break; }

вопрос по SetCIP, это универсальный IP под обе архитектуры ?
по задаче которую надо решить.
у меня в двух секциях с таблицами перебито порядка 40000 указателей, по секции кода порядка 17 000 уникальных безусловных переходов на оригинальный код приложения. Нахожу прыжки, ищу в таблицах указатели с аналогичной дистанцией, перебиваю на секцию кода, возвращаю тело подпрограммы на ролное место ..))

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 03 мая 2017 06:04
· Личное сообщение · #26

Bronco пишет: вопрос по SetCIP, это универсальный IP под обе архитектуры ?

Да, универсально, зависит от разрядности отладчика.
За настройки отвечают функции BridgeSetting\Get\Set\Update : читаем\пишем\обновляем.

Bronco пишет: Нахожу прыжки, ищу в таблицах указатели с аналогичной дистанцией, перебиваю на секцию кода

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




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 03 мая 2017 06:53
· Личное сообщение · #27

shellstorm пишет:
BridgeSetting\Get\Set\Update

хм...я то думал Диа сдк в снапшотах обновляет, но собственно оно работает. немного не так как Вы предложили, но суть та же
Code:
  1. duint setting;
  2. BridgeSettingGetUint("Engine", "Assembler", &setting);
  3. (setting == 2)
  4. setting = (duint)Assembler::AssemblerEngine::Keystone;
  5. else
  6. setting = (duint)Assembler::AssemblerEngine::asmjit;
  7. BridgeSettingSetUint("Engine", "Assembler", setting);

но надо делать в цикле while (true) до посинения...

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 03 мая 2017 07:29
· Личное сообщение · #28

Bronco пишет: немного не так как Вы предложили, но суть та же

Так выше скидывал куски кода из объявлений, то бишь из самих сурсов x64dbg, сам я не писал, показал лишь интерфейс и контекст использования.
В аттаче ман по api x64dbg.

2d2d_03.05.2017_EXELAB.rU.tgz - x64dbg.zip

| Сообщение посчитали полезным: Bronco


Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 03 мая 2017 08:48
· Личное сообщение · #29

shellstorm пишет:
В аттаче ман по api x64dbg.

ок..феньку тыкнул.
вышло где то так.
Code:
  1. duint set_setting = 0;
  2. if (DbgAssembleAt(address_for, currentdata.instruction) !=true)
  3. {
  4. duint setting;
  5. BridgeSettingGetUint("Engine", "Assembler", &setting);
  6. while (true)
  7. {
  8. setting = set_setting;
  9. BridgeSettingSetUint("Engine", "Assembler", setting);
  10. DbgSettingsUpdated();
  11. if (set_setting > 2)
  12. {
  13. Cmd("guiupdateenable");
  14. Register::SetCIP(address_from);
  15. Script::Comment::Set(address_for, currentdata.instruction, 0);
  16. Script::Bookmark::Set(address_for, 0);
  17. DbgScriptAbort();
  18. break;
  19. }
  20. set_setting++;
  21. if (DbgAssembleAt(address_for, currentdata.instruction) == true)
  22. break;
  23. else
  24. continue;
  25. }
  26. BridgeSettingSetUint("Engine", "Assembler", 2);
  27. DbgSettingsUpdated();
  28. }

плаг дебажу в студии, но не могу понять почему прерывания в ней на участке кода не стабильные, надо так понимать что в среде винды будет то же самое?

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 03 мая 2017 13:07
· Личное сообщение · #30

Bronco пишет: надо так понимать что в среде винды будет то же самое?

Хз, я отладчиком не очень долго пользовался и плагины не писал, только скрипты, там весь api swig-om покрыли, и нет особой разницы в плане функционала, компилировать только не нужно.


. 1 . 2 . 3 . 4 . 5 . >>
 eXeL@B —› Софт, инструменты —› x64dbg - Плагины
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати