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

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

Немного глупый вопрос, но всё же:

у меня есть указатель на здоровье Родана (трёхуровневый вплоть до зелёного), и есть инструкция, по которой происходит уменьшение здоровья.

Вопрос: Как мне сделать фильтр только на себя (союзников там нет), то есть как все 3 уровня указателя описать (или как правильно сказать хз) в скрипт, чтобы получился рабочий фильтр?

P.S. если нужно, то смогу запостить указатель и инструкцию...

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

Ну, вроде как, первые 2 смещения - это и есть структура игрока.

А зачем там делать фильтр ?

game.exe+231B0D - fld dword ptr [eax+08]

отвечает только за здоровье игрока.

На данный момент, актуально ломать только лицензию Collapse Rage. В единственной существующей сейчас пиратке, у многих трейнера закрываются. Для этой игры я пока сделал трейнер только с 4 опциями и забил до появления нормального noDVD.

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

В той функции что ты описал проскакивают хелы не только игрока. но и соперников. Я это сам проверял, по-этому и хочу фильтр сделать -> от сюда появляется ещё одна функция one hit kill.

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

1. Найти/проверить инструкцию типа А.

Предпологаемая инструкция (по вашим данным):

game.exe+231B0D - fld dword ptr [eax+08]

Поставить определение адресов на этой инструкции. Если на ней проскакивают адреса врагов значит это тип не А.

Поставить бряк на адресе здоровья врага, получить инструкции (в частности при стрельбе во врага...)

Сравнить инструкции при бряке на адресе здоровья своего героя с инструкциями при бряке на адресе врага и найти инстуркцию типа А.

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

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

На последнем уровне точно должна быть типа А.

2. После нахождения инструкции типа А, нужно её изменить инъекцией чтобы

сохранить указатель на некоторый уровень.

[[[{3ий уровень}адрес+смещение]{2ой уровень}+смещение]{1ый уровень}+смещение] // {комментарии}

Допустим "вынесли" (т.е. сохранили для фильтра) указатель с третьего уровня.

3. В инструкции работающей непосредственно со здоровьем, т.е с 1-ым уровнем нужно сделать инъекцию кода,

так чтобы 3-тий уровень был в качестве фильтра.

Фильтр например напишем так

"Если [[{3ий уровень}адрес+смещение]{2ой уровень}+смещение] = 1ый уровень, то записать здоровье своему игроку."

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

Примечение.

Для увелечения работоспособности:

- поиск адреса внедрения через проверочные байты;

- (CE на сегодняшний момент этого делать не умеет через так называемое автодизассемблирование)

идентификация смещений в уровнях цепи указателей перед автоассемблированием,

идентификация перед автоассемблированием регистров левой и правой частей инструкции по адресу внедрения, т.е. операндов источника и адресата. И конечный реультат - автоассемблирование с сгенериованным скриптом по указанным правилам: писать здоровье своему игроку и OneHitKill.

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

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

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

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

Ну так требуется one hit kill :) Делается в инструкции типа: B, C(B ). Без фильтра никак.

Хотя есть вариант при one hit kill, чтобы не писать фильтр (как я мог не предвидеть раньше). Надо найти инструкцию типа A для здоровья врагов, обращение к которой происходит при стрельбе в них. Тогда фильтра действительного писать не нужно.

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

  • 2 недели спустя...

В той функции что ты описал проскакивают хелы не только игрока. но и соперников. Я это сам проверял, по-этому и хочу фильтр сделать -> от сюда появляется ещё одна функция one hit kill.

Прошел всю игру, все норм.

Бессмертие:


[ENABLE]
alloc(_newmem,2048)
label(_returnhere)
label(_originalcode)

_newmem:
mov dword ptr [eax+08],42480000
_originalcode:
fld dword ptr [eax+08]
fcomp dword ptr [game.exe+24a2fc]
jmp _returnhere

game.exe+231B0D:
jmp _newmem
nop
nop
nop
nop
_returnhere:

[DISABLE]
game.exe+231B0D:
fld dword ptr [eax+08]
fcomp dword ptr [game.exe+24a2fc]

dealloc(_newmem)

One Hit Kill:


[ENABLE]
alloc(_newmem,2048)
alloc(_newmem2,2048)
label(_returnhere)
label(_returnhere2)
label(_originalcode)
label(_originalcode2)
label(_player)
registersymbol(_player)

_newmem:
push ecx
mov ecx,[game.exe+00287244]
mov ecx,[ecx+744]
mov ecx,[ecx+42c]
mov [_player],ecx
pop ecx
cmp [_player],eax
je _originalcode
mov dword ptr [eax+08],0
_originalcode:
fsubr dword ptr [eax+08]
fstp dword ptr [eax+08]
jmp _returnhere

_newmem2:
push ecx //у игрока нет брони, так что, фильтр на всякий пожарный
mov ecx,[game.exe+00287244]
mov ecx,[ecx+744]
mov ecx,[ecx+42c]
mov [_player],ecx
pop ecx
cmp [_player],edx
je _originalcode2
mov dword ptr [edx+04],0
_originalcode2:
fsubr dword ptr [edx+04]
xor esi,esi
jmp _returnhere2

_player:
dd 0

game.exe+458C8: //уменьшение жизней врагов и игрока
jmp _newmem
nop
_returnhere:

game.exe+1DDF7B: //уменьшение брони боссов
jmp _newmem2
_returnhere2:

[DISABLE]
game.exe+458C8:
fsubr dword ptr [eax+08]
fstp dword ptr [eax+08]

game.exe+1DDF7B:
fsubr dword ptr [edx+04]
xor esi,esi

dealloc(_newmem)
dealloc(_newmem2)

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

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

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

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

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