Ну, хз что там у тебя за задачи были. Если бряк на оеп, то да - гуй не нужон. Я вообще все в статике разбираю, мне и дий не нужон; отладчик запускаю только когда мне уже известно, где и что забрать.
rmn, Например найти в апп обработку строки, адреса ip:df сохранятся в лог, зачем там какой то гуй, ну кроме блокнота если вывод в файл. Так что бред - сишка нужна гуй есчо что либо. Это всё тебе для отладчика нужно, а не для инструментов по теме.
Не обязательно, гуй может JIT-компилить асм кодец, в зависимости от параметров, указанных в гуе, а потом (после компиляции контролирующего кода) уже гонять семпл.
Rel, Зачем эти все трудности, они могут быть лишь приват тулзе, что бы настройки поменять, тк кода нет что бы его изменить. Я всё что нужно в сурце меняю, мне кнопки не нужны. > JIT-компилить асм кодец + пол года отладки на такое ?
Why a Python API, but JavaScript debugging logic? Frida’s core is written in C and injects QuickJS into the target processes, where your JS gets executed with full access to memory, hooking functions and even calling native functions inside the process. There’s a bi-directional communication channel that is used to talk between your app and the JS running inside the target process. Using Python and JS allows for quick development with a risk-free API. Frida can help you easily catch errors in JS and provide you an exception rather than crashing. Rather not write in Python? No problem. You can use Frida from C directly, and on top of this C core there are multiple language bindings, e.g. Node.js, Python, Swift, .NET, Qml, etc. It is very easy to build additional bindings for other languages and environments. Ну и если заинтересуетесь, можете глянуть ->здесь<-.
Это организации нужно, в которой работает группа. Что бы не по лог файликам это все было, а в нормальной БД. Что бы автора серии поделок по подчерку находить, например. Т.е. это скорее ghidra+osquery, чем отладчик. ИМХО дилетанта. Т.е. это всё обвес, а ни как не движок дби. --- Сообщение объединено, 14 фев 2021 --- GRAFik, QuickJS разработал Fabrice Bellard ? пожалуй надо ознакомиться. Спасибо.
А я и не знал, что это его разработка. Запомнил его как разработчика QEMU и еще какого-то скоростного компилятора для СИ-кода(примерная формулировка по памяти ). Вот эта штука наверняка во Фриде на полную катушку используется: Can compile Javascript sources to executables with no external dependency.
Может быть вот эти ссылки развеют ваши сомнения? https://frida.re/ https://www.ired.team/miscellaneous...ternals/instrumenting-windows-apis-with-frida И потом, Инди, есть хорошая поговорка: "Называй хоть горшком, только в печь не клади". Какая разница как назвать Фриду - главное, что программа интересная. Вы лучше бы, если считаете себя опытным системщиком, то помогли бы разобраться с режимами ее работы, что она, вообще, умеет делать? А потом уже когда мы будем знать, как запускать все режимы ее работы, можно будет ее сравнить с тем же ПИНом и выяснить в чем она ему уступает, а в чем нет и можно ли ее причислить к категории DBI. А по-другому - это выльется в мало кому интересный троллинг по принципу - а вот ты докажи, что Фрида ДБИ? Если вы уже устали от всех этих ДБИ, ну что ж, будет очень жаль - тогда проходите мимо и не мешайте разбираться с этим, кому это интересно.
Тебе не нужны, комьюнити нужны, мы не о тебе говорим. Там нет компиляции в нативный код, как таковой, просто байткод (или сериализованое аст) пихается в сишный исходник или в бинарь. Так многие скриптовые языки умеют делать, в этом нет ничего особенного.
GRAFik, > что Фрида ДБИ? Я ведь говорил выше, ядро дби это бинарный транслятор. Эта тулза его не содержит - ни транслятора, ни декодера инструкций ничего, что делало бы её дби. Единственно косвенное упоминание связанное с cfg это ptrace() в сурках для линя. Эта фигня для работы со скриптами на линях. --- Сообщение объединено, 14 фев 2021 --- https://habr.com/ru/company/otus/blog/530780/ То что в этой тулзе называют трассировкой на самом деле обман. В бинарных трансляторах трассировка и есть основной цикл работы, каждая инструкция мониторится. Установка точки останова это условное название, на самом деле это задание адреса и условия для транслятора, с этими адресами памятью он ничего не делает. Тот же тулз патчит указанные функции в памяти, тем самым получая управление, без какой либо трансляции или трассировки даже машинной. Такой развод.
https://medium.com/@oleavr/anatomy-of-a-code-tracer-b081aadb0df8 https://github.com/frida/frida-gum/...1f43d9325d63/gum/backend-x86/gumstalker-x86.c Ну и вдогонку есть скрипт для frida, собирающий code coverage на уровне Basic Blocks https://github.com/gaasedelen/lighthouse/blob/master/coverage/frida/frida-drcov.py
eshmereum, По второй ссылке просто запредельная дичь, автор этого высера очевидно красноглазый тк любая процедура именуется не шифтя gum_exec_block_new". Почему не в сурках frida-core ? Код (Text): /*printf ("gum_stalker_handle_exception state=%u %p %08x\n", block->state, context->Eip, exception_record->ExceptionCode);*/ switch (block->state) { case GUM_EXEC_NORMAL: case GUM_EXEC_SINGLE_STEPPING_ON_CALL: { DWORD instruction_after_call_here; DWORD instruction_after_call_above_us; block->previous_dr0 = context->Dr0; block->previous_dr1 = context->Dr1; block->previous_dr2 = context->Dr2; block->previous_dr7 = context->Dr7; instruction_after_call_here = context->Eip + gum_x86_reader_insn_length ((guint8 *) context->Eip); context->Dr0 = instruction_after_call_here; enable_hardware_breakpoint (&context->Dr7, 0); context->Dr1 = (DWORD) self->priv->ki_user_callback_dispatcher_impl; enable_hardware_breakpoint (&context->Dr7, 1); instruction_after_call_above_us = (DWORD) find_system_call_above_us (self, (gpointer *) context->Esp); if (instruction_after_call_above_us != 0) { context->Dr2 = instruction_after_call_above_us; enable_hardware_breakpoint (&context->Dr7, 2); } block->state = GUM_EXEC_SINGLE_STEPPING_THROUGH_CALL; break; } case GUM_EXEC_SINGLE_STEPPING_THROUGH_CALL: { context->Dr0 = block->previous_dr0; context->Dr1 = block->previous_dr1; context->Dr2 = block->previous_dr2; context->Dr7 = block->previous_dr7; gum_exec_ctx_replace_current_block_with (ctx, GSIZE_TO_POINTER (context->Eip)); context->Eip = (DWORD) ctx->resume_at; block->state = GUM_EXEC_NORMAL; break; } - вот это высер, кровь из глаз пойдёт, попытка написать отладчик. Что это вообще такое !?
Rel, Может и читается, но накой нужна трассировка машинная. Трансляция это кэш, иначе никак. Инструкция раскодируется сохраняется блок в кэш, что бы исключить повторную раскодировку. Машинной трассировкой ничего не сделать, у любого криптора антидебаг.
Ну как накой? Многие ее используют и проблем не знают. У твоего же визора нет нормального программного интерфейса, если этот хваленый визор вообще существует. Так что людям приходится пользоваться тем, что есть. Про это вообще и вся тема, что можно жить без спецовых визоров. Чтобы маглы вроде меня и Моргота могли малварь гонять и оеп искать.
Ну, тут какбе те, кто ее используют, говорят, что проблемы знают, да еще какие... Нихрена не работает толком, разве что частные случаи, которые специально для презенташки на конференции приготовили.
Indy_ , eshmereum, Rel, Спасибо за информацию в отдельных ваших постах (отметил плюсами), которые натолкнули меня на некоторые идеи в отношении Фриды. Я думаю, может общими усилиями удастся все же погубже ее раскопать. Особенно понравилась моя же ссылка задублированная eshmereum, как бы такой немой упрек - что ж ты товарищ ссылки даешь, а сам их не изучаешь? =)) А я уже и забыл про нее. У меня уже столько этих ссылок, что одна вытесняет другую и "в голове порой каша". Разместил эту ссылку на видном месте, в ближайшее время нужно будет внимательно прочитать. =)) Indy_, Нашел вот такую информацию в документации, так что в отношении отсутствия транслятора вы, по-моему,ошибаетесь, если конечно, под транслятором подразумевается дизассемблер: =)) CPU Instruction Instruction Instruction.parse(target): parse the instruction at the target address in memory, represented by a NativePointer. Note that on 32-bit ARM this address must have its least significant bit set to 0 for ARM functions, and 1 for Thumb functions. Frida takes care of this detail for you if you get the address from a Frida API (for example Module.getExportByName()). The object returned has the fields: address: address (EIP) of this instruction, as a NativePointer next: pointer to the next instruction, so you can parse() it size: size of this instruction mnemonic: string representation of instruction mnemonic opStr: string representation of instruction operands operands: array of objects describing each operand, each specifying the type and value, at a minimum, but potentially also additional properties depending on the architecture regsRead: array of register names implicitly read by this instruction regsWritten: array of register names implicitly written to by this instruction groups: array of group names that this instruction belongs to toString(): convert to a human-readable string For details about operands and groups, please consult the Capstone documentation for your architecture.
отладчики/вирты/эмули/.. для раскрутки/выдирания алго из экзе == костыли по определению. кстати, споры "что же лучше, скрипты иль сишные/асм модули" бессмысленны == нужны оба варианта.. 1. скрипты для статичных/стартовых настроек. 2. модули для динамики. ========= касательно гуя, всяк страждущий может и сам его лепить. я же тут, однако согласен с Инди == лепить гуй к костылям есмь лишняя трата сил == наиболее частые команды легче сделать в виде скриптовых файликов и клацать по ним мышкой, да и в консоли можно менюшек настряпать по желанию.