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

[HELP] The Settlers 3 - History Edition v2.0


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

Всем привет. Решил поиграть в поселенцев, но чита на эту версию игры не нашел. Есть табличка у зарубежных геймхакеров на версию игры 2.1, но она не работает на 2.0. Тогда решил попробовать взломать сам. Сразу оговорюсь, что я новичок в этом ремесле, поэтому многого не знаю. Моя задача была единственной - бессмертие для моих солдат. Нашел значение здоровья своих бойцов (не без труда) и оно было в byte. Нашел инструкции на доступ и запись.
spacer.png
Первая из них на запись, она же и еще две другие на доступ. Все они работают с адресами и врагов тоже. Когда нопишь первую, то бессмертными становятся все. Когда нопишь остальные две, то ничего не происходит, либо и враги, и мои солдаты убивают друг друга с одного удара. Что касается четвертой mov eax,ecx, то когда ее нопишь, то мои солдаты убивают вражеских с одного удара, а враги наносят обычный дамаг. Сам не знаю как это получилось. По крайней мере с OHK прошел все сюжетные кампании. Но моих солдат все равно убивали и мне все таки захотелось бессмертия, чтобы пройти остальные дополнительные сценарии в этой игре. К сожалению, ума не хватило написать скрипт. Во первых, не смог найти адреса для фильтра свой чужой. А те которые находил, все же менялись по ходу игры. Во вторых, не знаю как написать скрипт с регистром CL. На данный момент я сделал два скрипта которые включаются одновременно - OHK и HP (где оригинальный код в обоих случаях просто закомментирован). Тогда и здоровье не убавляется и благодаря OHK враги все же убиваются, не смотря на бессмертие и у них. Нужна помощь в написании скрипта хотя бы на бессмертие в грамотном виде. Мои скрипты работают, но сам понимаю, что это халтура. Вот и хотелось бы посмотреть пример правильного написания скрипта с пояснениями.
spacer.png
Как видно на скрине это то, что находится рядом с sub [edi+00525e73],cl (HP1). Тут же и movzx eax,byte ptr [edi+00525e73] (HP2) которая тоже получает доступ к адресу во время получения и нанесения урона.

spacer.png
Здесь третья инструкция, которая тоже получает доступ к тому же адресу здоровья моего солдата.
 

Спойлер

Скрипт на HP

[ENABLE]
aobscanmodule(HP,Siedler3R.exe,28 8F 73 5E 52 00) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

 

newmem:
 

code:
  //sub [edi+00525E73],cl
  jmp return

 

HP:
  jmp newmem
  nop

return:
registersymbol(HP)

 

[DISABLE]

HP:
  db 28 8F 73 5E 52 00

unregistersymbol(HP)
dealloc(newmem)

{


// ORIGINAL CODE - INJECTION POINT: Siedler3R.exe+13DD75

Siedler3R.exe+13DD51: 69 C0 48 01 00 00        - imul eax,eax,00000148
Siedler3R.exe+13DD57: 83 BC 30 EC 43 41 00 02  - cmp dword ptr [eax+esi+004143EC],02
Siedler3R.exe+13DD5F: 75 09                    - jne Siedler3R.exe+13DD6A
Siedler3R.exe+13DD61: 8B C1                    - mov eax,ecx
Siedler3R.exe+13DD63: D1 E8                    - shr eax,1
Siedler3R.exe+13DD65: 01 C1                    - add ecx,eax
Siedler3R.exe+13DD67: 89 4D F8                 - mov [ebp-08],ecx
Siedler3R.exe+13DD6A: 0F B6 87 73 5E 52 00     - movzx eax,byte ptr [edi+00525E73]
Siedler3R.exe+13DD71: 3B C1                    - cmp eax,ecx
Siedler3R.exe+13DD73: 72 0B                    - jb Siedler3R.exe+13DD80
// ---------- INJECTING HERE ----------
Siedler3R.exe+13DD75: 28 8F 73 5E 52 00        - sub [edi+00525E73],cl
// ---------- DONE INJECTING  ----------
Siedler3R.exe+13DD7B: E9 DE 0A 00 00           - jmp Siedler3R.exe+13E85E
Siedler3R.exe+13DD80: 0F B7 87 7E 5E 52 00     - movzx eax,word ptr [edi+00525E7E]
Siedler3R.exe+13DD87: B9 AD 00 00 00           - mov ecx,000000AD
Siedler3R.exe+13DD8C: 66 3B C1                 - cmp ax,cx
Siedler3R.exe+13DD8F: 0F 84 A4 04 00 00        - je Siedler3R.exe+13E239
Siedler3R.exe+13DD95: B9 AE 00 00 00           - mov ecx,000000AE
Siedler3R.exe+13DD9A: 66 3B C1                 - cmp ax,cx
Siedler3R.exe+13DD9D: 0F 84 96 04 00 00        - je Siedler3R.exe+13E239
Siedler3R.exe+13DDA3: 83 F8 03                 - cmp eax,03
Siedler3R.exe+13DDA6: 74 05                    - je Siedler3R.exe+13DDAD
}

Спойлер

Скрипт на OHK

[ENABLE]

aobscanmodule(OHK,Siedler3R.exe,8B C1 D1 E8 01 C1) // should be unique
alloc(newmem,$1000)

label(code)
label(return)
 

newmem:
 

code:
  //mov eax,ecx
  shr eax,1
  add ecx,eax
  jmp return
 

OHK:
  jmp newmem
  nop

return:
registersymbol(OHK)
 

[DISABLE]

OHK:
  db 8B C1 D1 E8 01 C1

unregistersymbol(OHK)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Siedler3R.exe+13DD61

Siedler3R.exe+13DD2E: 8B 4D F8                             - mov ecx,[ebp-08]
Siedler3R.exe+13DD31: 80 A7 84 5E 52 00 DF        - and byte ptr [edi+00525E84],-21
Siedler3R.exe+13DD38: 83 3D A8 CD 36 01 00       - cmp dword ptr [Siedler3R.exe+CDCDA8],00
Siedler3R.exe+13DD3F: 74 29                                   - je Siedler3R.exe+13DD6A
Siedler3R.exe+13DD41: 80 3D 94 FB 39 01 00        - cmp byte ptr [Siedler3R.exe+D0FB94],00
Siedler3R.exe+13DD48: 74 20                                   - je Siedler3R.exe+13DD6A
Siedler3R.exe+13DD4A: 0F B6 87 70 5E 52 00        - movzx eax,byte ptr [edi+00525E70]
Siedler3R.exe+13DD51: 69 C0 48 01 00 00              - imul eax,eax,00000148
Siedler3R.exe+13DD57: 83 BC 30 EC 43 41 00 02  - cmp dword ptr [eax+esi+004143EC],02
Siedler3R.exe+13DD5F: 75 09                                   - jne Siedler3R.exe+13DD6A
// ---------- INJECTING HERE ----------
Siedler3R.exe+13DD61: 8B C1                                   - mov eax,ecx
// ---------- DONE INJECTING  ----------
Siedler3R.exe+13DD63: D1 E8                                   - shr eax,1
Siedler3R.exe+13DD65: 01 C1                                   - add ecx,eax
Siedler3R.exe+13DD67: 89 4D F8                             - mov [ebp-08],ecx
Siedler3R.exe+13DD6A: 0F B6 87 73 5E 52 00        - movzx eax,byte ptr [edi+00525E73]
Siedler3R.exe+13DD71: 3B C1                                   - cmp eax,ecx
Siedler3R.exe+13DD73: 72 0B                                   - jb Siedler3R.exe+13DD80
Siedler3R.exe+13DD75: 28 8F 73 5E 52 00              - sub [edi+00525E73],cl
Siedler3R.exe+13DD7B: E9 DE 0A 00 00                  - jmp Siedler3R.exe+13E85E
Siedler3R.exe+13DD80: 0F B7 87 7E 5E 52 00        - movzx eax,word ptr [edi+00525E7E]
Siedler3R.exe+13DD87: B9 AD 00 00 00                  - mov ecx,000000AD
}


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

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

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

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

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