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