1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Условный брейкпоинт на строку

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

  1. M0rg0t

    M0rg0t Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    992
    Как поставить условный бряк на строку? Думал, что x64dbg его поддерживает, оказывается что нет https://github.com/x64dbg/x64dbg/issues/2067 ; в Ида не разобрался как. Есть вроде в WinDBG, но слишком сложный инструмент, впрочем если все иное не подойдет, то пойду разбираться.

    Т.е. если есть много вызовов CreateFile, а мне нужно остановится только если esp+4 = "test.txt", вот как это сделать. В теории, можно закодить дллку и перехватить апи, но хотелось бы в отладчике.
     
  2. youneuoy

    youneuoy New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2020
    Сообщения:
    8
    Мне кажется, что такие штуки удобно делать при помощи cheat engine:boast: Там можно в условном брейкпоинте строку проверить, но может будет удобнее написать скрипт, в котором сделать функцию debugger_onBreakpoint(), она будет всегда срабатывать при бряке. Ну а в ней уже можно проверять и сравнивать всё что захочется.
     
    M0rg0t нравится это.
  3. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.315
    В ольге бы условие для такого условного бряка выглядело (если ascii):
    DWORD[DWORD[esp + 04]+00]==0x74736574
    В ексодии другой язык, но по идее тоже должно быть можно. В крайнем случае можно скриптом выкрутиться.
     
    Aiks и M0rg0t нравится это.
  4. Indy_

    Indy_ Well-Known Member

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

    Строка это последовательность символов в памяти. Что бы эту последовательность обнаружить необходимо проверять указатель при каждой выборке в память. Для обычного отладчика код должен трассироваться, отладчик точнее его диз должен уметь определять выборку и адрес, далее прочитать память и сравнить с заданным условием. Это не хардверный брекпоинт, а софт событие по выборке.

    > хотелось бы в отладчике.

    Забудь ты про отладчик наконец. Эти инструменты устарели, бессмысленная трата времени на ручной разбор.
    --- Сообщение объединено, 17 сен 2020 ---
    Вот тут ссылку глянь https://wasm.in/threads/obrabotka-uderzhanija-klavishi.33857/page-2#post-421971

    Думаешь эти уязвимости вручную были найдены ?

    Нет, выборку ищет гипервизор, далее заданное условие - размер выборки ошибочен и тп, это всё находит автоматика. Отладчиком ковырять не имеет смысла.
     
  5. youneuoy

    youneuoy New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2020
    Сообщения:
    8
    очень интересно. А чем это лучше отладчика в подобных случаях?
    это как? Бряк есть бряк и в момент его срабатывания можно посмотреть что там в памяти, после чего например убрать этот самый бряк. И это вроде как не обязательно делать ручками. И вроде бряк не обязательно должен быть софтовым. Я не очень понимаю к чему ты это написал:meeting:
     
  6. Indy_

    Indy_ Well-Known Member

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

    > А чем это лучше отладчика в подобных случаях?

    Отладчик не может решить то, для чего не предназначен. Ему нужны конкретные адреса, которыъ нет, а не строки.

    > это как? Бряк есть бряк и в момент его срабатывания

    Так ведь адреса нет куда хард останов ставить. Есть лишь данные, которые должны быть найдены. Хард останов ставится на известный адрес, но в данном случае его нет - есть строка и процик не умеет её искать. Для этого необходим визор, он на каждой итерации будет выполнять выборку и сравнивать данные. Хотя в каком то самом примитивном случае при трассировке отладчиком может можно задать условие по типу if [p] eq "str" then break, но врядле это чем то поможет, не всё можно трассировать.
     
    Последнее редактирование модератором: 19 сен 2020
  7. youneuoy

    youneuoy New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2020
    Сообщения:
    8
    мне кажется, что здесь речь идёт не совсем о том, о чём пишешь ты:yes3:

    кажется в данном случае есть.

    ага, понятно. Но не понятно к чему это здесь. Чем это лучше отладчика в подобных случаях? Ты вон сам чуть дальше про трассировку написал, разве её не достаточно? На всякий случай напомню ещё раз(ты пропустил эту часть сообщения в своём ответе): это интересно.

    ну, это поможет решить такую задачу, как остановка, если esp+4 = "test.txt".
     
    Последнее редактирование модератором: 19 сен 2020
  8. Indy_

    Indy_ Well-Known Member

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

    > Ты вон сам чуть дальше про трассировку написал, разве её не достаточно?

    Тема про отладку малвари, там хард трассировка не прокатит.

    > Чем это лучше отладчика в подобных случаях?

    Сосредоточься, я выше написал.
     
    Последнее редактирование модератором: 19 сен 2020
  9. youneuoy

    youneuoy New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2020
    Сообщения:
    8
    тема про условный брейкпоинт на строку. Про малвари ничего не знаю.
     
    Последнее редактирование модератором: 19 сен 2020
  10. youneuoy

    youneuoy New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2020
    Сообщения:
    8
    тс об этом не упоминал, а просматривать все его темы для того, чтобы сформулировать ответ на вопрос из одной конкретной темы - дрочево, а дрочево это удел нуби:dash1:
    в первом сообщении темы написано, что строка известна. Т.е. прям так и написано -'есть много вызовов CreateFile, а мне нужно остановится только если esp+4 = "test.txt"'. Здесь и строка есть и даже адрес для бряка.
    ты много моих текстов видел? К чему это здесь вообще? Какой псих. анализ? Мне кажется, что к теме это имеет куда меньшее отношение, чем даже гипервизоры и ссылки на инструменты для поиска уязвимостей в гуях.
    "расскажи" "покажи" - это не вопросы.
    из того, что ты писал выше складывается иное впечатление. Или нужно смотреть все твои сообщения в целом?
    чего?
    класный ник, на русский язык можно перевести - тынеыт.
     
  11. Bedolaga

    Bedolaga Member

    Публикаций:
    0
    Регистрация:
    10 июл 2019
    Сообщения:
    139
    А если в HEX сравнивать, разве не прокатит?
     
  12. ormoulu

    ormoulu Active Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    583
    https://sites.google.com/site/taesaza0/etc/windbgcheatsheet

    LoadLibraryExW( MYDLL ) called? -> Break only if LoadLibrary is called for MyDLL


    Код (Text):
    1. bu kernel32!LoadLibraryExW ";as /mu ${/v:MyAlias} poi(@esp+4); .if ( $spat( \"${MyAlias}\", \"*MYDLL*\" ) != 0 ) { kn; } .else { g }"
    The first parameter to LoadLibrary (at address ESP + 4) is a string pointer to the DLL name in question.
    The MASM $spat operator will compare this pointer to a predefined string-wildcard, this is *MYDLL* in our example.
    Unfortunately $spat can accept aliases or constants, but no memory pointers. This is why we store our string in question to an alias (MyAlias) first.
    Our kernel32!LoadLibraryExW breakpoint will hit only if the pattern compared by $spat matches. Otherwise the application will continue executing.
     
  13. Indy_

    Indy_ Well-Known Member

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

    > The first parameter to LoadLibrary (at address ESP + 4) is a string pointer to the DLL name in question.

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