Перейти к содержанию

как задать условие на трассеровку?


Alex2411

Рекомендуемые сообщения

давно хотел спросить.
если инструкция обращается к адресу не один раз , то как в чит енжин задать условие срабатывание трассеровки на не первое срабатывание ? как указать количество срабатываний , которое нужно пропустить ?

Ссылка на комментарий
Поделиться на другие сайты

13 минут назад, Alex2411 сказал:

как указать количество срабатываний , которое нужно пропустить ?

Вроде бы у CE не счетчика остановок, поэтому придется делать свой с помощью скрипта.

 

cmp [debugCounter],#99
jne doSomething
...
inc [debugCounter]
jmp original_code

doSomething:
...
inc [debugCounter]
jmp original_code

 

Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, Alex2411 сказал:

если инструкция обращается к адресу не один раз , то как в чит енжин задать условие срабатывание трассеровки на не первое срабатывание

допустим у тебя инструкция типа mov eax,[ebx+4] и эта инструкция работает с большим количеством адресов.
1. Паузим процесс игры (не игровую паузу - именно процесс) У меня назначена ГК (в настройках СЕ).

2. "Прерваться и трассировать инструкции.

3. Редактор памяти/Просмотр/Список брейкпоинтов

4. Задать/изменить условие

5. Простое условие EBX==0x00000000 (ebx должен соответствовать твоему адресу)
6. Снимаем паузу процесса
7. Профит.

Ссылка на комментарий
Поделиться на другие сайты

2. Вариант
Отфильтровываешь свой адрес, пишешь скрипт, активируешь, переходишь в свою инъекцию и уже там делаешь трассировку.
3. Вариант как написал @partoftheworlD, если точно знаешь какое срабатывание инструкции на твоем адресе. 

Ссылка на комментарий
Поделиться на другие сайты

32 минуты назад, partoftheworlD сказал:

Вроде бы у CE не счетчика остановок, поэтому придется делать свой с помощью скрипта

 

примерно так я и делал , но тут много проблем . очень муторно каждый раз писать скрипт на разные иструкции . инструкция часто срабатывает на кучу других адресов и не понятно на каком количестве срабатываний надо остановиться . этот способ не подходит для трассера на данных .
при создании трасера есть окошко условия start condition . там lua-формат . может там как то прикрутить счетчик? я в луа полный ноль.

 

17 минут назад, Garik66 сказал:

переходишь в свою инъекцию и уже там делаешь трассировку

 

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

Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, Alex2411 сказал:

пропустил два обращения инструкции и на третий раз потом сработал. как это сделать ?

Счетчик, ну это же просто. я ещё в самом начале карьеры взломщика написал скрипт на каждое второе срабатывание инструкции.
Fallout 3. Сейчас попробую найти

Ссылка на комментарий
Поделиться на другие сайты

Не не найду (там и ссылки поехавшие и спойлеры - при переезде форума с движка на движок).
Ну тебе @partoftheworlD уже дал вариант написания скрипта.

Ссылка на комментарий
Поделиться на другие сайты

41 минуту назад, Garik66 сказал:

скрипт на каждое второе срабатывание инструкции

 

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

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Alex2411 сказал:

чтобы писать огромный скрипт на один раз

Включи голову - тебе не нужно писать огромный скрипт.

У тебя два условия - счетчик и много адресов.

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

Ссылка на комментарий
Поделиться на другие сайты

14 часов назад, Alex2411 сказал:

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

 

Запустить игру в оконном режиме

Поставить брейкпоинт, задать ему условие прерывания.

Прерваться на брейкпоинте по F9: "раз", "два", "Три". Снять брейкпоинт по F5. Выделить следующую инструкцию, которая еще не выполнилась. Поставить трейссер и отпустить по F9. Все

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, MasterGH сказал:

Прерваться на брейкпоинте по F9: "раз", "два", "Три".

 

получилось ! спасибо мастер , так гораздо проще, чем каждый раз скрипт писать . жаль, что просто условие по счетчику в старт кондишн трассера не указать , но и такой способ годится .

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, Alex2411 сказал:

жаль, что просто условие по счетчику в старт кондишн трассера не указать

 

Если очень хочется, то можно

 

Спойлер

-- Адрес инструкции
local addressInstruction = ('Tutorial-x86_64.exe+2B4C9 - 81 BB 90070000 E8030000 - cmp [rbx+00000790],000003E8 { 1000 }'):match('(%S+)')
-- Счетчик прерываний
local countBreak = 0

function onBreakpoint()
  -- Любое другое условие
  --if RBX == 0x10F2540 then
   countBreak = countBreak + 1
   continueMethod = co_run
  -- return co_run
  --end

  if countBreak >= 3 then
    debug_removeBreakpoint(addressInstruction)

    -- Показать окно
    getMemoryViewForm().Show()
    -- Получить следующий адрес
    local nextInstruction = getAddress(addressInstruction..'+'..getInstructionSize(addressInstruction))
    getDefaultDisassembler().SelectedAddress = nextInstruction
    -- Вызывать трейслог
    getMemoryViewForm().debuggerpopup.Items[13].doClick()
  end

  return co_run
end

debug_setBreakpoint(addressInstruction, onBreakpoint)

 

 

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, MasterGH сказал:

Если очень хочется, то можно

 

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

Ссылка на комментарий
Поделиться на другие сайты

ЗЫ: При просмотре видео. обнаружил ошибку - нужно условие ecx = адресу ставить перед inc [flag] в инъекции, а не в списке бряков.

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Garik66 сказал:

не огромный - посмотри

 

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

 

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

Ссылка на комментарий
Поделиться на другие сайты

В 08.09.2019 в 12:42, Garik66 сказал:

При просмотре видео. обнаружил ошибку - нужно условие ecx = адресу ставить перед inc [flag] в инъекции, а не в списке бряков.

 

нужно это условие ставить там и там . или поставить это условие перед inc [flag] и перед инструкцией с которой снимать трассер . если ты поставишь условие только перед inc [flag] вместо бряка, то счетчик посчитает нужные адреса , но трассер сработает на первом любом адресе после 1000 ,  а не на нужном .

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Alex2411 сказал:

поставить это условие перед inc [flag] и перед инструкцией с которой снимать трассер.

Не ясно. Раз, два, три самый простой. Хотя я до сих пор не понимаю зачем это всё) 

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Alex2411 сказал:

 

нужно это условие ставить там и там . или поставить это условие перед inc [flag] и перед инструкцией с которой снимать трассер . если ты поставишь условие только перед inc [flag] вместо бряка, то счетчик посчитает нужные адреса , но трассер сработает на первом любом адресе после 1000 ,  а не на нужном .

Думаю можно и там и там поставить.
Но перед inc обязательно нужно, я же вывел его отдельно, а плюсовать будет не только на наш адрес, но и на другие, поэтому нужно это условие в скрипте.
На бряке можно не ставить, трассировка (если смотрел видео) пройдет только при достижении flag = 1000 (или сколько ты поставишь.)

 

А флаг будет равен 1000, только на нашем адресе, если поставишь туда условие.

Ссылка на комментарий
Поделиться на другие сайты

21 минуту назад, Garik66 сказал:

На бряке можно не ставить, трассировка (если смотрел видео) пройдет только при достижении flag = 1000 (или сколько ты поставишь.)

А флаг будет равен 1000, только на нашем адресе, если поставишь туда условие.

 

на бряке или в скрипте на инструкции трассера условие по адресу тоже нужно ставить обязятельно . когда у тебя флаг будет = 1000 , то трассер сработает , но условия адреса у тебя только на счетчик, а на трассер у тебя условия адреса нет . поэтому после флаг = 1000 трассер не будет ждать нужный адрес , а сработает сразу же на первом срабатывании инструкции , а это может быть другой адрес. нужно что бы и счетчик считал только нужные адреса и трассер срабатывал только на нужные адреса .

Ссылка на комментарий
Поделиться на другие сайты

32 минуты назад, Alex2411 сказал:

трассер срабатывал только на нужные адреса .

Да.. понял, что имеешь ввиду.
Из усталости и что поздно приезжаю, некогда подумать. 

Жаль, что не сохранил я скрипт, сейчас бы поправил.


Да.... условие по адресу ставим только перед проверкой флага вверху (чтобы два раза его не ставить) - если не равно адресу. то прыгаем сразу на code, если равно то проверяем значение флага, если не равно 1000, прыгаем на @@ и увеличиваем.
Вроде так. Нужно скрипт, чтобы читать. 

Ссылка на комментарий
Поделиться на другие сайты

Как вариант, не заниматься ерундой, а использовать специально заточенные для отладки инструменты. Например, в x64dbg этот счетчик остановок вынесет в отдельную переменную ($breakpointcounter) для доступа к ней, или Windbg. CE не подойдет для чего-то серьезного как ни крути.

Ссылка на комментарий
Поделиться на другие сайты

47 минут назад, Garik66 сказал:

условие по адресу ставим только перед проверкой флага вверху (чтобы два раза его не ставить)

 

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

 

28 минут назад, partoftheworlD сказал:

использовать специально заточенные для отладки инструменты. Например, в x64dbg

 

я не программер .вот  если бы на эту прогу были видеоуроки как на чит енжин или хотя бы понятные туториалы . я не раз пробовал разобраться с x64dbg , но без подсказок трудно . многое мне не понятно . с чит енжин привычнее . и еще не понятно , что может делать x64dbg что не умеет чит енжин .

Ссылка на комментарий
Поделиться на другие сайты

 

12 часов назад, Alex2411 сказал:

если бы на эту прогу были видеоуроки

 

Есть видео уроки, а так же книги , а так же документация, так что информации полно. Например, OALabs. Уроки и книги по крутым инструментам для отладки обычно у малварщиков, а как применить их, это уже дело фантазии, в случае чего, существует туева хуча уроков по ollydbg в том числе и на русском, если знаешь olly, то проблем с использованием x64dbg не будет. Интерфейс у них похожий, плюс есть поддержка различных языков, так что даже методом "тыка" можно разобраться за минут 30. CE представляет из себя комбаин из всего что только есть, но вот реализация не самая удачная и тут встает единственный вопрос, готов ли ты тратить на какое-то дело некое количество времени, чтобы написать костыли в CE, когда существует готовое решение, делающее то, что тебе нужно в один клик.

 

 

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.