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

Serious Sam HD: TSE; взлом здоровья


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

31 минуты назад, SergBrNord сказал:

Только я вот не понимаю, про какой флаг речь?

mov [ecx+1C], 1  //Пишем тот флаг

Ты же вроде сам его так назвал.

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

4 часа назад, SergBrNord сказал:

Правда, на этом моменте у меня мозг немного переклинило:

Цитата

Now back to the case. If You have clicked on more information, You can see the code that You have examined and the value of the registers. Make sure to remember what is between the [ ] and what is the value of the register. Now click on "Hex" left to the value box in CE, type in the value of the register and search for it. You have found the address of the pointer. Click on "Add address manually". Select pointer, and type in the address of the pointer that You have found. If You have done it right, You have added an address to the table which will "track" the location of Your health, wherever it is. 

 Я не могу сообразить где тут собака зарыта? Мы находим значение регистра. Но смысл? Нет, ну я, конечно, пробовал сделать так в Сэме но получилась чушь в 2к+ адресов, практически не отсеивающаяся.

Здесь всё правильно и понятно, это грубо ШАГ № 8 Туториала. Если не понял повтори "Обучение СЕ" 8 шаг.

Часто это использую в играх, если не нахожу фильтра в первой струтуре, то нахожу этим способом первый поинтер и уже из него исследую струтуру, часто уже на первом уровне указателя в структуре лежит обычно текстовый фильтр (ID). 

Но для новой твоей игры этот метод к сожалению не подходит. Поэтому и пробовал искать указатели автоматически.

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

15 час назад, Garik66 сказал:

Если у тебя не подобрано в игре, то скорее всего будет вылет из игры. Потестируй свой скрипт, например загрузи самое начало игры пока ничего нет, активируй свой скрипт и посмотри, что будет .

Проверил твой скрипт, без проблем добавляет патроны и вылетов нет, так что проверка флага не нужна.

Есть одна опечатка в скрипте 

  mov [esi+00000A50],#998    //flamethrower
  mov [esi+00000A50],#799    //lasergun  нужно  [esi+00000A60]

и 

push ecx
pop ecx

в данном случае не нужны, так как ecx затирается другим значением дальше по коду игры.

 

Добавил в скрипт, добавление оружия без его подбора в игре:

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

{ Game   : SamHD_TSE.exe
  Version: 
  Date   : 2016-03-18
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(GodMod,SamHD_TSE.exe,39 86 98 04 00 00) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(flag)
registersymbol(GodMod)

newmem:
  mov ecx,[esi+58]
  cmp [ecx],79616C50
  jne code
                             // Блок - бесконечные НР, Armor и Ammo
  mov [esi+00000488],#99     //Heath
  mov [esi+0000049C],#98     //Armor
  mov [esi+00000A10],#199    //shotsgun + db shotgun
  mov [esi+00000A20],#998    //tompson + minigan
  mov [esi+00000A30],#99     //rocketlauncher
  mov [esi+00000A40],#99     //grenadegun
  mov [esi+00000A50],#998    //flamethrower
  mov [esi+00000A60],#799    //lasergun
  mov [esi+00000A70],#59     //SBC
  mov [esi+00000A80],#99     //sniper rifle
  mov [esi+00000A90],#4      //bomb

                             // Блок - разового добавления Weapon
  cmp [flag],1
  jne code
  mov [esi+ad8],#32767       // Weapon, откуда цифра смотри следующий спойлер.
  mov [flag],0

code:
  cmp [esi+00000498],eax
  jmp return

flag:
dd 1

GodMod:
  jmp newmem
  nop
return:

[DISABLE]
GodMod:
  db 39 86 98 04 00 00

unregistersymbol(GodMod)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "SamHD_TSE.exe"+6BBA6

"SamHD_TSE.exe"+6BB80: 74 10                 -  je SamHD_TSE.exe+6BB92
"SamHD_TSE.exe"+6BB82: 83 BE 38 08 00 00 00  -  cmp dword ptr [esi+00000838],00
"SamHD_TSE.exe"+6BB89: 74 07                 -  je SamHD_TSE.exe+6BB92
"SamHD_TSE.exe"+6BB8B: 8B CE                 -  mov ecx,esi
"SamHD_TSE.exe"+6BB8D: E8 1E 46 FF FF        -  call SamHD_TSE.exe+601B0
"SamHD_TSE.exe"+6BB92: 8B CE                 -  mov ecx,esi
"SamHD_TSE.exe"+6BB94: E8 B7 FD 02 00        -  call SamHD_TSE.exe+9B950
"SamHD_TSE.exe"+6BB99: 8D BE 88 04 00 00     -  lea edi,[esi+00000488]
"SamHD_TSE.exe"+6BB9F: 8B CF                 -  mov ecx,edi
"SamHD_TSE.exe"+6BBA1: E8 4A 0B 48 00        -  call SamHD_TSE.exe+4EC6F0
// ---------- INJECTING HERE ----------
"SamHD_TSE.exe"+6BBA6: 39 86 98 04 00 00     -  cmp [esi+00000498],eax
// ---------- DONE INJECTING  ----------
"SamHD_TSE.exe"+6BBAC: 75 0B                 -  jne SamHD_TSE.exe+6BBB9
"SamHD_TSE.exe"+6BBAE: 8B CE                 -  mov ecx,esi
"SamHD_TSE.exe"+6BBB0: E8 2B AE 00 00        -  call SamHD_TSE.exe+769E0
"SamHD_TSE.exe"+6BBB5: 85 C0                 -  test eax,eax
"SamHD_TSE.exe"+6BBB7: 75 19                 -  jne SamHD_TSE.exe+6BBD2
"SamHD_TSE.exe"+6BBB9: 8B 16                 -  mov edx,[esi]
"SamHD_TSE.exe"+6BBBB: 8B 82 B8 06 00 00     -  mov eax,[edx+000006B8]
"SamHD_TSE.exe"+6BBC1: 8B CE                 -  mov ecx,esi
"SamHD_TSE.exe"+6BBC3: FF D0                 -  call eax
"SamHD_TSE.exe"+6BBC5: 8B CF                 -  mov ecx,edi
}

 

 

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

Двоичная система (часто используется в играх)

2Е0 =    1 - нож              1
2Е1 =    2 - пила             3
2Е2 =    4 - 1 пистолет       7  
2Е3 =    8 - 2 пистолета     15
2Е4 =   16 - дробовик        31
2Е5 =   32 - двустволка      63  
2Е6 =   64 - автомат        127   
2Е7 =  128 - миниган        255
2Е8 =  256 - гранатомёт     511
2Е9 =  512 - ракетница     1023
2Е10= 1024 - огнемёт       2047
2Е11= 2048 - лазер         4095    
2Е12= 4096 - пушка         8191
2Е13= 8192 - снайперка    16383     
2Е14=16384 - бомбочка     32767
2Е15=32768 -              65535(вроде не появляется ничё)

Судя по Вики всего 15 видов оружия.

 

 

Изменено пользователем Garik66
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

11 час назад, Garik66 сказал:

Добавил в скрипт, добавление оружия без его подбора в игре:

  Показать содержимое


{ Game   : SamHD_TSE.exe
  Version: 
  Date   : 2016-03-18
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(GodMod,SamHD_TSE.exe,39 86 98 04 00 00) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(flag)
registersymbol(GodMod)

newmem:
  mov ecx,[esi+58]
  cmp [ecx],79616C50
  jne code
                             // Блок - бесконечные НР, Armor и Ammo
  mov [esi+00000488],#99     //Heath
  mov [esi+0000049C],#98     //Armor
  mov [esi+00000A10],#199    //shotsgun + db shotgun
  mov [esi+00000A20],#998    //tompson + minigan
  mov [esi+00000A30],#99     //rocketlauncher
  mov [esi+00000A40],#99     //grenadegun
  mov [esi+00000A50],#998    //flamethrower
  mov [esi+00000A60],#799    //lasergun
  mov [esi+00000A70],#59     //SBC
  mov [esi+00000A80],#99     //sniper rifle
  mov [esi+00000A90],#4      //bomb

                             // Блок - разового добавления Weapon
  cmp [flag],1
  jne code
  mov [esi+ad8],#32767       // Weapon, откуда цифра смотри следующий спойлер.
  mov [flag],0

code:
  cmp [esi+00000498],eax
  jmp return

flag:
dd 1

GodMod:
  jmp newmem
  nop
return:

[DISABLE]
GodMod:
  db 39 86 98 04 00 00

unregistersymbol(GodMod)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "SamHD_TSE.exe"+6BBA6

"SamHD_TSE.exe"+6BB80: 74 10                 -  je SamHD_TSE.exe+6BB92
"SamHD_TSE.exe"+6BB82: 83 BE 38 08 00 00 00  -  cmp dword ptr [esi+00000838],00
"SamHD_TSE.exe"+6BB89: 74 07                 -  je SamHD_TSE.exe+6BB92
"SamHD_TSE.exe"+6BB8B: 8B CE                 -  mov ecx,esi
"SamHD_TSE.exe"+6BB8D: E8 1E 46 FF FF        -  call SamHD_TSE.exe+601B0
"SamHD_TSE.exe"+6BB92: 8B CE                 -  mov ecx,esi
"SamHD_TSE.exe"+6BB94: E8 B7 FD 02 00        -  call SamHD_TSE.exe+9B950
"SamHD_TSE.exe"+6BB99: 8D BE 88 04 00 00     -  lea edi,[esi+00000488]
"SamHD_TSE.exe"+6BB9F: 8B CF                 -  mov ecx,edi
"SamHD_TSE.exe"+6BBA1: E8 4A 0B 48 00        -  call SamHD_TSE.exe+4EC6F0
// ---------- INJECTING HERE ----------
"SamHD_TSE.exe"+6BBA6: 39 86 98 04 00 00     -  cmp [esi+00000498],eax
// ---------- DONE INJECTING  ----------
"SamHD_TSE.exe"+6BBAC: 75 0B                 -  jne SamHD_TSE.exe+6BBB9
"SamHD_TSE.exe"+6BBAE: 8B CE                 -  mov ecx,esi
"SamHD_TSE.exe"+6BBB0: E8 2B AE 00 00        -  call SamHD_TSE.exe+769E0
"SamHD_TSE.exe"+6BBB5: 85 C0                 -  test eax,eax
"SamHD_TSE.exe"+6BBB7: 75 19                 -  jne SamHD_TSE.exe+6BBD2
"SamHD_TSE.exe"+6BBB9: 8B 16                 -  mov edx,[esi]
"SamHD_TSE.exe"+6BBBB: 8B 82 B8 06 00 00     -  mov eax,[edx+000006B8]
"SamHD_TSE.exe"+6BBC1: 8B CE                 -  mov ecx,esi
"SamHD_TSE.exe"+6BBC3: FF D0                 -  call eax
"SamHD_TSE.exe"+6BBC5: 8B CF                 -  mov ecx,edi
}

 

 

  Показать содержимое


Двоичная система (часто используется в играх)

2Е0 =    1 - нож              1
2Е1 =    2 - пила             3
2Е2 =    4 - 1 пистолет       7  
2Е3 =    8 - 2 пистолета     15
2Е4 =   16 - дробовик        31
2Е5 =   32 - двустволка      63  
2Е6 =   64 - автомат        127   
2Е7 =  128 - миниган        255
2Е8 =  256 - гранатомёт     511
2Е9 =  512 - ракетница     1023
2Е10= 1024 - огнемёт       2047
2Е11= 2048 - лазер         4095    
2Е12= 4096 - пушка         8191
2Е13= 8192 - снайперка    16383     
2Е14=16384 - бомбочка     32767
2Е15=32768 -              65535(вроде не появляется ничё)

Судя по Вики всего 15 видов оружия.

 

 

Как я понял, ты сравнением структур нашёл это значение?

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

2 минуты назад, SergBrNord сказал:

Как я понял, ты сравнением структур нашёл это значение?

Нет.

Просто взял инструкцию на чтение игры (их две - можно любую) в отдладчике, ПКМ по ней, из контекстного меню выбрал строчку "Найти адреса, к которым обращается эта инструкция" и после этого подобрал сперва одно оружие в игре, которого у меня не было - вышел на адрес, подобрал второе - стало сразу понятно, а потом уже вручную менял значение в адресе в таблице, следуя двоичной сиситеме.

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

Кстати там много чего таким образом можно найти.

Например явно виден адрес счётчика нахождения секретных вещей, короче поэкспериментируй, там много чего есть.

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

1 час назад, Garik66 сказал:

Просто взял инструкцию на чтение игры (их две - можно любую) в отдладчике, ПКМ по ней, из контекстного меню выбрал строчку "Найти адреса, к которым обращается эта инструкция" и после этого подобрал сперва одно оружие в игре, которого у меня не было - вышел на адрес, подобрал второе - стало сразу понятно, а потом уже вручную менял значение в адресе в таблице, следуя двоичной сиситеме.

Я так понимаю, одна из них та, на которую ты второй вариант скрипта писал?

 

1 час назад, Garik66 сказал:

Кстати там много чего таким образом можно найти.

Например явно виден адрес счётчика нахождения секретных вещей, короче поэкспериментируй, там много чего есть.

Гарик, а ты пробовал координаты поискать? Я пробовал как на видео у Xipho, но у меня из получившихся значений ничто не оказалось координатами игрока.

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

3 минуты назад, SergBrNord сказал:

Я так понимаю, одна из них та, на которую ты второй вариант скрипта писал?

Не знаю какой вариант - скриптов было много, короче вот здесь скрипт на одну из этих инструкций:

 

 

7 минут назад, SergBrNord сказал:

Гарик, а ты пробовал координаты поискать?

Нет не пробовал.

А что нужна помощь?

Они скорее всего в той же структуре будут.

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

7 часов назад, Garik66 сказал:

Нет не пробовал.

А что нужна помощь?

Они скорее всего в той же структуре будут.

Я не могу выйти на адрес хотя бы одной координаты - пытался сделать так же как на видео у Xipho, но ничего не замораживается. Не могу понять, что же делаю не так?...

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

В 19.03.2016в15:58, SergBrNord сказал:

Не могу понять, что же делаю не так?...

Игра не стабильная, постоянно вылетает, нужно терпение.

 

Подскажу более быстрый способ для твоей игры - как выйти на координату Z (высоту).

Загрузи самое начало (мостик около озера, на дне которого гранатомёт, а на другом берегу бронь, пистолет и красная телефонная будка)

Подключи консоль -> подключи "Режим полёта".

Начни поиск: Тип "float" Диапозон 0 до 5, стоя на мостике.

А дальше поднялся вверх - увеличилось, опустился - уменьшилось.

Перед проверкой адресов заморозкой, останется около 160 адресов, среди них есть искомая координата Z, при заморозке которой ГГ не будет опускаться вниз и подниматься вверх, в регионе памяти найдёшь и другие координаты.

Но правда тебе это ни чего не даст, поймёшь, когда увидишь инструкции работающие с этими адресами.

Там ещё нужно будет разбираться и задавать много вопросов тебе на форуме, чтобы написать телепорт.

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

написал скрипт для включения читов от разработчиков, чтобы не играться с консолью "Disable / Enable cheats (0/1)":

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

{ Game   : SamHD_TSE.exe
  Version: 
  Date   : 2016-03-20
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(INJECT1_1,SamHD_TSE.exe,83 3D 58 28 E1 00 00 56 8B F1 0F 84 20) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(DisplayInterface)
registersymbol(DisplayInterface)
label(GhostMode)
registersymbol(GhostMode)
label(FlightMode)
registersymbol(FlightMode)
label(StealthMode)
registersymbol(StealthMode)
label(TurboMode)
registersymbol(TurboMode)
label(GodMode)
registersymbol(GodMode)
registersymbol(INJECT1_1)

newmem:
  mov [SamHD_TSE.exe+B35268],2
  push [DisplayInterface]
  pop [SamHD_TSE.exe+A12858]
  push [GhostMode]
  pop [SamHD_TSE.exe+B35270]
  push [FlightMode]
  pop [SamHD_TSE.exe+B35274]
  push [StealthMode]
  pop [SamHD_TSE.exe+B35278]
  push [TurboMode]
  pop [SamHD_TSE.exe+B3527C]
  push [GodMode]
  pop [SamHD_TSE.exe+B35288]

code:
  cmp dword ptr [SamHD_TSE.exe+A12858],00
  jmp return

DisplayInterface:
dd 1
GhostMode:
dd 0
FlightMode:
dd 0
StealthMode:
dd 0
TurboMode:
dd 0
GodMode:
dd 0

INJECT1_1:
  jmp newmem
  nop
  nop
return:

[DISABLE]
INJECT1_1:
  db 83 3D 58 28 E1 00 00

unregistersymbol(GodMode)
unregistersymbol(TurboMode)
unregistersymbol(StealthMode)
unregistersymbol(FlightMode)
unregistersymbol(GhostMode)
unregistersymbol(DisplayInterface)
unregistersymbol(INJECT1_1)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "SamHD_TSE.exe"+27E8D6

"SamHD_TSE.exe"+27E8C9: CC                    -  int 3 
"SamHD_TSE.exe"+27E8CA: CC                    -  int 3 
"SamHD_TSE.exe"+27E8CB: CC                    -  int 3 
"SamHD_TSE.exe"+27E8CC: CC                    -  int 3 
"SamHD_TSE.exe"+27E8CD: CC                    -  int 3 
"SamHD_TSE.exe"+27E8CE: CC                    -  int 3 
"SamHD_TSE.exe"+27E8CF: CC                    -  int 3 
"SamHD_TSE.exe"+27E8D0: 55                    -  push ebp
"SamHD_TSE.exe"+27E8D1: 8B EC                 -  mov ebp,esp
"SamHD_TSE.exe"+27E8D3: 83 EC 44              -  sub esp,44
// ---------- INJECTING HERE ----------
"SamHD_TSE.exe"+27E8D6: 83 3D 58 28 E1 00 00  -  cmp dword ptr [SamHD_TSE.exe+A12858],00
// ---------- DONE INJECTING  ----------
"SamHD_TSE.exe"+27E8DD: 56                    -  push esi
"SamHD_TSE.exe"+27E8DE: 8B F1                 -  mov esi,ecx
"SamHD_TSE.exe"+27E8E0: 0F 84 20 02 00 00     -  je SamHD_TSE.exe+27EB06
"SamHD_TSE.exe"+27E8E6: 8B 46 5C              -  mov eax,[esi+5C]
"SamHD_TSE.exe"+27E8E9: 53                    -  push ebx
"SamHD_TSE.exe"+27E8EA: 57                    -  push edi
"SamHD_TSE.exe"+27E8EB: 89 45 E0              -  mov [ebp-20],eax
"SamHD_TSE.exe"+27E8EE: 8B 45 E0              -  mov eax,[ebp-20]
"SamHD_TSE.exe"+27E8F1: 3B 05 C8 D6 E1 00     -  cmp eax,[SamHD_TSE.exe+A1D6C8]
"SamHD_TSE.exe"+27E8F7: 0F 4F 05 C8 D6 E1 00  -  cmovg eax,[SamHD_TSE.exe+A1D6C8]
}

 

И табличка уже с нужными адресами в ней. Горячие клавиши не назначал.

Ниже залил новую табличку с телепортом.

Изменено пользователем Garik66
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

В 20.03.2016в18:43, Garik66 сказал:

Перед проверкой адресов заморозкой, останется около 160 адресов, среди них есть искомая координата Z, при заморозке которой ГГ не будет опускаться вниз и подниматься вверх, в регионе памяти найдёшь и другие координаты.

Но правда тебе это ни чего не даст, поймёшь, когда увидишь инструкции работающие с этими адресами.

Там ещё нужно будет разбираться и задавать много вопросов тебе на форуме, чтобы написать телепорт.

Появилось наконец-то время, сейчас попробую. Правда есть опасения, что таким образом я выйду на функцию, отвечающую за полёт в чит режиме.

 

Я подобным образом уже пробовал делать - брал тот же уровень и нырял в яму с водой. Но при заморозке значений игра любила вылетать =)

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

Вот нашёл координаты и посмотрел в памяти что где:

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

994490905436c65f8581.jpg

 

Поставил останов на X:

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

1b897e3aac3b94920733.jpg

 

Останов на Y:

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

f3472e05b2438c5ceffc.jpg

 

Останов на Z:

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

927d5c2fe3cefd668ec4.jpg

Собственно, с какой инструкции начать работать лучше? Я не вижу ни одной подходящей

 

Upd.

Пока буду работать с X, так как Z - бессмысленно; Y - в структуре чушь.

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

В общем, практически зеркально повторилась ситуация с нахождением инструкции по здоровью. Скриншот с остановом по X в предыдущем посте я заскринил неправильно и позже это понял. Однако это привело к пониманию, что структура с  координатами лежит в EAX.

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

9919b5aa0a7fa60285c5.jpg

 

Кстати, в ESI лежит практически то же самое...

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

Что собственно, получилось:

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

{ Game   : SamHD_TSE.exe
  Version: 
  Date   : 2016-03-22
  Author : SergBrNord
}

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat

 
 
aobscanmodule(TELEPORT,SamHD_TSE.exe,F3 0F 11 45 FC F3 A5 76) // should be unique
alloc(newmem,$1000)

label(code)
label(return)
label(saveCRDS)
label(tflag)

newmem:
  cmp byte ptr[tflag], 0
  je code

  cmp byte ptr [tflag], 1
  jne @F
  push edx
  mov edx, [eax+3C]
  mov [saveCRDS], edx
  mov edx, [eax+40]
  mov [saveCRDS+4], edx
  mov edx, [eax+44]
  mov [saveCRDS+8], edx
  pop edx
  mov byte ptr [tflag], 0

@F:
  cmp byte ptr[tflag], 2
  jne code
  push edx
  mov edx, [saveCRDS]
  mov [eax+3C], edx
  mov edx, [saveCRDS+4]
  mov [eax+40], edx
  mov edx, [saveCRDS+8]
  mov [eax+44], edx
  pop edx
  mov byte ptr [tflag], 0

code:
  movss [ebp-04],xmm0
  jmp return

tflag:
  db 00

saveCRDS:
 db 00 00 00 00 00 00 00 00 00 00 00 00

TELEPORT:
  jmp newmem
return:
registersymbol(TELEPORT)
registersymbol(tflag)

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
TELEPORT:
  db F3 0F 11 45 FC

unregistersymbol(TELEPORT)
unregistersymbol(tflag)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "SamHD_TSE.exe"+FF96E

"SamHD_TSE.exe"+FF946: D9 83 B0 09 00 00        -  fld dword ptr [ebx+000009B0]
"SamHD_TSE.exe"+FF94C: 8B 83 24 01 00 00        -  mov eax,[ebx+00000124]
"SamHD_TSE.exe"+FF952: 0F 57 C0                 -  xorps xmm0,xmm0
"SamHD_TSE.exe"+FF955: D9 5D E0                 -  fstp dword ptr [ebp-20]
"SamHD_TSE.exe"+FF958: D9 45 E0                 -  fld dword ptr [ebp-20]
"SamHD_TSE.exe"+FF95B: 8D 70 2C                 -  lea esi,[eax+2C]
"SamHD_TSE.exe"+FF95E: DD 05 30 50 B9 00        -  fld qword ptr [SamHD_TSE.exe+795030]
"SamHD_TSE.exe"+FF964: B9 07 00 00 00           -  mov ecx,00000007
"SamHD_TSE.exe"+FF969: DF F1                    -  fcomip st(0),st(1)
"SamHD_TSE.exe"+FF96B: 8D 7D BC                 -  lea edi,[ebp-44]
// ---------- INJECTING HERE ----------
"SamHD_TSE.exe"+FF96E: F3 0F 11 45 FC           -  movss [ebp-04],xmm0
// ---------- DONE INJECTING  ----------
"SamHD_TSE.exe"+FF973: F3 A5                    - repe  movsd 
"SamHD_TSE.exe"+FF975: 76 08                    -  jna SamHD_TSE.exe+FF97F
"SamHD_TSE.exe"+FF977: D8 6D D0                 -  fsubr dword ptr [ebp-30]
"SamHD_TSE.exe"+FF97A: D9 5D FC                 -  fstp dword ptr [ebp-04]
"SamHD_TSE.exe"+FF97D: EB 02                    -  jmp SamHD_TSE.exe+FF981
"SamHD_TSE.exe"+FF97F: DD D8                    -  fstp st(0)
"SamHD_TSE.exe"+FF981: F3 0F 10 45 D0           -  movss xmm0,[ebp-30]
"SamHD_TSE.exe"+FF986: 8B B3 48 07 00 00        -  mov esi,[ebx+00000748]
"SamHD_TSE.exe"+FF98C: 8B BB 4C 07 00 00        -  mov edi,[ebx+0000074C]
"SamHD_TSE.exe"+FF992: 8D 45 E8                 -  lea eax,[ebp-18]
}

 

 

Ссылка на таблицу

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

55 минут назад, SergBrNord сказал:

Что собственно, получилось:

Молодец! :)

Я тоже написал для тебя скрипт (сегодня утром), он более компактен ;) :P:

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

{ Game   : SamHD_TSE.exe
  Version: 
  Date   : 2016-03-22
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(Teleport,SamHD_TSE.exe,F3 0F 11 45 FC F3 A5 76) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(coordX)
label(coordY)
label(coordZ)
label(Flag1)
registersymbol(Flag1)
registersymbol(Teleport)

newmem:
  cmp [Flag1],0
  je code

  cmp [Flag1],1
  jne @f
  push [eax+3C]
  pop [coordX]
  push [eax+40]
  pop [coordZ]
  push [eax+44]
  pop [coordY]

@@:
  cmp [coordX],0
  je code
  cmp [Flag1],2
  jne code
  push [coordX]
  pop  [eax+3C]
  push [coordZ]
  pop  [eax+40]
  push [coordY]
  pop  [eax+44]

code:
  mov [Flag1],0
  movss [ebp-04],xmm0
  jmp return

coordX:
dd 0
coordY:
dd 0
coordZ:
dd 0
Flag1:
dd 0

Teleport:
  jmp newmem
return:

[DISABLE]
Teleport:
   db F3 0F 11 45 FC

unregistersymbol(Flag1)
unregistersymbol(Teleport)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "SamHD_TSE.exe"+FCBDE

"SamHD_TSE.exe"+FCBB6: D9 83 B0 09 00 00        -  fld dword ptr [ebx+000009B0]
"SamHD_TSE.exe"+FCBBC: 8B 83 24 01 00 00        -  mov eax,[ebx+00000124]
"SamHD_TSE.exe"+FCBC2: 0F 57 C0                 -  xorps xmm0,xmm0
"SamHD_TSE.exe"+FCBC5: D9 5D E0                 -  fstp dword ptr [ebp-20]
"SamHD_TSE.exe"+FCBC8: D9 45 E0                 -  fld dword ptr [ebp-20]
"SamHD_TSE.exe"+FCBCB: 8D 70 2C                 -  lea esi,[eax+2C]
"SamHD_TSE.exe"+FCBCE: DD 05 A8 FD B7 00        -  fld qword ptr [SamHD_TSE.exe+77FDA8]
"SamHD_TSE.exe"+FCBD4: B9 07 00 00 00           -  mov ecx,00000007
"SamHD_TSE.exe"+FCBD9: DF F1                    -  fcomip st(0),st(1)
"SamHD_TSE.exe"+FCBDB: 8D 7D BC                 -  lea edi,[ebp-44]
// ---------- INJECTING HERE ----------
"SamHD_TSE.exe"+FCBDE: F3 0F 11 45 FC           -  movss [ebp-04],xmm0
// ---------- DONE INJECTING  ----------
"SamHD_TSE.exe"+FCBE3: F3 A5                    - repe  movsd
"SamHD_TSE.exe"+FCBE5: 76 08                    -  jna SamHD_TSE.exe+FCBEF
"SamHD_TSE.exe"+FCBE7: D8 6D D0                 -  fsubr dword ptr [ebp-30]
"SamHD_TSE.exe"+FCBEA: D9 5D FC                 -  fstp dword ptr [ebp-04]
"SamHD_TSE.exe"+FCBED: EB 02                    -  jmp SamHD_TSE.exe+FCBF1
"SamHD_TSE.exe"+FCBEF: DD D8                    -  fstp st(0)
"SamHD_TSE.exe"+FCBF1: F3 0F 10 45 D0           -  movss xmm0,[ebp-30]
"SamHD_TSE.exe"+FCBF6: 8B B3 48 07 00 00        -  mov esi,[ebx+00000748]
"SamHD_TSE.exe"+FCBFC: 8B BB 4C 07 00 00        -  mov edi,[ebx+0000074C]
"SamHD_TSE.exe"+FCC02: 8D 45 E8                 -  lea eax,[ebp-18]
}

 

Ну и табличка конечно:

 

 

SamHD_TSE.CT

Изменено пользователем Garik66
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

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

Гарик, а есть метод/методы отловить, что неправильно делает скрипт? В чём дело - у меня появилось времени немного пробегать в игрушке и выяснилось - спустя некоторое время камера начинает либо бешено трястись, либо игра зависает/крашится. Крашнуться она может, например, при подборе здоровья или на ровном месте. Вот, собственно, хочется отследить этот момент.

 

P.S.

В моём другом скрипте, для SS:FE такого не происходит. Хотя логика скриптов такая же и внедряется в аналогичные куски кода.

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

14 часа назад, SergBrNord сказал:

Гарик, а есть метод/методы отловить, что неправильно делает скрипт?

SerBrNord, есть конечно, но всё индивидуально.

Ты выяснил, из-за какого скрипта начинаются глюки/вылеты? -> Выложи этот скрипт. Посмотрим.

 

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

9 часов назад, Garik66 сказал:

SerBrNord, есть конечно, но всё индивидуально.

Ты выяснил, из-за какого скрипта начинаются глюки/вылеты? -> Выложи этот скрипт. Посмотрим.

 

Да банально. Берём тот же скрипт Лирва.

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

[ENABLE]

aobscanmodule(Base,SamHD_TSE.exe,39 86 * * * * 75 * 8B CE E8 * * * * 85 C0 75)
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  push ecx
  mov ecx,[esi+58]
  cmp [ecx],79616C50
  jne code
  mov [esi+00000488],#99     //Heath
  mov [esi+0000049C],#98     //Armor
  mov [esi+00000A10],#199    //shotsgun + db shotgun
  mov [esi+00000A20],#998    //tompson + minigan
  mov [esi+00000A30],#99     //rocketlauncher
  mov [esi+00000A40],#99     //grenadegun
  mov [esi+00000A50],#998    //flamethrower
  mov [esi+00000A60],#799    //lasergun
  mov [esi+00000A70],#59     //SBC
  mov [esi+00000A80],#99     //sniper rifle
  mov [esi+00000A90],#4      //bomb


code:
  pop ecx
  cmp [esi+00000498],eax
  jmp return

Base:
  jmp newmem
  nop
return:
registersymbol(Base)

[DISABLE]

Base:
  db 39 86 98 04 00 00

unregistersymbol(Base)
dealloc(newmem)

 

Собственно, какие глюки я пока выловил: падение при использовании рычага, падение при подбирании бонуса +100 к здоровью (выглядит как большое сердце), внезапно начинающееся дерганье камеры вверх-вниз, ну и отдельный случай был - падение при открытии статистики по уровню.

 

В SS:FE такой ерунды нет, хотя скрипты написаны на ту же функцию игры.

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

Повторяемость вылетов есть?

Например возьмём вылет:

37 минуты назад, SergBrNord сказал:

падение при подбирании бонуса +100 к здоровью

Если ты можешь повторить это вылет, то можно посмотреть, почему происходит вылет.

Например может быть вылет из-за сверки текущего здоровья с текущим здоровьем, шифрованным XORированием через адрес текущего здоровья, писал об этом раньше:

 

 Второй вариант вылета возможен из-за того что через наш фильтр:

  cmp [ecx],79616C50
  jne code

проскакивают и другие адреса.

План поиска причин вылета:

1. Перепишим скрипт, чтобы в нём ничего не изменялось:

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

{ Game   : SamHD_TSE.exe
  Version: 
  Date   : 2016-03-18
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(GodMod,SamHD_TSE.exe,39 86 98 04 00 00) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
registersymbol(GodMod)

newmem:
  mov ecx,[esi+58]
  cmp [ecx],79616C50
  jne code
                             
  cmp [esi+00000498],eax // Проверяем с какими адресами работает инструкция, для проверки фильтра.
  jmp return

code:
  cmp [esi+00000498],eax
  jmp return

GodMod:
  jmp newmem
  nop
return:

[DISABLE]
GodMod:
  db 39 86 98 04 00 00

unregistersymbol(GodMod)
dealloc(newmem)

 

2. Активируем скрипт переходим на инъекцию и проверяем с какими адресами работает инструкция (ПКМ по инструкции отмеченной в комментариях в скрипте. если не понятно - посмотри моё видео Стандартная ошибка в скриптах Cheat Engine всех новичков ) , например подбирая бонус здоровья, рычаг и т.д. Проверка - чётко ли работает фильтр, должен проскакивать только один адрес.

3. Переписываем скрипт, чтобы менять только значение здоровья:

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

{ Game   : SamHD_TSE.exe
  Version: 
  Date   : 2016-03-18
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(GodMod,SamHD_TSE.exe,39 86 98 04 00 00) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
registersymbol(GodMod)

newmem:
  mov ecx,[esi+58]
  cmp [ecx],79616C50
  jne code
                             
  mov [esi+00000488],#99 // Ставим брейкпоинт для выхода на инструкцию, при срабатывании которой происходит вылет.

code:
  cmp [esi+00000498],eax
  jmp return

GodMod:
  jmp newmem
  nop
return:

[DISABLE]
GodMod:
  db 39 86 98 04 00 00

unregistersymbol(GodMod)
dealloc(newmem)

 

4. На  инструкцию ставим брейкпоинт и делаем пошаговую (F7) отладку, засекаем на какой инструкции происходит вылет.

 

По поводу:

1 час назад, SergBrNord сказал:

внезапно начинающееся дерганье камеры вверх-вниз, ну и отдельный случай был - падение при открытии статистики по уровню.

Это могут быть баги не связанные с нашими скриптами, а с самим репаком или даже с самой игрой (поищи инфу в инете по поводу версии своей игры, там могут быть и эти баги, установи последний патч.) 

 

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

Гарик, в общем я попробовал сделать всё это. Игра вылетает до функций чтения и записи здоровья, которые мы используем. Т.е. - набежал на здоровье - и в момент разрушения объекта игра крашится. Брекпоинт не срабатывал на инструкции записи. На инструкцию чтения брекпоинт поставить сложновато - там постоянно чтение идёт.

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

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

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

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