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

[Трудно быть Богом] Поиск инструкции для OHK


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

Здравствуйте, столкнулся со следующей проблемой: нашел в игре инструкцию, которая одинаковая и для врагов, и для игрока. Инструкция постоянно обращается к значению хп врагов рядом и игрока соответственно, а также значение стамины. Удалось найти оффсет в регистре, который отделяет врагов от игрока, был сделан скрипт (на изображении слева), но при попытке загрузки игры или смене локации - игрок сразу же умирает. второй вариант скрипта (на изображении справа) убивает всех врагов поблизости и заодно ставит 1 хп и стамины самому игроку.
Довелось так же изучить один старый трейнер от известных BReWErS, там это реализовано так: есть два хоткея, один для "активации системы хп", как указано в описании, другой устанавливает выделенному врагу хп 0, чем мгновенно его убивает - что, в принципе, тоже неплохой способ реализации.

В общем, вопрос - как можно еще реализовать OHK, если значения в инструкции постоянно обновляются? Поиск через Break and Trace особо ничего не дал, потому что высвечивается целая куча инструкций как только снимаешь игру с паузы.

Изображение:

Спойлер

spacer.png

 

 

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

У меня получилось только с 2 ударов. В макс. ХП прописал единичку.

Спойлер
[ENABLE]
aobscanmodule(THK,TBB.dll,8B ? ? ? ? ? 85 ? 0F ? ? 8D ? ? 52 E8 ? ? ? ? 85)
alloc(newmem,$1000)
label(return)
registersymbol(THK)

newmem:
  mov eax,[esi+000000D4]  //Указатель на структуру
  cmp [esi+000000F4],00   //Свой чужой 00=чужой
  jne short @F            //Если не 0 то прыжок
  mov [eax+18],#1         //Запись Макс ХП=1 
@@:
  jmp return

THK:
  jmp newmem
  nop
return:

[DISABLE]
THK:
db 8B 86 D4 00 00 00
unregistersymbol(THK)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: TBB.dll+205EC2
TBB.dll+205E9C: EB 04              - jmp TBB.dll+205EA2
TBB.dll+205E9E: 8B 6C 87 7C        - mov ebp,[edi+eax*4+7C]
TBB.dll+205EA2: 8B 86 F8 00 00 00  - mov eax,[esi+000000F8]
TBB.dll+205EA8: 85 C0              - test eax,eax
TBB.dll+205EAA: 0F 84 B1 00 00 00  - je TBB.dll+205F61
TBB.dll+205EB0: 84 9F FC 02 00 00  - test [edi+000002FC],bl
TBB.dll+205EB6: 74 04              - je TBB.dll+205EBC
TBB.dll+205EB8: 33 C9              - xor ecx,ecx
TBB.dll+205EBA: EB 06              - jmp TBB.dll+205EC2
TBB.dll+205EBC: 8B 8F BC 00 00 00  - mov ecx,[edi+000000BC]
// ---------- INJECTING HERE ----------
TBB.dll+205EC2: 8B 86 D4 00 00 00  - mov eax,[esi+000000D4]
// ---------- DONE INJECTING  ----------
TBB.dll+205EC8: 85 C9              - test ecx,ecx
TBB.dll+205ECA: 0F 95 C2           - setne dl
TBB.dll+205ECD: 8D 48 38           - lea ecx,[eax+38]
TBB.dll+205ED0: 52                 - push edx
TBB.dll+205ED1: E8 CA A9 F8 FF     - call TBB.dll+1908A0
TBB.dll+205ED6: 85 C0              - test eax,eax
TBB.dll+205ED8: 0F 8E 83 00 00 00  - jng TBB.dll+205F61
TBB.dll+205EDE: 85 ED              - test ebp,ebp
TBB.dll+205EE0: 74 74              - je TBB.dll+205F56
TBB.dll+205EE2: 8A 86 C3 00 00 00  - mov al,[esi+000000C3]
}

 

 

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

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

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

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