всё про "обратную трассировку"

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

  1. VaVa

    VaVa Member

    Публикаций:
    0
    Регистрация:
    21 авг 2018
    Сообщения:
    34
    слыхал что у GDB из под консоли можно сделать шаг назад у отлаживаемой программы
    у Visual Studio 2017-2019 тоже появилась эта функция в C# (но там полное ГГ в 99% случаев она вобще не работает непонятно почему)
    А что еще может так откатывать шаги отлаживаемой программы? пожалуйста с недостатками.

    Слыхал что что-то даже сделали аппаратно. А кок там тогда сохраняется/отслеживается память?
     
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Команда backtrace в gdb не про шаг назад, а про цепочку вызовов, которая разматывается об адреса возврата и стековые аргументы.
     
    VaVa нравится это.
  3. VaVa

    VaVa Member

    Публикаций:
    0
    Регистрация:
    21 авг 2018
    Сообщения:
    34
    а какой-нибудь ещё откат есть?

    как я понял отладка не такая совершенная... как вы тогда программы отлаживаете/изучаете ??? (если прогу хоть как-то защитили то jamp reg+reg вобще не отследишь)
     
  4. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    999
    VaVa, свои патчи, свои загрузчики. У Инди свой визор. Шаг назад радар может, но предварительно надо включить сохранение стэйтов. В гдб это можно путем скрипта. В любом случае это эмитация шага назад. Просто восстановление стэйта.
     
    VaVa нравится это.
  5. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Свои собственные программы примерно так и отлаживаю: произошло исключение, смотрю в стеке адреса возврата и какие-нибудь узнаваемые конструкции, позволяющие найти это место в исходнике. И чужие программы обычно примерно так же, но в каждой ситуации можно разные способы применять, выбираю обычно интуитивно, часто сразу правильный. Нередко приходится вообще по-спортивному в статике что-то изучать. Твой вожделенный шаг назад можно по прямой трассировке делать, но это никакая не вундервафля, которая до смешного все упростит, если будет.
     
    VaVa нравится это.
  6. VaVa

    VaVa Member

    Публикаций:
    0
    Регистрация:
    21 авг 2018
    Сообщения:
    34
    а он в этом стейте изменённую память отслеживает?
    --- Сообщение объединено, 2 мар 2020 ---
    как я понял тока по стеку ?
    а какие ещё трудности при изучении подсовывают?
     
  7. Indy_

    Indy_ Well-Known Member

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

    Если при трассировке сохранить контекст и области изменяемой памяти(куда происходит запись и какой длины выборка), то можно сделать шаг назад и посмотреть в логе на эти изменения. Но они локальны для текущего потока(задачи), так например может быть общий ресурс у потоков и назад уже ничего не откатишь, аналогично как и системных вызовов. Только если слепок всей системы сделать в вирт машине, на это нужны были бы огромные обьёмы памяти. Главное что не понятно зачем это нужно.
     
  8. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Ты по-моему не видишь разницы между трассировкой и исполнением до бряка/исключения. Трассировка как техника применима очень условно: если попадется участок, где происходит синхронизация между потоками, а может быть даже сетевой обмен (где другая сторона дропнет соединение из-за задержки), ничем тебе трассировка с этим не поможет. То есть чаще всего она неприменима и шага назад у тебя никогда не будет. Применив немного смекалки и пару разнокалиберных бряков, а может быть даже скриптов, ловко расставляющих бряки, ты можешь отслеживать откуда взялись те или иные данные без всех этих лунных походок джексона.
     
    VaVa нравится это.
  9. VaVa

    VaVa Member

    Публикаций:
    0
    Регистрация:
    21 авг 2018
    Сообщения:
    34
    Да вобще про принципиальные возможности отладки чужих программ хотелось узнать (изучать досконально на готовых продуктах - слишком долго)
    --- Сообщение объединено, 2 мар 2020 ---
    Да в курсе что с потоками всё сложнее но это вроде решаемо перехватом системных вызовов...
    мне даже с одним потоком интересно, тока трассировка назад не до указанной точки, а с указанной и назад по очереди...
    КАК??? что-то вобще не понял...
    --- Сообщение объединено, 2 мар 2020 ---
    наверное ты догадываешься откуда оно запускается и просматриваешь полотно сначала...?
     
  10. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    У тебя есть цепочка вызовов функций/методов в стеке и указатель/буфер, содержащий в этот момент нужные тебе данные. Тебе нужно расставить бряки на несколько вызовов назад и найти момент, когда нужные тебе данные еще не инициализированы (убедившись что именно это срабатывание бряка по этому адресу предшествует тому месту, откуда ты двигался назад, ну либо отфильтровав срабатывания кондишнал бряком или даже отсчитав нужное количество срабатываний, если лень). Зная, как эти данные должны адресоваться с этого места, можно воткнуть бряк на обращение к памяти.
     
  11. VaVa

    VaVa Member

    Публикаций:
    0
    Регистрация:
    21 авг 2018
    Сообщения:
    34
    а если без стека ... jmp eax+[ebx] например?
     
  12. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Что делать с обфусцированным кодом обычно решают исходя из особенностей протектора. Он нетипичен и типичных приемов для него тоже нет.
     
  13. Indy_

    Indy_ Well-Known Member

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

    > тока трассировка назад не до указанной точки, а с указанной и назад по очереди...

    Что бы лог снять нужно трассировать вперёд. Обратная трассировка это фишка отладчика, проход по журналу событий.

    > возможности отладки чужих программ хотелось узнать

    Проблема не в отладке, все норм протекторы морфят код как минимум(без вирты), а что бы даже эти примитивы свернуть нужны сложные инструменты, которые графы строят-парсят-изменяют-собирают. Если какой то семпл не поддаётся отладке, то его механизмы будут реверсить и так же отлаживать, пока не обойдут, это обычно очень быстро решается. Другое дело когда там морф или вирт, на деморф/девирт нужна куча времени и ручной работы. А поэтому это и есть лучшая защита.
     
    VaVa нравится это.
  14. savoyard

    savoyard Member

    Публикаций:
    0
    Регистрация:
    16 янв 2020
    Сообщения:
    42
    f13nd, а вы в своей практике применяете PIN и Unicorn? Я почему спросил? Недавно, разговаривал с одним человеком и позволил себе немного критики в адрес трассировки и обратной трассировки. В ответ мне было сказано, что сразу видно, что вы не знакомы с PIN и Unicorn. И что трассировку нужно рассматривать комплексно, а трассировка ради трассировки - конечно смысла не имеет. И еще было сказано, что трассировка в PIN и трассировка в OllyDbg - абсолютно разные вещи. В ближайшее время хочу заняться изучением данной темы, чтобы согласиться или опровергнуть эту информацию. :)
     
  15. Indy_

    Indy_ Well-Known Member

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

    Пин поделка бесполезная, во первых там трассировки нет, там бинарная трансляция, не пригодно для трассировки https://exelab.ru/f/?action=vthread&forum=1&topic=25888&page=1#4

    Все эти dbi лежат только в виде сурков на gh, реально это куча мусора с которым не ясно что делать и что под ним вообще работает.
     
  16. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Нет.
    Иными словами ты не понял как ими пользоваться, поэтому они куча мусора.
     
    Rel нравится это.
  17. Indy_

    Indy_ Well-Known Member

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

    Не по этому, там нечего понимать. Просто там нет задачи разбить блок, он транслируется, тоесть при этом нет единичной инструкции. Можно делать вставки, разбивая блоки, но это не главное. Во всех визорах крайне кривая системная обработка, это полный анстаб. Я могу для примера пяток семплов привести с крэклаба, которые дием крутил сегодня, причём успешно, а вот ты пример приведи пином или drio :rofl:
     
  18. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Пин и Юникорн - это немного разные вещи, Пин - аналог Динаморио и Дининста (фреймворк для бинарной инструментализации), а Юникорн - фреймворк для эмуляции. Как инструменты они вполне себе применимы, но для немного других задач.
     
  19. savoyard

    savoyard Member

    Публикаций:
    0
    Регистрация:
    16 янв 2020
    Сообщения:
    42
    Инди, а может вы просто когда-то недостаточно глубоко вникли, а в настоящее время у вас предвзятый подход? :) Пользуясь случаем хочу сказать вам спасибо за то, что вы когда-то на exelab'е упомянули SDE, я заинтересовался, немного разобрался и пришел к выводу что для меня это нужная вещь. Хотя, выдает на гора "килотонны" гигабайт лог файла. С 1 мб. ехе-файла выдает 14Gb!!! лог файл. Ну, куда деваться - издержки производства. :)
     
  20. Indy_

    Indy_ Well-Known Member

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

    > может вы просто когда-то недостаточно глубоко вникли

    А во что вникать, если я его отлаживал и видел как он транслирует код. О чём вы говорите. Просто таких как ты очень много всегда толпами, которые хотят халявный мощный тулз. Не ты случайно на кл мне вопрос сегодня задал ?

    И что я ответил, где твоя проведённая работа ;)
     

    Вложения:

    • wtf.png
      wtf.png
      Размер файла:
      59,9 КБ
      Просмотров:
      339