SergBrNord

The Bureau: XCOM Declassified

12 сообщений в этой теме

Всем привет!

Может кто-нибудь помочь с выходом на здоровье персонажа в "The Bureau: XCOM Declassified"? У меня игра практически сразу падает при подключении к ней отладчика.

Всё что смог сделать - бесконечные патроны.

Таблица

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, SergBrNord сказал:

Всё что смог сделать - бесконечные патроны.

Щас скачается - посмотрим. 

Вот Скрипт и игра не вылетает в обще то :mellow:  Дал с байтами - мало ли версия другая или ещо что то, по байтам уже подберешь строку. Да и бессмертие работает как то странно. Бомба убивает всё равно, надо посидеть подумать не много, а то я как всегда - бум и готово, а то есть сойдет :)

Скрытый текст

{ Game   : TheBureau.exe
  Version: 
  Date   : 2016-07-27
  Author : LIRW2015

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(Health,TheBureau.exe,8B 9E A4 03 00 00 E9)
alloc(newmem,$1000)

label(code)
label(return)

newmem:

code:
  mov ebx,[esi+000003A4]
  jmp return

Health:
  jmp code
  nop
return:
registersymbol(Health)

[DISABLE]

Health:
  db 8B 9E A4 03 00 00

unregistersymbol(Health)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "TheBureau.exe"+132FF49

"TheBureau.exe"+132FF1F: 8B 8E 80 04 00 00        -  mov ecx,[esi+00000480]
"TheBureau.exe"+132FF25: 51                       -  push ecx
"TheBureau.exe"+132FF26: E8 D5 46 D8 FE           -  call TheBureau.exe+B4600
"TheBureau.exe"+132FF2B: 83 C4 04                 -  add esp,04
"TheBureau.exe"+132FF2E: 85 C0                    -  test eax,eax
"TheBureau.exe"+132FF30: 0F 84 CF 01 00 00        -  je TheBureau.exe+1330105
"TheBureau.exe"+132FF36: 8B 98 50 0D 00 00        -  mov ebx,[eax+00000D50]
"TheBureau.exe"+132FF3C: E9 C4 01 00 00           -  jmp TheBureau.exe+1330105
"TheBureau.exe"+132FF41: 85 F6                    -  test esi,esi
"TheBureau.exe"+132FF43: 0F 84 BC 01 00 00        -  je TheBureau.exe+1330105
// ---------- INJECTING HERE ----------
"TheBureau.exe"+132FF49: 8B 9E A4 03 00 00        -  mov ebx,[esi+000003A4]
// ---------- DONE INJECTING  ----------
"TheBureau.exe"+132FF4F: E9 B1 01 00 00           -  jmp TheBureau.exe+1330105
"TheBureau.exe"+132FF54: 85 FF                    -  test edi,edi
"TheBureau.exe"+132FF56: 0F 84 A9 01 00 00        -  je TheBureau.exe+1330105
"TheBureau.exe"+132FF5C: 8B 0D 04 4E 42 03        -  mov ecx,[TheBureau.exe+2B14E04]
"TheBureau.exe"+132FF62: F3 0F 10 87 98 06 00 00  -  movss xmm0,[edi+00000698]
"TheBureau.exe"+132FF6A: F3 0F 11 44 24 14        -  movss [esp+14],xmm0
"TheBureau.exe"+132FF70: 85 C9                    -  test ecx,ecx
"TheBureau.exe"+132FF72: 0F 84 68 01 00 00        -  je TheBureau.exe+13300E0
"TheBureau.exe"+132FF78: E8 E3 BE D5 FE           -  call TheBureau.exe+8BE60
"TheBureau.exe"+132FF7D: D8 64 24 14              -  fsub dword ptr [esp+14]
}

 

Вот идет инструкция и идет какое то сравнение с регистром - в котором значение 750 - надо посидеть, подумать и гляди норм всё сделать, а то есть защиту от бомб с вертолета.

0000000.jpg

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, LIRW сказал:

Вот Скрипт и игра не вылетает в обще то :mellow:

Где ты игру брал? Стим версия и Skidrow вылетают при установке бряка. Игра вроде не сложно взламываемая, но постоянные вылеты напрягают.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
13 минуты назад, partoftheworlD сказал:

Где ты игру брал?

А я фиг его знает - на Пирате бей по моему. Там всякий ширпотреб как на свалке, но скачал и работает. В общем я уже придумал как сделать бессмертие :) Надо только протестировать. Я нашел максимальное значение здоровья и если смерть не скриптованная от бомбы - то я запишу туда тысяч 10000 и норм должно быть. А на счет игры - всё норм и не вылетает - если в ней не делать не обдуманных решений :lol: а то есть, просто так вот взять и изменить какое то значение нельзя. В каких то играх ты меняешь туда сюда его, а тут поменял и всё игра перестала отвечать. Так что если знать что крутишь - не будет вылетов. Я вот час наверное сижу в ней и вылетел один раз только, покрутил значение одно, думал это точность и из за этого вылет был. 

Я просто игру качал аж с 4 торретов - то там сидов нету, то там, а поставил сразу 4 и какой именно пошел я не знаю.

0

Поделиться сообщением


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

А если просто найти урон от бомбы и вкрячить туда единичку, чтобы бомба наносила урон меньше, чем комариный укус, например?

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, Xipho сказал:

А если просто найти урон

:) просто там наверное не найти, игра просто такая, чуть что не так поменял (хоть одно значение) и всё она вылетела. Я гранаты просто искал только с час наверное и получилось Хипхо как то странно в обще. Думаю ладно, оставлю на последок их и поищу пока патроны, которые с собой ношу,а не которые в рожке. Ну и сделав их - думаю надо потестировать их. И вот после как включил, бегая с ними, обратил внимание на гранаты :mellow: ещо подумал - их не было, а тут появились. А оказалось они работают в инструкции с патронами, но вот только не в байте, не в 4_ой и не во float их не было. Я потому что смотрел структуру и там идет по очереди магазинные патроны и их максималка и рядом с собой которые и то же максималка, а на экране гранаты прям рядом висят с патронами, по сути они в 80_ти процентах случая должны быть где то рядом и максималка их 3, но так и не увидел их. Но зато нашел максимальное значение жизни. А гранаты убивают и бомбы вот почему - там жизнь идет в 750 твоя и максимальное значение выставленное тоже в 750 - не как не даёт перезаписать его в увеличенную сторону, а вот если покрутить само максимальное значение, тогда да - но я записал полторы тысячи и вроде бы как живой персонаж от гранат.  Там просто гранаты превосходили твоё HP по урону и по этому он умирал, но не умирал,а получался баг. Игра уже фиксировала твою смерть, а туда переписывалось обратно HP и он просто дергался на экране и не мог идти не куда. Можно конечно ещо больше жизни записать, но будет не красиво отображаться на экране, а то есть полоска выйдет за пределы ограничения и как то не красиво будет эта полоска выглядеть на экране монитора. 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
12 минуты назад, LIRW сказал:

Можно конечно ещо больше жизни записать,

Жень, мы уже где-то обсуждали это.

Если пишешь infinite HP, то пользуемся инструкциями  "на доступ", а если пишем GodMod, то пользуемся инструкциями "на чтение" и уже от них ищем, где наносится урон и обнуляем его.

Записыванием большого количества HP грешат многие - лень исследовать код, а потом в инструкциях  "на доступ" чаще чем в инструкциях "на чтение" можно обойтись без фильтра, т.е. инструкция работает только с адресом HP ГГ.

Ну например, смотрел на форуме CE, как люди реализовали GodMod для игр серии "King's Bounty"  - там многие записывают HP юнитам 9999 или 5000, хотя игровые значения HP юнитов от 10 - 400 по-моему не больше. 

Я же сделал именно нормальный GodMod:

Скрытый текст

{ Game   : KB.exe
  Version: 
  Date   : 2016-01-20
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(GodMod,KB.exe,8B 49 0C 2B CB) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(OHK)
registersymbol(OHK)
registersymbol(GodMod)

newmem:
  cmp [ecx+1cc],1
  jne @f
  push [ecx+28]    // 4 инструкции нужны, если скрипт не был подключен
  pop [ecx+0c]     // перед боем для восстановления кол-ва юнитов и их
  push [ecx+10c]   // ХР.
  pop [ecx+10]
  xor ebx,ebx
  jmp code

@@:
  cmp [OHK],1
  jne code
  add ebx,#1000000 // Поставил 1000000 на всякий случай вдруг у врага
                   // Армия с суммарной ХР очень большой.
code:
  mov ecx,[ecx+0c]
  sub ecx,ebx
  jmp return

OHK:
dd 0

GodMod:
  jmp newmem
return:

[DISABLE]
GodMod:
  db 8B 49 0C 2B CB

unregistersymbol(OHK)
unregistersymbol(GodMod)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "KB.exe"+5A1CD

"KB.exe"+5A1AC: 81 C2 00 00 C0 B4     -  add edx,B4C00000
"KB.exe"+5A1B2: 89 57 08              -  mov [edi+08],edx
"KB.exe"+5A1B5: 8B 46 70              -  mov eax,[esi+70]
"KB.exe"+5A1B8: 83 C0 50              -  add eax,50
"KB.exe"+5A1BB: 50                    -  push eax
"KB.exe"+5A1BC: E8 7F 51 FC FF        -  call KB.exe+1F340
"KB.exe"+5A1C1: 8B 4E 70              -  mov ecx,[esi+70]
"KB.exe"+5A1C4: 8B 51 10              -  mov edx,[ecx+10]
"KB.exe"+5A1C7: 89 57 14              -  mov [edi+14],edx
"KB.exe"+5A1CA: 8B 4E 70              -  mov ecx,[esi+70]
// ---------- INJECTING HERE ----------
"KB.exe"+5A1CD: 8B 49 0C              -  mov ecx,[ecx+0C]
"KB.exe"+5A1D0: 2B CB                 -  sub ecx,ebx
// ---------- DONE INJECTING  ----------
"KB.exe"+5A1D2: 89 4F 10              -  mov [edi+10],ecx
"KB.exe"+5A1D5: 85 C9                 -  test ecx,ecx
"KB.exe"+5A1D7: 7F 1D                 -  jg KB.exe+5A1F6
"KB.exe"+5A1D9: 8D A4 24 00 00 00 00  -  lea esp,[esp+00000000]
"KB.exe"+5A1E0: FF 4F 14              -  dec [edi+14]
"KB.exe"+5A1E3: 8B 4F 14              -  mov ecx,[edi+14]
"KB.exe"+5A1E6: FF 47 0C              -  inc [edi+0C]
"KB.exe"+5A1E9: 85 C9                 -  test ecx,ecx
"KB.exe"+5A1EB: 7E 09                 -  jle KB.exe+5A1F6
"KB.exe"+5A1ED: 01 47 10              -  add [edi+10],eax
}

 

Как видишь, обнуляю урон по нашим ГГ (кстати твоим любимым способом - с помощью XOR xor ebx,ebx), а в OneHitKill увеличиваю его по врагам.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, Garik66 сказал:

Жень, мы уже где-то обсуждали это.

Игорь мне что то не очень охота сидеть и высматривать там фильтра. Если кому то заняться не чем, то ради бога. 

Вот скрипт фильтра чела с СЕ форума. Я даже не знаю работает он или нет - я по своему сделал, а кто другой пусть по своему делает.  

Игра в обще как бы там присутствует Анреал Энжин и инструкция вычитания как раз sub eax,ecx хочешь возится с ней - пожалуйста. 

Да вот фильтр того чела. 

Скрытый текст

lblDamageTester:
pushad
mov dword ptr [pTemp],0
mov eax,[edi+644]
test eax,eax
jz lblDamageTesterSkip
mov ebx,eax
mov eax,[eax+14C]
test eax,eax
jz lblDamageTesterSkip
mov ecx,[eax]
cmp dword ptr [sWilliamCarter],ecx
jne short lblDamageTesterNotWilliam
mov ecx,[eax+4]
cmp dword ptr [sWilliamCarter+4],ecx
jne short lblDamageTesterNotWilliam
mov eax,[ebx+138]
mov dword ptr [pTemp],eax
jmp lblDamageTesterSkip
lblDamageTesterNotWilliam:
mov ecx,[eax]
cmp dword ptr [sMyronFaulke],ecx
jne short lblDamageTesterNotMyron
mov ecx,[eax+4]
cmp dword ptr [sMyronFaulke+4],ecx
jne short lblDamageTesterNotMyron
mov eax,[ebx+138]
mov dword ptr [pTemp],eax
jmp lblDamageTesterSkip
lblDamageTesterNotMyron:
mov ecx,[eax]
cmp dword ptr [sAngelaWeaver],ecx
jne short lblDamageTesterNotAngela
mov ecx,[eax+4]
cmp dword ptr [sAngelaWeaver+4],ecx
jne short lblDamageTesterNotAngela
mov eax,[ebx+138]
mov dword ptr [pTemp],eax
jmp lblDamageTesterSkip
lblDamageTesterNotAngela:
mov ecx,[eax]
cmp dword ptr [sAlanWeir],ecx
jne short lblDamageTesterNotAlan
mov ecx,[eax+4]
cmp dword ptr [sAlanWeir+4],ecx
jne short lblDamageTesterNotAlan
mov eax,[ebx+138]
mov dword ptr [pTemp],eax
jmp lblDamageTesterSkip
lblDamageTesterNotAlan:
mov ecx,[eax]
cmp dword ptr [sNicoDaSilva],ecx
jne short lblDamageTesterNotNico
mov ecx,[eax+4]
cmp dword ptr [sNicoDaSilva+4],ecx
jne short lblDamageTesterNotNico
mov eax,[ebx+138]
mov dword ptr [pTemp],eax
jmp lblDamageTesterSkip
lblDamageTesterNotNico:
mov ecx,[eax]
cmp dword ptr [sFieldAgent],ecx
jne short lblDamageTesterNotFieldAgent
mov ecx,[eax+4]
cmp dword ptr [sFieldAgent+4],ecx
jne short lblDamageTesterNotFieldAgent
mov eax,[ebx+138]
mov dword ptr [pTemp],eax
lblDamageTesterNotFieldAgent:
lblDamageTesterSkip:
cmp dword ptr [pTemp],0
je short lblDamageTesterDone
cmp dword ptr [bEnableGodMode],1
jne short lblDamageTesterDone
mov eax,[pTemp]
mov dword ptr [edi+3A4],eax
mov dword ptr [esp+34],0
lblDamageTesterDone:
popad

 

 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
36 минуты назад, LIRW сказал:

Если кому то заняться не чем

offtopic.gif не понял, что за наезд.

Ты же вроде делаешь скрипт?

Ну лень, так лень, делай как делается.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Garik66 сказал:

не понял, что за наезд.

:offtopic::-D Игорь опять наезд какой то причудился.  Я просто написал как есть, не уж то я бы не додумался взять инструкцию на запись :)  Не всё так просто там - там одна единственная инструкция только работающая с персонажем. Остальные идут с врагами и тому подобным - фильтр я тебе показал какой (кто то делал с СЕ форума) и это не с проста. Я сразу первым делом начал смотреть ещо, где это вычитание идет, но оно идет через sub и лучше туда в эту инструкцию в обще не лесть - на ней наверное вся игра.  Да Игорь и какой я скрипт делаю ? я трейнер уже вчера сделал на эту игру.  

Да и Игорь - понимаю, помочь хотел спасибо за это, но там не всё так просто как бы и это лишние проблемы только создавать себе. Может автор запроса в этой теме и использует твою подсказку, но это мало вероятно. Так как трейнеров то куча, а Ставрос пишет от гранат всё равно умирает персонаж. Это написал к тому, что люди наверное тоже думали как сделать, но может поленились как я на пример, может слишком трудно для них оказалось и сделали как вышло - не знаю в общем. Я вот сделал как вышло у меня - Ставрос потестирует ещо, скажет что и как, а там ещо посижу подумаю.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, LIRW сказал:

Вот скрипт фильтра чела с СЕ форума.

Тоже видел. Может кто объяснить, как он работает? Там столько объявлений и переменных намешано, что он стал полностью нечитабельным.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
12 минуты назад, SergBrNord сказал:

Тоже видел. Может кто объяснить, как он работает? Там столько объявлений и переменных намешано, что он стал полностью нечитабельным.

Вот бессмертие сделал же. По тестировать только надо, но вроде бы не убивает гранатами. Да а на счет фильтра того чела,  там убивает с одного выстрела и свою команду, зачем такой нужен. У меня есть скрипт на команду и вроде как работает всё окей, но я не играю в игры и не могу, а то есть нет желания тестировать и проходить всю игру. Я так на одном, двух уровнях побегал и вроде бы норм всё.

Скрытый текст

[ENABLE]

aobscanmodule(Health,TheBureau.exe,39 81 * * * * 75 * 8B 0D)
alloc(newmem,$1000)

label(code)
label(return)

newmem:

  mov [ecx+000003A4],#2200
  mov [ecx+00000D58],#2200

code:
  cmp [ecx+000003A4],eax
  jmp return



Health:
  jmp newmem
  nop
return:
registersymbol(Health)

[DISABLE]

Health:
  db 39 81 A4 03 00 00

unregistersymbol(Health)
dealloc(newmem)

 

 

0

Поделиться сообщением


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

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас