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

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

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

Вот это вам поможет: (он работает исправно, для пистолета хотя не всегда)

NoReload



[ENABLE]
alloc(newmem,200)
label(returnhere)
label(step)

alloc(newmem2,200)
label(returnhere2)
label(step2)

aobscan(NoReloadAOB,0f b6 85 6b ef ff ff 85 c0)
registersymbol(NoReloadAOB)

newmem:
movzx eax,byte ptr [ebp-00001095]
test eax,eax
je step
mov eax,[edi+0000023C]
//dec eax
mov [edi+0000023C],eax
step:
mov eax,[edi+00000370]
//dec eax
mov [edi+00000370],eax
jmp NoReloadAOB+25
jmp returnhere

newmem2:
movzx eax,byte ptr [ebp-00001095]
test eax,eax
je step2
mov eax,[edi+0000023C]
//dec eax
mov [edi+0000023C],eax
step2:
mov eax,[edi+00000370]
//dec eax
mov [edi+00000370],eax
jmp NoReloadAOB+13b5
jmp returnhere2


NoReloadAOB:
jmp newmem
nop
nop
returnhere:

NoReloadAOB+1390:
jmp newmem2
nop
nop
returnhere2:

[DISABLE]
dealloc(newmem)
dealloc(newmem2)
NoReloadAOB:
movzx eax,byte ptr [ebp-00001095]
NoReloadAOB+1390:
movzx eax,byte ptr [ebp-00001095]
//Alt: db 0F B6 85 6B EF FF FF
unregistersymbol(NoReloadAOB)


Как видно в сикрипте инжекты повешены с поиском смещения по программному коду +25/+25+1390

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

В общем алгоритм таков. Если инжектить 2жды продублированный код поочереди(из разных скриптов поледовательной активацией) то все работает, как засунуть, например, цикл перебора всех побайтовых совпадений в зарезервированной памяти приложения с присвоением порядкого номера.... ну как например совпадение инструкций при "поиске инструкции" в меморивью идентичных много, а аобскан при дублировании регистрации по аналогичной маске творит непойми что...

HELP так как по данной игре такого много....


И как понимаете после обновления заново шарить смещения не из прияных...
Ссылка на комментарий
Поделиться на другие сайты

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

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

Тему DEL пожалуйста.

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

Сначала мой пример для данного случая (по идее должен работать).

Фишка с использованием call и возвращение по ret. Прыги очевидно работают быстрее, но ты же не программу драйвера инжектишь :)


aobscan(NoReloadAOB,0f b6 85 6b ef ff ff 85 c0)
registersymbol(NoReloadAOB)
alloc(newmem, 2048) // если я не путаю страница памяти на 32 виндах выравнивается до 2КБ, не меньше
label(newmem2)// память можно не выделять второй раз

newmem:
movzx eax,byte ptr [ebp-00001095]
test eax,eax
je step
mov eax,[edi+0000023C]
mov [edi+00000370],eax
ret //возврат из call

step:
mov eax,[edi+00000370]
mov [edi+00000370],eax
ret// возврат из call

NoReloadAOB:
call newmem
nop
nop

NoReloadAOB+1390:
call newmem
nop
nop

[DISABLE]
NoReloadAOB:
movzx eax,byte ptr [ebp-00001095]
NoReloadAOB+1390:
movzx eax,byte ptr [ebp-00001095]
//Alt: db 0F B6 85 6B EF FF FF
unregistersymbol(NoReloadAOB)
dealloc(newmem)
[ENABLE]

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


[ENABLE]
aobscan(NoReloadAOB,0f b6 85 6b ef ff ff 85 c0)
registersymbol(NoReloadAOB)

label(NoReloadAOB2)
registersymbol(NoReloadAOB2)

alloc(newmem, 2048) // если я не путаю страница памяти на 32 виндах выравнивается до 2КБ, не меньше

//... вырезано

NoReloadAOB:
jmp newmem
nop
nop
returnhere:

NoReloadAOB+1390:
NoReloadAOB2: // NoReloadAOB2 должна быть зарегистрирована именно в этом месте
jmp newmem2
nop
nop
returnhere2:
[DISABLE]
//вырезано

Если задача в том чтобы не рассчитывать смещения от одной сигнатуры, то можно попробовать определить одинаковую сигнатуру. Через CE Lua Engine получить все результаты поиска сигнатуры и сделать автоматические описания инъекции и отмены инъекции АА-кода через Lua скрипт...

Если одинаковая сигнатура не получается, то искать уникальные сигнатуры и для каждой писать aobscan в АА скрипте...

Вопрос решен?

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

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

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

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