Как поставить условный бряк на строку? Думал, что x64dbg его поддерживает, оказывается что нет https://github.com/x64dbg/x64dbg/issues/2067 ; в Ида не разобрался как. Есть вроде в WinDBG, но слишком сложный инструмент, впрочем если все иное не подойдет, то пойду разбираться. Т.е. если есть много вызовов CreateFile, а мне нужно остановится только если esp+4 = "test.txt", вот как это сделать. В теории, можно закодить дллку и перехватить апи, но хотелось бы в отладчике.
Мне кажется, что такие штуки удобно делать при помощи cheat engine Там можно в условном брейкпоинте строку проверить, но может будет удобнее написать скрипт, в котором сделать функцию debugger_onBreakpoint(), она будет всегда срабатывать при бряке. Ну а в ней уже можно проверять и сравнивать всё что захочется.
В ольге бы условие для такого условного бряка выглядело (если ascii): DWORD[DWORD[esp + 04]+00]==0x74736574 В ексодии другой язык, но по идее тоже должно быть можно. В крайнем случае можно скриптом выкрутиться.
M0rg0t, Строка это последовательность символов в памяти. Что бы эту последовательность обнаружить необходимо проверять указатель при каждой выборке в память. Для обычного отладчика код должен трассироваться, отладчик точнее его диз должен уметь определять выборку и адрес, далее прочитать память и сравнить с заданным условием. Это не хардверный брекпоинт, а софт событие по выборке. > хотелось бы в отладчике. Забудь ты про отладчик наконец. Эти инструменты устарели, бессмысленная трата времени на ручной разбор. --- Сообщение объединено, 17 сен 2020 --- Вот тут ссылку глянь https://wasm.in/threads/obrabotka-uderzhanija-klavishi.33857/page-2#post-421971 Думаешь эти уязвимости вручную были найдены ? Нет, выборку ищет гипервизор, далее заданное условие - размер выборки ошибочен и тп, это всё находит автоматика. Отладчиком ковырять не имеет смысла.
очень интересно. А чем это лучше отладчика в подобных случаях? это как? Бряк есть бряк и в момент его срабатывания можно посмотреть что там в памяти, после чего например убрать этот самый бряк. И это вроде как не обязательно делать ручками. И вроде бряк не обязательно должен быть софтовым. Я не очень понимаю к чему ты это написал
youneuoy, > А чем это лучше отладчика в подобных случаях? Отладчик не может решить то, для чего не предназначен. Ему нужны конкретные адреса, которыъ нет, а не строки. > это как? Бряк есть бряк и в момент его срабатывания Так ведь адреса нет куда хард останов ставить. Есть лишь данные, которые должны быть найдены. Хард останов ставится на известный адрес, но в данном случае его нет - есть строка и процик не умеет её искать. Для этого необходим визор, он на каждой итерации будет выполнять выборку и сравнивать данные. Хотя в каком то самом примитивном случае при трассировке отладчиком может можно задать условие по типу if [p] eq "str" then break, но врядле это чем то поможет, не всё можно трассировать.
мне кажется, что здесь речь идёт не совсем о том, о чём пишешь ты кажется в данном случае есть. ага, понятно. Но не понятно к чему это здесь. Чем это лучше отладчика в подобных случаях? Ты вон сам чуть дальше про трассировку написал, разве её не достаточно? На всякий случай напомню ещё раз(ты пропустил эту часть сообщения в своём ответе): это интересно. ну, это поможет решить такую задачу, как остановка, если esp+4 = "test.txt".
youneuoy, > Ты вон сам чуть дальше про трассировку написал, разве её не достаточно? Тема про отладку малвари, там хард трассировка не прокатит. > Чем это лучше отладчика в подобных случаях? Сосредоточься, я выше написал.
тс об этом не упоминал, а просматривать все его темы для того, чтобы сформулировать ответ на вопрос из одной конкретной темы - дрочево, а дрочево это удел нуби в первом сообщении темы написано, что строка известна. Т.е. прям так и написано -'есть много вызовов CreateFile, а мне нужно остановится только если esp+4 = "test.txt"'. Здесь и строка есть и даже адрес для бряка. ты много моих текстов видел? К чему это здесь вообще? Какой псих. анализ? Мне кажется, что к теме это имеет куда меньшее отношение, чем даже гипервизоры и ссылки на инструменты для поиска уязвимостей в гуях. "расскажи" "покажи" - это не вопросы. из того, что ты писал выше складывается иное впечатление. Или нужно смотреть все твои сообщения в целом? чего? класный ник, на русский язык можно перевести - тынеыт.
https://sites.google.com/site/taesaza0/etc/windbgcheatsheet LoadLibraryExW( MYDLL ) called? -> Break only if LoadLibrary is called for MyDLL Код (Text): 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.
ormoulu, > The first parameter to LoadLibrary (at address ESP + 4) is a string pointer to the DLL name in question. Если в подробности технические лезть, то есть мощный загрузочный логгер, который в лог выводит абсолютно всё, каждое действие. Но это не суть вопроса, строку аппаратно найти невозможно. Не зная целевой адрес, задача не решаема отладочными средствами.