Визоры больше не нужны

Тема в разделе "WASM.RESEARCH", создана пользователем Rel, 7 окт 2020.

  1. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.329
    Ну, хз что там у тебя за задачи были. Если бряк на оеп, то да - гуй не нужон. Я вообще все в статике разбираю, мне и дий не нужон; отладчик запускаю только когда мне уже известно, где и что забрать.
     
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    rmn,

    Например найти в апп обработку строки, адреса ip:df сохранятся в лог, зачем там какой то гуй, ну кроме блокнота если вывод в файл. Так что бред - сишка нужна гуй есчо что либо. Это всё тебе для отладчика нужно, а не для инструментов по теме.
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    Не обязательно, гуй может JIT-компилить асм кодец, в зависимости от параметров, указанных в гуе, а потом (после компиляции контролирующего кода) уже гонять семпл.
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Rel,

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

    > JIT-компилить асм кодец

    + пол года отладки на такое ?
     
  5. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    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.


    Ну и если заинтересуетесь, можете глянуть ->здесь<-.
     
    q2e74 нравится это.
  6. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    988
    Это организации нужно, в которой работает группа. Что бы не по лог файликам это все было, а в нормальной БД. Что бы автора серии поделок по подчерку находить, например. Т.е. это скорее ghidra+osquery, чем отладчик. ИМХО дилетанта. Т.е. это всё обвес, а ни как не движок дби.
    --- Сообщение объединено, 14 фев 2021 ---
    GRAFik, QuickJS разработал Fabrice Bellard ? пожалуй надо ознакомиться. Спасибо.
     
  7. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    А я и не знал, что это его разработка. Запомнил его как разработчика QEMU и еще какого-то скоростного компилятора для СИ-кода(примерная формулировка по памяти :) ).

    Вот эта штука наверняка во Фриде на полную катушку используется:
    Can compile Javascript sources to executables with no external dependency.
     
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    GRAFik,

    По ссылке какой то треш для работы со скриптами. Это никакого отношения к дби не имеет.
     
  9. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Может быть вот эти ссылки развеют ваши сомнения? :)
    https://frida.re/
    https://www.ired.team/miscellaneous...ternals/instrumenting-windows-apis-with-frida

    И потом, Инди, есть хорошая поговорка: "Называй хоть горшком, только в печь не клади". Какая разница как назвать Фриду - главное, что программа интересная. Вы лучше бы, если считаете себя опытным системщиком, то помогли бы разобраться с режимами ее работы, что она, вообще, умеет делать? А потом уже когда мы будем знать, как запускать все режимы ее работы, можно будет ее сравнить с тем же ПИНом и выяснить в чем она ему уступает, а в чем нет и можно ли ее причислить к категории DBI. А по-другому - это выльется в мало кому интересный троллинг по принципу - а вот ты докажи, что Фрида ДБИ? :) Если вы уже устали от всех этих ДБИ, ну что ж, будет очень жаль - тогда проходите мимо и не мешайте разбираться с этим, кому это интересно. :)
     
  10. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    Тебе не нужны, комьюнити нужны, мы не о тебе говорим.

    Там нет компиляции в нативный код, как таковой, просто байткод (или сериализованое аст) пихается в сишный исходник или в бинарь. Так многие скриптовые языки умеют делать, в этом нет ничего особенного.
     
    GRAFik нравится это.
  11. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    GRAFik,

    > что Фрида ДБИ?

    Я ведь говорил выше, ядро дби это бинарный транслятор. Эта тулза его не содержит - ни транслятора, ни декодера инструкций ничего, что делало бы её дби. Единственно косвенное упоминание связанное с cfg это ptrace() в сурках для линя. Эта фигня для работы со скриптами на линях.
    --- Сообщение объединено, 14 фев 2021 ---
    https://habr.com/ru/company/otus/blog/530780/

    То что в этой тулзе называют трассировкой на самом деле обман. В бинарных трансляторах трассировка и есть основной цикл работы, каждая инструкция мониторится. Установка точки останова это условное название, на самом деле это задание адреса и условия для транслятора, с этими адресами памятью он ничего не делает. Тот же тулз патчит указанные функции в памяти, тем самым получая управление, без какой либо трансляции или трассировки даже машинной. Такой развод.
     
    GRAFik нравится это.
  12. eshmereum

    eshmereum New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2020
    Сообщения:
    23
    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
     
    GRAFik нравится это.
  13. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    eshmereum,

    По второй ссылке просто запредельная дичь, автор этого высера очевидно красноглазый тк любая процедура именуется не шифтя gum_exec_block_new".

    Почему не в сурках frida-core ?

    Код (Text):
    1.   /*printf ("gum_stalker_handle_exception state=%u %p %08x\n",
    2.       block->state, context->Eip, exception_record->ExceptionCode);*/
    3.  
    4.   switch (block->state)
    5.   {
    6.     case GUM_EXEC_NORMAL:
    7.     case GUM_EXEC_SINGLE_STEPPING_ON_CALL:
    8.     {
    9.       DWORD instruction_after_call_here;
    10.       DWORD instruction_after_call_above_us;
    11.  
    12.       block->previous_dr0 = context->Dr0;
    13.       block->previous_dr1 = context->Dr1;
    14.       block->previous_dr2 = context->Dr2;
    15.       block->previous_dr7 = context->Dr7;
    16.  
    17.       instruction_after_call_here = context->Eip +
    18.           gum_x86_reader_insn_length ((guint8 *) context->Eip);
    19.       context->Dr0 = instruction_after_call_here;
    20.       enable_hardware_breakpoint (&context->Dr7, 0);
    21.  
    22.       context->Dr1 = (DWORD) self->priv->ki_user_callback_dispatcher_impl;
    23.       enable_hardware_breakpoint (&context->Dr7, 1);
    24.  
    25.       instruction_after_call_above_us = (DWORD)
    26.           find_system_call_above_us (self, (gpointer *) context->Esp);
    27.       if (instruction_after_call_above_us != 0)
    28.       {
    29.         context->Dr2 = instruction_after_call_above_us;
    30.         enable_hardware_breakpoint (&context->Dr7, 2);
    31.       }
    32.  
    33.       block->state = GUM_EXEC_SINGLE_STEPPING_THROUGH_CALL;
    34.  
    35.       break;
    36.     }
    37.  
    38.     case GUM_EXEC_SINGLE_STEPPING_THROUGH_CALL:
    39.     {
    40.       context->Dr0 = block->previous_dr0;
    41.       context->Dr1 = block->previous_dr1;
    42.       context->Dr2 = block->previous_dr2;
    43.       context->Dr7 = block->previous_dr7;
    44.  
    45.       gum_exec_ctx_replace_current_block_with (ctx,
    46.           GSIZE_TO_POINTER (context->Eip));
    47.       context->Eip = (DWORD) ctx->resume_at;
    48.  
    49.       block->state = GUM_EXEC_NORMAL;
    50.  
    51.       break;
    52.     }
    - вот это высер, кровь из глаз пойдёт, попытка написать отладчик. Что это вообще такое !?
     
  14. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    Ну кстати этот код читается куда лучше спецовых асм-выкакашей.
     
  15. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Rel,

    Может и читается, но накой нужна трассировка машинная.

    Трансляция это кэш, иначе никак. Инструкция раскодируется сохраняется блок в кэш, что бы исключить повторную раскодировку. Машинной трассировкой ничего не сделать, у любого криптора антидебаг.
     
  16. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.242
    Ну как накой? Многие ее используют и проблем не знают. У твоего же визора нет нормального программного интерфейса, если этот хваленый визор вообще существует. Так что людям приходится пользоваться тем, что есть. Про это вообще и вся тема, что можно жить без спецовых визоров. Чтобы маглы вроде меня и Моргота могли малварь гонять и оеп искать.
     
  17. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.329
    Ну, тут какбе те, кто ее используют, говорят, что проблемы знают, да еще какие... Нихрена не работает толком, разве что частные случаи, которые специально для презенташки на конференции приготовили.
     
    Indy_ нравится это.
  18. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    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.
     
  19. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.077
    отладчики/вирты/эмули/.. для раскрутки/выдирания алго из экзе == костыли по определению. кстати, споры "что же лучше, скрипты иль сишные/асм модули" бессмысленны == нужны оба варианта..

    1. скрипты для статичных/стартовых настроек.
    2. модули для динамики.
    =========
    касательно гуя, всяк страждущий может и сам его лепить. я же тут, однако согласен с Инди == лепить гуй к костылям есмь лишняя трата сил == наиболее частые команды легче сделать в виде скриптовых файликов и клацать по ним мышкой, да и в консоли можно менюшек настряпать по желанию.
     
  20. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    GRAFik,

    Любой отладчик использует диз, но он так же не является транслятором.