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

как исключить не действительные адреса из фильтра ?


Alex2411

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

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

сразу краш

Попробуй такой скрипт:

Спойлер

[ENABLE]
{$LUA}
timer = createTimer(true)
timer:setInterval(5)
timer.OnTimer = function()
  Value = readInteger('TestP')
  Value1 = readInteger('Value')
  if Value1 ~= nil then
    writeInteger('Flag',1)
  else
    writeInteger('Flag',0)
  end
end

{$ASM}
alloc(newMem, 2048)
label(return)
label(code)
label(TestP)
registersymbol(TestP)
label(Flag)
registersymbol(Flag)

newMem:
  mov ecx,[ebx+08]
  mov [TestP],ecx
  cmp [Flag],0
  je code
  cmp [ecx+10],74726964
  jne code
// здесь то, что хотим

code:
  mov ecx,[ebx]
  mov eax,[ebp+14]
  jmp return

TestP:
  dd 0
Flag:
  dd 0

Omerta.exe+12F749:
  jmp newMem
return:

[DISABLE]
{$LUA}
timer:setEnabled(false)

{$ASM}
Omerta.exe+12F749:
  db 8B 0B 8B 45 14

unregistersymbol(Flag)
unregistersymbol(TestP)
dealloc(newMem)

 

Отпишись, жду результата.

ЗЫ: Стоп!!!!

в LUA части не правильно с флагом работаю, нужно не его приравнивать, а в него записывать.

ЗЫ1: Поправил.

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

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

Отпишись, жду результата.

 

попробовал  оба скрипта  первый  и после исправления. крашей  нет , но  дальше  этого сравнения

je code

не  проходит . бряк на

cmp [ecx+10],74726964

не дает  не одного адреса

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

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

не дает  не одного адреса

Еще одна ошибка в скрипте.

Секунду поправлю.

 

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

не  проходит . бряк на

Поправил, ошибка была здесь 

Value = readInteger('TestP')

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

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

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

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

 

теперь  снова  вылеиает . как раньше   на  маленьких адресах 00000100 и  каких то  больших если отсеить маленькие  адреса

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

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

 

теперь  снова  вылеиает . как раньше   на  маленьких адресах 00000100 и  каких то  больших если отсеить маленькие  адреса

Понял.

Я ничего не поменял. СЕК

 

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

 

теперь  снова  вылеиает . как раньше   на  маленьких адресах 00000100 и  каких то  больших если отсеить маленькие  адреса

ЗЫ поправил,

Ошибка была в том что в Value у нас значение а не прочитанный адрес.

Теперь должен отработать нормально

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

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

поправил,

Ошибка была в том что в Value у нас значение а не прочитанный адрес.

Теперь должен отработать нормально

 

вылетает . на  00000010  и на больших значениях .

 

слушай извини  может я глупость  спрошу , а флаг надо  сравнивать

  cmp [Flag],0
  je code

или может  быть

  cmp [Flag],0
  jne code

?

 

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

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

  спрошу

нужно

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

je code

все правильно.

Ладно я пока сдаюсь. Жаль проверить не могу.

 

Мне завтра в пять.

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

20 часов назад, Garik66 сказал:

все правильно.

 

 

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

mov [TestP],ecx

потом  получаешь  Value

Value = readInteger('TestP')

потом  проверяешь  число  по адерсу Value

Value1 = readInteger('Value')

потом  ставишь флаг в 1  когда по адресу  не число

if Value1 ~= nil then
    writeInteger('Flag',1)

потом срвнивашь флаг

cmp [Flag],0
  je code

получаеться  что когда  флаг 1  то прыжка  нет .  тогда скрипт после флага 1  переходит дальше  к

cmp [ecx+10],74726964

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

 

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

В 04.04.2019 в 19:44, Alex2411 сказал:

значит  я не правильо  понимаю

Нужно именно 

 

В 04.04.2019 в 19:44, Alex2411 сказал:

writeInteger('Flag',1)

и

В 04.04.2019 в 19:44, Alex2411 сказал:

cmp [Flag],0  je code

Я поправил скрипт - посмотри здесь

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

В 03.04.2019 в 18:31, Alex2411 сказал:

вот  пример скрипт  из игры  Omerta - City of Gangsters

Вот пока скрипт (но обычным моим методом - обычно нужно 3 фильтра):

"Infinite Money 666 $"

Спойлер

{ Game   : Omerta.exe
  Version: 
  Date   : 2019-04-08
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(Money,Omerta.exe,8B 0B 8B 45 14) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
registersymbol(Money)

newmem:
  mov ecx,[ebx+10]
  lea eax,[ebx+78]
  cmp ecx,eax
  jne code
  cmp [ebx+04],3
  jne code
  cmp [ebx+40],5
  jne code
  mov [ebx],#666

code:
  mov ecx,[ebx]
  mov eax,[ebp+14]
  jmp return

Money:
  jmp newmem
return:

[DISABLE]
Money:
  db 8B 0B 8B 45 14

unregistersymbol(Money)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "Omerta.exe"+12F749

"Omerta.exe"+12F726: 8B B1 A0 00 00 00     -  mov esi,[ecx+000000A0]
"Omerta.exe"+12F72C: E8 8F 23 00 00        -  call Omerta.exe+131AC0
"Omerta.exe"+12F731: 83 78 04 00           -  cmp dword ptr [eax+04],00
"Omerta.exe"+12F735: 75 08                 -  jne Omerta.exe+12F73F
"Omerta.exe"+12F737: 80 4A 06 01           -  or byte ptr [edx+06],01
"Omerta.exe"+12F73B: 33 FF                 -  xor edi,edi
"Omerta.exe"+12F73D: EB 02                 -  jmp Omerta.exe+12F741
"Omerta.exe"+12F73F: 8B F8                 -  mov edi,eax
"Omerta.exe"+12F741: 85 FF                 -  test edi,edi
"Omerta.exe"+12F743: 0F 85 91 00 00 00     -  jne Omerta.exe+12F7DA
// ---------- INJECTING HERE ----------
"Omerta.exe"+12F749: 8B 0B                 -  mov ecx,[ebx]
"Omerta.exe"+12F74B: 8B 45 14              -  mov eax,[ebp+14]
// ---------- DONE INJECTING  ----------
"Omerta.exe"+12F74E: 5F                    -  pop edi
"Omerta.exe"+12F74F: 89 08                 -  mov [eax],ecx
"Omerta.exe"+12F751: 8B 53 04              -  mov edx,[ebx+04]
"Omerta.exe"+12F754: 5E                    -  pop esi
"Omerta.exe"+12F755: 89 50 04              -  mov [eax+04],edx
"Omerta.exe"+12F758: 5B                    -  pop ebx
"Omerta.exe"+12F759: 8B E5                 -  mov esp,ebp
"Omerta.exe"+12F75B: 5D                    -  pop ebp
"Omerta.exe"+12F75C: C3                    -  ret 
"Omerta.exe"+12F75D: 8B C8                 -  mov ecx,eax
}

 

Потесть - отпишись о результатах.

А я пока посмотрю все-таки как сделать фильтр через указатели.

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

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

Какие?

У меня просто их нет.

 

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

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

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

 

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

у меня черт ничего не вылезает. А жаль. Подобрал бы лучший фильтр.

Хотя подожди, а посмотри теперь у этих адресов по смещению  +08 у всех указатели?

Если так, то можно будет добавить тот текстовый фильтр

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

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

у меня черт ничего не вылезает. А жаль.

 

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

 

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

посмотри теперь у этих адресов по смещению  +08 у всех указатели?

 

не у всех . есть 0000000с и другие .  а укоторых указатели  то не на деньги , а что то другое

 

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

 

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

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

самая  главная проблема  что иногда  фильтр  не понятно

А это текстовой фильтр .....money, ты уверен у других адресов не появиться? Например у конкуретных босов 

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

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

А это текстовой фильтр .....money, ты уверен у других адресов не появиться? Например у конкуретных босов 

 

 

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

  cmp [ebx+04],3
  jne code
  cmp [ebx+40],5
  jne code

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

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

В 02.04.2019 в 19:05, MasterGH сказал:

Вот так ставим

 

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

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

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

условный бряк

 

я понимаю . как  сделать ? что надо  в условие  написать ?

 

пысы . это я  продолжаю копать  омерту

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

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

не  кто не  может  ответить и  объснить ?  ((

И для кого я снимаю видео?

Вот в этом видео я рассказываю про условный бряк :

Спойлер

 

 

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

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

И для кого я снимаю видео?

Вот в этом видео я рассказываю про условный бряк :

 

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

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

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

Здесь задаются условия срабатывания брейкпоинта (нажать Ctrl + B). Нужно заранее знать EIP или RIP адреса инструкций, которые нужно исключить.

Спойлер

image.png

 

 

 

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

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

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

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