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

[Rome: Total War - Barbarian Invasion] Затыка с fstp


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

Всем салют. Копаюсь я тут (ничего не меняется, да? +0) в Rome: Total War - Barbarian Invasion. Копаюсь с эти куском кода:

 

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

"RomeTW-BI.exe"+1817CB: 8B 45 8C              -  mov eax,[ebp-74]
"RomeTW-BI.exe"+1817CE: D9 80 C4 00 00 00     -  fld dword ptr [eax+000000C4]
"RomeTW-BI.exe"+1817D4: D9 5D EC              -  fstp dword ptr [ebp-14]
"RomeTW-BI.exe"+1817D7: 8B 45 F0              -  mov eax,[ebp-10]
"RomeTW-BI.exe"+1817DA: D9 45 EC              -  fld dword ptr [ebp-14]
// ---------- INJECTING HERE ----------
"RomeTW-BI.exe"+1817DD: D9 98 7C 02 00 00     -  fstp dword ptr [eax+0000027C]
// ---------- DONE INJECTING  ----------
"RomeTW-BI.exe"+1817E3: 0F B6 45 0C           -  movzx eax,byte ptr [ebp+0C]
"RomeTW-BI.exe"+1817E7: 85 C0                 -  test eax,eax
"RomeTW-BI.exe"+1817E9: 0F 84 DC 01 00 00     -  je RomeTW-BI.exe+1819CB

 

 

Известно, что данная инструкция работает с количеством очков хода члена фракции на глобальной карте. Это значение с плавающей точкой и оно равняется 80. И у меня не получается записать нужное мне значение.

Я пробовал так (не взлетело):

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

newmem:
	mov [eax+27C], (float)80
	fstp st(0)
	fld dword ptr [eax+27C]
code:
	fstp dword ptr [eax+0000027C]
	jmp return

 

 

Я пробовал этак (тоже не взлетело):

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

newmem:
	fstp dword ptr [eax+0000027C] //old
  	push [max_points]
  	pop [eax+27C]


max_points:
dd (float)80

 

 

Спасите кто-нибудь, а? Я не понимаю, что тут не так сделано. Моск плавится.

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

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

И у меня не получается записать нужное мне значение.

push (float)80 
fld dword ptr [esp] 
add esp,4 
code: 
fstp dword ptr [eax+0000027C]

или меткой сразу. 

fld dword ptr [xxxxxxx] 
code:
fstp dword ptr [eax+0000027C] 

xxxxxx: 
dd (float)80

 

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

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

Моск плавится.

Попробуй так:

сделать скрипт из этой инструкции:

"RomeTW-BI.exe"+1817CE: D9 80 C4 00 00 00     -  fld dword ptr [eax+000000C4]

типа так:

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

newmem:
	mov dword ptr [eax+000000C4], (float)80
	
code:
	fld dword ptr [eax+000000C4]
	jmp return

 

 

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

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

"RomeTW-BI.exe"+1817DA: D9 45 EC              -  fld dword ptr [ebp-14]

Или же можно перед своим кодом сделать выгрузку из стека

fstp dword ptr [eax+0000027C]

Но как сказал Garik66, лучше делать инъекцию на инструкцию выше твоей иньекции.

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

23 минуты назад, inaginary сказал:

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

@inaginary, думаю это не поможет.

Так как скрипты (оба варианта) у @SergBrNord на самом деле верны, но они не работает, так что есть подозрение, что есть в игровом коде где-то проверка. значений  [eax+000000C4] и [eax+0000027C].

 

ЗЫ: как видишь эти значения лежат в разных структурах mov eax,[ebp-74] и mov eax,[ebp-10]. Но без теста в игре сказать более ничего определенного не могу.

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

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

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

Первый скрипт нужно было бы так написать:

newmem:
	mov [eax+27C], (float)80
	fstp [Chistka_Steka]
	fld dword ptr [eax+27C]
code:
	fstp dword ptr [eax+0000027C]
	jmp return

Chistka_Steka:
dd 0

 

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

@Garik66 по моему чистку стека еще можно организовать командой emms, но она очищает весь стек fpu

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

Только что, inaginary сказал:

@Garik66 по моему чистку стека еще можно организовать командой emms

:D ну я не вдавался в такие подробности ассемблера. Я даже не знаю и пока ни разу не видел опкод emms.

Нам же просто нужно вытолкнуть значение из st(0) сдвинув стек, а потом вернуть его обратно загрузив в st(0) нужное значение.

Но это, повторюсь скорее всего не сработает, так как второй скрипт у ТС верен.

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

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

:D ну я не вдавался в такие подробности ассемблера. Я даже не знаю и пока ни разу не видел опкод emms.

Нам же просто нужно вытолкнуть значение из st(0) сдвинув стек, а потом вернуть его обратно загрузив в st(0) нужное значение.

Но это, повторюсь скорее всего не сработает, так как второй скрипт у ТС верен.

Ну это да, а по моему не обязательно сразу загружать значение во float, если использовать команду fild, она загрузит целое число как число float.
Странно что число ходов во float, быть может это значение какое нибудь для вывода на экран, или вроде того, а настоящее другое

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

@SergBrNord Почему бы тебе просто не попробовать занопить инструкцию которая отбавляет твои ходы, или сделать в твоём скрипте создание адреса который бы указывал на количество ходов, тогда ты бы мог включить свой скрипт и вынести это значение в таблицу по указателю от твоей метки, сделать это можно примерно так:
После того как ты сделал инъекцию сюда

"RomeTW-BI.exe"+1817DD: D9 98 7C 02 00 00     -  fstp dword ptr [eax+0000027C]

Сделать такой скрипт:

label(mymetka)
registersymbol(mymetka) //Регистрация метки

newmem:
mov [mymetka],eax 

code:
fstp dword ptr [eax+0000027C] 
jmp return


mymetka: //Задание метке размера
dd 0 


[DEALLOC] 
unregistersymbol(mymetka) //Снятие регистрации

Теперь если ты добавишь к себе в таблицу эту метку и сделаешь её pointer типа float со смещением 27C, у тебя в таблице всегда будет значение с ходами, это при условии если инструкция будет работать только с ходами чего то одного, если она работает с многими то надо сделать фильтр в зависимости от твоей цели, хочешь ты себе ходы сделать или еще что другое.
Возможно такой способ может быть альтернативой записи в скрипте

 

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

Вот такой ещё вариант:

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

"RomeTW-BI.exe"+1817CB: 8B 45 8C              -  mov eax,[ebp-74]
"RomeTW-BI.exe"+1817CE: D9 80 C4 00 00 00     -  fld dword ptr [eax+000000C4]
"RomeTW-BI.exe"+1817D4: D9 5D EC              -  fstp dword ptr [ebp-14]
"RomeTW-BI.exe"+1817D7: 8B 45 F0              -  mov eax,[ebp-10]
// ---------- INJECTING HERE ----------       -  jmp newmem
newmem:
mov [eax+0000027C],(loat)80
jmp returnhere
// ---------- DONE INJECTING  ----------
"RomeTW-BI.exe"+1817E3: 0F B6 45 0C           -  movzx eax,byte ptr [ebp+0C] //returnhere
"RomeTW-BI.exe"+1817E7: 85 C0                 -  test eax,eax
"RomeTW-BI.exe"+1817E9: 0F 84 DC 01 00 00     -  je RomeTW-BI.exe+1819CB

 

 

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

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

image.png

 

Скорее всего, по трем адресам записать одно и то же значение.

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

 

И прописать

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

"RomeTW-BI.exe"+1817CB: 8B 45 8C              -  mov eax,[ebp-74]
"RomeTW-BI.exe"+1817CE: D9 80 C4 00 00 00     -  fld dword ptr [eax+000000C4]
"RomeTW-BI.exe"+1817D4: D9 5D EC              -  fstp dword ptr [ebp-14]
"RomeTW-BI.exe"+1817D7: 8B 45 F0              -  mov eax,[ebp-10]
// ---------- INJECTING HERE ----------       -  jmp newmem
newmem:
//"RomeTW-BI.exe"+1817DD: D9 98 7C 02 00 00     -  fstp dword ptr [eax+0000027C]

fstp dword ptr [eax+0000027C]

mov [eax+c4], (float)80.0
mov [ebp-14], (float)80.0
mov [eax+27c], (float)80.0

jmp returnhere
// ---------- DONE INJECTING  ----------
"RomeTW-BI.exe"+1817E3: 0F B6 45 0C           -  movzx eax,byte ptr [ebp+0C] //returnhere
"RomeTW-BI.exe"+1817E7: 85 C0                 -  test eax,eax
"RomeTW-BI.exe"+1817E9: 0F 84 DC 01 00 00     -  je RomeTW-BI.exe+1819CB

 

 

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

46 минут назад, MasterGH сказал:

И прописать

Зачем так сложно, я же уже предложил вариант, где во все три адреса запишется нужное значение. ТЫК 

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

@LIRW оба варианта не взлетели.

@Garik66 первый вариант не взлетел.  Насчёт fstp st(0) - не согласен, инструкция вполне рабочая. Использовал в своих скриптах раньше. Второй тоже не взлетел, в общем.

@inaginary пробовал там всё нопить по порядку, нопы не срабатывали. Всё с запятыми, потому что количество ходов, отображается полоской в интерфейсе. И да, эти инструкции работают не только с игроком.

@Antonshka не взлетело.

@MasterGH  тоже не взлетело. Эх... =(

 

Не знаю, правильно ли идею понял, но сделал так:

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

label(return)

newmem:

fstp dword ptr [eax+0000027C]

mov [eax+c4], (float)80.0
mov [ebp-14], (float)80.0
mov [eax+27c], (float)80.0

jmp return

MOVEPOINTS2:
  jmp newmem
  nop
return:
registersymbol(MOVEPOINTS2)

 

 

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

@SergBrNord, рекомендации

 

1) что ожидается от скрипта? адрес рабочий (замораживается в памяти и работает)? Вообще никакой реакции, не вылетов? ;

2) попробуй выложить полный скрипт. С адресом, нопами, если они есть;

3) попробуй убедиться что инъекция проходит по нужном адресу;

4) попробуй проверить выполнение кода в пошаговой отладке перед активацией Cheat Engine;

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

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

правильно ли идею понял

Сделал не правильно:

mov [eax+c4], (float)80.0 // в оригинальном коде игры этот еах
mov [ebp-14], (float)80.0
mov [eax+27c], (float)80.0// и этот eax разные.

 

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

Результат моих предварительных изысканий (не доделан из заготовки фильтр):

 

Спойлер

{ Game   : RomeTW-BI.exe
  Version: 1.6.1
  Date   : 2018-02-19
  Author : SergBrNord, Garik66; BIG THX TO Recifense
}

[ENABLE]

aobscanmodule(GETmID,RomeTW-BI.exe,8B 80 04 05 00 00 89 45 F0 FF) // should be unique
aobscanmodule(MVPOINTS_1,RomeTW-BI.exe,D8 65 08 8B 45 8C) // should be unique
aobscanmodule(MVPOINTS_2,RomeTW-BI.exe,D9 98 7C 02 00 00 0F) // should be unique
aobscanmodule(MVPOINTS_3,RomeTW-BI.exe,D8 65 08 8B 45 FC D9 98 7C) // should be unique

alloc(newmem,$1000)
alloc(dump, 4096, RomeTW-BI.exe)

label(code_1)
label(code_2)
label(code_3)
label(code_3)

label(script_1)
label(script_2)
label(script_3)
label(script_4)

label(return_1)
label(return_2)
label(script_3)
label(script_4)

registersymbol(GETmID)
registersymbol(MVPOINTS_1)
registersymbol(MVPOINTS_2)
registersymbol(MVPOINTS_3)

newmem:

script_1:
  mov [PlayerID],eax
code_1:
  mov eax,[eax+00000504]
  jmp return_1

script_2:
  cmp eax, [PlayerID]
  jne code_2
  mov [ebp+08], 0
code_2:
  fsub dword ptr [ebp+08]
  mov eax,[ebp-74]
  jmp return_2

script_3:
  cmp eax, [PlayerID]
  jne code_3
  mov [eax+0000027C], (float)80
  fstp st(0)
  fld dword ptr [eax+0000027C]
code_3:
  fstp dword ptr [eax+0000027C]
  jmp return_3

script_4:
  cmp eax, [PlayerID]
  jne code_4
  mov [ebp+08], 0
code_4:
  fsub dword ptr [ebp+08]
  mov eax,[ebp-04]
  jmp return_4

PlayerID:
  dd dump

GETmID:
  jmp script_1
  nop
return_1:

MVPOINTS_1:
  jmp script_2
  nop
return_2:

MVPOINTS_2:
  jmp script_3
  nop
return_3:

MVPOINTS_3:
  jmp script_4
  nop
return_4:

[DISABLE]

GETmID:
  db 8B 80 04 05 00 00

MVPOINTS_1:
  db D8 65 08 8B 45 8C

MVPOINTS_2:
  db D9 98 7C 02 00 00

MVPOINTS_3:
  db D8 65 08 8B 45 FC

unregistersymbol(GETmID)
unregistersymbol(MVPOINTS_1)
unregistersymbol(MVPOINTS_2)
unregistersymbol(MVPOINTS_3)

dealloc(newmem)
dealloc(dump)

{
// ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+898105

"RomeTW-BI.exe"+8980DE: 89 4D EC           -  mov [ebp-14],ecx
"RomeTW-BI.exe"+8980E1: A1 58 18 92 02     -  mov eax,[RomeTW-BI.exe+2521858]
"RomeTW-BI.exe"+8980E6: 05 E4 02 00 00     -  add eax,000002E4
"RomeTW-BI.exe"+8980EB: 89 45 F8           -  mov [ebp-08],eax
"RomeTW-BI.exe"+8980EE: 8D 45 FC           -  lea eax,[ebp-04]
"RomeTW-BI.exe"+8980F1: 50                 -  push eax
"RomeTW-BI.exe"+8980F2: 8B 0D FC C0 8D 01  -  mov ecx,[RomeTW-BI.exe+14DC0FC]
"RomeTW-BI.exe"+8980F8: E8 96 43 ED FF     -  call RomeTW-BI.exe+76C493
"RomeTW-BI.exe"+8980FD: 8D 4D FC           -  lea ecx,[ebp-04]
"RomeTW-BI.exe"+898100: E8 0A 28 EC FF     -  call RomeTW-BI.exe+75A90F
// ---------- INJECTING HERE ----------
"RomeTW-BI.exe"+898105: 8B 80 04 05 00 00  -  mov eax,[eax+00000504]
// ---------- DONE INJECTING  ----------
"RomeTW-BI.exe"+89810B: 89 45 F0           -  mov [ebp-10],eax
"RomeTW-BI.exe"+89810E: FF 75 F0           -  push [ebp-10]
"RomeTW-BI.exe"+898111: 8B 45 EC           -  mov eax,[ebp-14]
"RomeTW-BI.exe"+898114: 8B 48 60           -  mov ecx,[eax+60]
"RomeTW-BI.exe"+898117: 8B 45 EC           -  mov eax,[ebp-14]
"RomeTW-BI.exe"+89811A: 8B 40 60           -  mov eax,[eax+60]
"RomeTW-BI.exe"+89811D: 8B 00              -  mov eax,[eax]
"RomeTW-BI.exe"+89811F: FF 90 70 01 00 00  -  call dword ptr [eax+00000170]
"RomeTW-BI.exe"+898125: 8B 45 F8           -  mov eax,[ebp-08]
"RomeTW-BI.exe"+898128: 8B 4D EC           -  mov ecx,[ebp-14]
}

{
// ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+181782

"RomeTW-BI.exe"+18175B: 8B EC                 -  mov ebp,esp
"RomeTW-BI.exe"+18175D: 81 EC 80 00 00 00     -  sub esp,00000080
"RomeTW-BI.exe"+181763: 89 4D 8C              -  mov [ebp-74],ecx
"RomeTW-BI.exe"+181766: 8B 45 8C              -  mov eax,[ebp-74]
"RomeTW-BI.exe"+181769: 0F B6 80 C1 00 00 00  -  movzx eax,byte ptr [eax+000000C1]
"RomeTW-BI.exe"+181770: 85 C0                 -  test eax,eax
"RomeTW-BI.exe"+181772: 74 05                 -  je RomeTW-BI.exe+181779
"RomeTW-BI.exe"+181774: E9 5A 02 00 00        -  jmp RomeTW-BI.exe+1819D3
"RomeTW-BI.exe"+181779: 8B 45 8C              -  mov eax,[ebp-74]
"RomeTW-BI.exe"+18177C: D9 80 C4 00 00 00     -  fld dword ptr [eax+000000C4]
// ---------- INJECTING HERE ----------
"RomeTW-BI.exe"+181782: D8 65 08              -  fsub dword ptr [ebp+08]
"RomeTW-BI.exe"+181785: 8B 45 8C              -  mov eax,[ebp-74]
// ---------- DONE INJECTING  ----------
"RomeTW-BI.exe"+181788: D9 98 C4 00 00 00     -  fstp dword ptr [eax+000000C4]
"RomeTW-BI.exe"+18178E: 8B 45 8C              -  mov eax,[ebp-74]
"RomeTW-BI.exe"+181791: D9 80 C4 00 00 00     -  fld dword ptr [eax+000000C4]
"RomeTW-BI.exe"+181797: D8 1D 9C 49 FE 00     -  fcomp dword ptr [RomeTW-BI.exe+BE499C]
"RomeTW-BI.exe"+18179D: DF E0                 -  fnstsw ax
"RomeTW-BI.exe"+18179F: 9E                    -  sahf
"RomeTW-BI.exe"+1817A0: 73 0B                 -  jae RomeTW-BI.exe+1817AD
"RomeTW-BI.exe"+1817A2: 8B 45 8C              -  mov eax,[ebp-74]
"RomeTW-BI.exe"+1817A5: D9 EE                 -  fldz
"RomeTW-BI.exe"+1817A7: D9 98 C4 00 00 00     -  fstp dword ptr [eax+000000C4]
}

{
// ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+1817DD

"RomeTW-BI.exe"+1817B9: 83 7D F4 00           -  cmp dword ptr [ebp-0C],00
"RomeTW-BI.exe"+1817BD: 74 24                 -  je RomeTW-BI.exe+1817E3
"RomeTW-BI.exe"+1817BF: 8B 45 8C              -  mov eax,[ebp-74]
"RomeTW-BI.exe"+1817C2: 8B 80 EC 00 00 00     -  mov eax,[eax+000000EC]
"RomeTW-BI.exe"+1817C8: 89 45 F0              -  mov [ebp-10],eax
"RomeTW-BI.exe"+1817CB: 8B 45 8C              -  mov eax,[ebp-74]
"RomeTW-BI.exe"+1817CE: D9 80 C4 00 00 00     -  fld dword ptr [eax+000000C4]
"RomeTW-BI.exe"+1817D4: D9 5D EC              -  fstp dword ptr [ebp-14]
"RomeTW-BI.exe"+1817D7: 8B 45 F0              -  mov eax,[ebp-10]
"RomeTW-BI.exe"+1817DA: D9 45 EC              -  fld dword ptr [ebp-14]
// ---------- INJECTING HERE ----------
"RomeTW-BI.exe"+1817DD: D9 98 7C 02 00 00     -  fstp dword ptr [eax+0000027C]
// ---------- DONE INJECTING  ----------
"RomeTW-BI.exe"+1817E3: 0F B6 45 0C           -  movzx eax,byte ptr [ebp+0C]
"RomeTW-BI.exe"+1817E7: 85 C0                 -  test eax,eax
"RomeTW-BI.exe"+1817E9: 0F 84 DC 01 00 00     -  je RomeTW-BI.exe+1819CB
"RomeTW-BI.exe"+1817EF: 8B 45 8C              -  mov eax,[ebp-74]
"RomeTW-BI.exe"+1817F2: 8B 80 E4 00 00 00     -  mov eax,[eax+000000E4]
"RomeTW-BI.exe"+1817F8: 89 45 E8              -  mov [ebp-18],eax
"RomeTW-BI.exe"+1817FB: 83 7D E8 00           -  cmp dword ptr [ebp-18],00
"RomeTW-BI.exe"+1817FF: 0F 84 C6 01 00 00     -  je RomeTW-BI.exe+1819CB
"RomeTW-BI.exe"+181805: 8B 45 8C              -  mov eax,[ebp-74]
"RomeTW-BI.exe"+181808: 8B 80 E4 00 00 00     -  mov eax,[eax+000000E4]
}

{
// ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+3C13C2

"RomeTW-BI.exe"+3C13A0: 55                    -  push ebp
"RomeTW-BI.exe"+3C13A1: 8B EC                 -  mov ebp,esp
"RomeTW-BI.exe"+3C13A3: 51                    -  push ecx
"RomeTW-BI.exe"+3C13A4: 89 4D FC              -  mov [ebp-04],ecx
"RomeTW-BI.exe"+3C13A7: 8B 45 FC              -  mov eax,[ebp-04]
"RomeTW-BI.exe"+3C13AA: D9 80 7C 02 00 00     -  fld dword ptr [eax+0000027C]
"RomeTW-BI.exe"+3C13B0: D8 65 08              -  fsub dword ptr [ebp+08]
"RomeTW-BI.exe"+3C13B3: D8 1D 6C 8C FF 00     -  fcomp dword ptr [RomeTW-BI.exe+BF8C6C]
"RomeTW-BI.exe"+3C13B9: 8B 45 FC              -  mov eax,[ebp-04]
"RomeTW-BI.exe"+3C13BC: D9 80 7C 02 00 00     -  fld dword ptr [eax+0000027C]
// ---------- INJECTING HERE ----------
"RomeTW-BI.exe"+3C13C2: D8 65 08              -  fsub dword ptr [ebp+08]
"RomeTW-BI.exe"+3C13C5: 8B 45 FC              -  mov eax,[ebp-04]
// ---------- DONE INJECTING  ----------
"RomeTW-BI.exe"+3C13C8: D9 98 7C 02 00 00     -  fstp dword ptr [eax+0000027C]
"RomeTW-BI.exe"+3C13CE: 8B 45 FC              -  mov eax,[ebp-04]
"RomeTW-BI.exe"+3C13D1: D9 80 7C 02 00 00     -  fld dword ptr [eax+0000027C]
"RomeTW-BI.exe"+3C13D7: D8 1D 9C 49 FE 00     -  fcomp dword ptr [RomeTW-BI.exe+BE499C]
"RomeTW-BI.exe"+3C13DD: DF E0                 -  fnstsw ax
"RomeTW-BI.exe"+3C13DF: 9E                    -  sahf
"RomeTW-BI.exe"+3C13E0: 73 0B                 -  jae RomeTW-BI.exe+3C13ED
"RomeTW-BI.exe"+3C13E2: 8B 45 FC              -  mov eax,[ebp-04]
"RomeTW-BI.exe"+3C13E5: D9 EE                 -  fldz
"RomeTW-BI.exe"+3C13E7: D9 98 7C 02 00 00     -  fstp dword ptr [eax+0000027C]
}

 

 

Как оказалось, для получения корректной работы скрипта для члена фракции, необходимо одновременно работать с инструкциями для специальных юнитов и армий (хоть скрипты для последних прекрасно работают по отдельности)

 

Вот версия, составленная по идеям Гаррика, но крашащая игру: =)

Спойлер

{ Game   : RomeTW-BI.exe
  Version: 1.6.1
  Date   : 2018-02-18
  Author : SergBrNord & Garik66
}

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

aobscanmodule(Gariktest,RomeTW-BI.exe,8B 80 04 05 00 00 89 45 F0 FF) // should be unique
aobscanmodule(INJECT,RomeTW-BI.exe,D9 81 C4 00 00 00 D9) // should be unique
aobscanmodule(INJECT2,RomeTW-BI.exe,00 D9 80 7C 02 00 00 D9 5D F0 8B 45 0C D9 45 F0 D9 18 EB A9 C9) // should be unique

alloc(newmem,$1000)
alloc(dump, 4096, RomeTW-BI.exe)

label(cheat1)
label(cheat2)
label(cheat3)

label(code)
label(code2)
label(code3)

label(return)
label(return2)
label(return3)

registersymbol(Gariktest)
registersymbol(INJECT)
registersymbol(INJECT2)

newmem:

cheat1:
  mov [PlayerID],eax

code:
  mov eax,[eax+00000504]
  jmp return


cheat2:
  cmp eax, [PlayerID]
  jne code2

  push dword ptr [eax+150]
  pop dword ptr [ecx+C4]

code2:
  fld dword ptr [ecx+000000C4]
  jmp return2

cheat3:
  cmp eax, [PlayerID]
  jne code3
  nop
  nop
  jmp RomeTW-BI.exe+ACEDF
  leave
  jmp return3

code3:
  fstp dword ptr [eax]
  jmp RomeTW-BI.exe+ACEDF
  leave
  jmp return3


PlayerID:
dd dump

Gariktest:
  jmp cheat1
  nop
return:

INJECT:
  jmp cheat2
  nop
return2:

INJECT2+10:
  jmp cheat3
return3:

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
Gariktest:
  db 8B 80 04 05 00 00

INJECT:
  db D9 81 C4 00 00 00

INJECT2+10:
  db D9 18 EB A9 C9

unregistersymbol(Gariktest)
unregistersymbol(INJECT)
unregistersymbol(INJECT2)

dealloc(newmem)
dealloc(dump)

{
// ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+898105

"RomeTW-BI.exe"+8980DE: 89 4D EC           -  mov [ebp-14],ecx
"RomeTW-BI.exe"+8980E1: A1 58 18 92 02     -  mov eax,[RomeTW-BI.exe+2521858]
"RomeTW-BI.exe"+8980E6: 05 E4 02 00 00     -  add eax,000002E4
"RomeTW-BI.exe"+8980EB: 89 45 F8           -  mov [ebp-08],eax
"RomeTW-BI.exe"+8980EE: 8D 45 FC           -  lea eax,[ebp-04]
"RomeTW-BI.exe"+8980F1: 50                 -  push eax
"RomeTW-BI.exe"+8980F2: 8B 0D FC C0 8D 01  -  mov ecx,[RomeTW-BI.exe+14DC0FC]
"RomeTW-BI.exe"+8980F8: E8 96 43 ED FF     -  call RomeTW-BI.exe+76C493
"RomeTW-BI.exe"+8980FD: 8D 4D FC           -  lea ecx,[ebp-04]
"RomeTW-BI.exe"+898100: E8 0A 28 EC FF     -  call RomeTW-BI.exe+75A90F
// ---------- INJECTING HERE ----------
"RomeTW-BI.exe"+898105: 8B 80 04 05 00 00  -  mov eax,[eax+00000504]
// ---------- DONE INJECTING  ----------
"RomeTW-BI.exe"+89810B: 89 45 F0           -  mov [ebp-10],eax
"RomeTW-BI.exe"+89810E: FF 75 F0           -  push [ebp-10]
"RomeTW-BI.exe"+898111: 8B 45 EC           -  mov eax,[ebp-14]
"RomeTW-BI.exe"+898114: 8B 48 60           -  mov ecx,[eax+60]
"RomeTW-BI.exe"+898117: 8B 45 EC           -  mov eax,[ebp-14]
"RomeTW-BI.exe"+89811A: 8B 40 60           -  mov eax,[eax+60]
"RomeTW-BI.exe"+89811D: 8B 00              -  mov eax,[eax]
"RomeTW-BI.exe"+89811F: FF 90 70 01 00 00  -  call dword ptr [eax+00000170]
"RomeTW-BI.exe"+898125: 8B 45 F8           -  mov eax,[ebp-08]
"RomeTW-BI.exe"+898128: 8B 4D EC           -  mov ecx,[ebp-14]
}

{
// ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+18CE5D

"RomeTW-BI.exe"+18CE2C: 0F B6 C0           -  movzx eax,al
"RomeTW-BI.exe"+18CE2F: 85 C0              -  test eax,eax
"RomeTW-BI.exe"+18CE31: 74 1E              -  je RomeTW-BI.exe+18CE51
"RomeTW-BI.exe"+18CE33: 8B 85 78 FF FF FF  -  mov eax,[ebp-00000088]
"RomeTW-BI.exe"+18CE39: D9 80 44 01 00 00  -  fld dword ptr [eax+00000144]
"RomeTW-BI.exe"+18CE3F: D8 0D 98 4B FE 00  -  fmul dword ptr [RomeTW-BI.exe+BE4B98]
"RomeTW-BI.exe"+18CE45: 8B 85 78 FF FF FF  -  mov eax,[ebp-00000088]
"RomeTW-BI.exe"+18CE4B: D9 98 44 01 00 00  -  fstp dword ptr [eax+00000144]
"RomeTW-BI.exe"+18CE51: 8B 85 78 FF FF FF  -  mov eax,[ebp-00000088]
"RomeTW-BI.exe"+18CE57: 8B 8D 78 FF FF FF  -  mov ecx,[ebp-00000088]
// ---------- INJECTING HERE ----------
"RomeTW-BI.exe"+18CE5D: D9 81 C4 00 00 00  -  fld dword ptr [ecx+000000C4]
// ---------- DONE INJECTING  ----------
"RomeTW-BI.exe"+18CE63: D9 98 4C 01 00 00  -  fstp dword ptr [eax+0000014C]
"RomeTW-BI.exe"+18CE69: 8B 85 78 FF FF FF  -  mov eax,[ebp-00000088]
"RomeTW-BI.exe"+18CE6F: 8B 80 E4 00 00 00  -  mov eax,[eax+000000E4]
"RomeTW-BI.exe"+18CE75: 89 45 FC           -  mov [ebp-04],eax
"RomeTW-BI.exe"+18CE78: 83 7D FC 00        -  cmp dword ptr [ebp-04],00
"RomeTW-BI.exe"+18CE7C: 0F 84 DB 00 00 00  -  je RomeTW-BI.exe+18CF5D
"RomeTW-BI.exe"+18CE82: A1 B4 17 92 02     -  mov eax,[RomeTW-BI.exe+25217B4]
"RomeTW-BI.exe"+18CE87: 89 45 C0           -  mov [ebp-40],eax
"RomeTW-BI.exe"+18CE8A: 8B 85 78 FF FF FF  -  mov eax,[ebp-00000088]
"RomeTW-BI.exe"+18CE90: 05 4C 01 00 00     -  add eax,0000014C
}

{
// ORIGINAL CODE - INJECTION POINT: "RomeTW-BI.exe"+ACF32

"RomeTW-BI.exe"+ACF13: DF E0              -  fnstsw ax
"RomeTW-BI.exe"+ACF15: 9E                 -  sahf
"RomeTW-BI.exe"+ACF16: 73 1C              -  jae RomeTW-BI.exe+ACF34
"RomeTW-BI.exe"+ACF18: FF 75 FC           -  push [ebp-04]
"RomeTW-BI.exe"+ACF1B: 8B 4D 08           -  mov ecx,[ebp+08]
"RomeTW-BI.exe"+ACF1E: E8 60 53 27 00     -  call RomeTW-BI.exe+322283
"RomeTW-BI.exe"+ACF23: D9 80 7C 02 00 00  -  fld dword ptr [eax+0000027C]
"RomeTW-BI.exe"+ACF29: D9 5D F0           -  fstp dword ptr [ebp-10]
"RomeTW-BI.exe"+ACF2C: 8B 45 0C           -  mov eax,[ebp+0C]
"RomeTW-BI.exe"+ACF2F: D9 45 F0           -  fld dword ptr [ebp-10]
// ---------- INJECTING HERE ----------
"RomeTW-BI.exe"+ACF32: D9 18              -  fstp dword ptr [eax]
"RomeTW-BI.exe"+ACF34: EB A9              -  jmp RomeTW-BI.exe+ACEDF
"RomeTW-BI.exe"+ACF36: C9                 -  leave
// ---------- DONE INJECTING  ----------
"RomeTW-BI.exe"+ACF37: C2 08 00           -  ret 0008
"RomeTW-BI.exe"+ACF3A: 55                 -  push ebp
"RomeTW-BI.exe"+ACF3B: 8B EC              -  mov ebp,esp
"RomeTW-BI.exe"+ACF3D: 83 EC 18           -  sub esp,18
"RomeTW-BI.exe"+ACF40: 89 4D EC           -  mov [ebp-14],ecx
"RomeTW-BI.exe"+ACF43: 83 65 E8 00        -  and dword ptr [ebp-18],00
"RomeTW-BI.exe"+ACF47: 83 65 FC 00        -  and dword ptr [ebp-04],00
"RomeTW-BI.exe"+ACF4B: EB 07              -  jmp RomeTW-BI.exe+ACF54
"RomeTW-BI.exe"+ACF4D: 8B 45 FC           -  mov eax,[ebp-04]
"RomeTW-BI.exe"+ACF50: 40                 -  inc eax
}

 

 

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

  • 2 недели спустя...
×
×
  • Создать...

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

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