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

Запись значения одного адреса в другой с разными типами данных

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

Вопрос простой но не знаю как это сделать. Под спойлером скрипт. с комментариями. Задача обозначена в скрипте. Игра Saints Row 2.v 1.2 от Буки. Мне это надо не только для этой игры, но и для шаблона если ещё где встретится.

Спойлер

{ Game   : SR2_pc.exe
  Version: 
  Date   : 2021-05-02
  Author : Pitronic

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(_good_mode_,SR2_pc.exe,D8 * * * * * * * F6 * * 75 * B0 * * 83 * * * * * * 0F 9D)
alloc(newmem,$1000)

label(code)
label(return)

newmem:
// [edx+00001120] здесь максимальное значение здоровья гг, но тип 4 байта.

code:
fcomp dword ptr [edx+00001124] //  здесь здорове гг, но тип float.
jmp return

// задача, записать максимальное здоровье гг, в фактический адрес здоровья гг.

_good_mode_:
  jmp newmem
db 90
return:
registersymbol(_good_mode_)

[DISABLE]

_good_mode_:
fcomp dword ptr [edx+00001124]

unregistersymbol(_good_mode_)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: SR2_pc.exe.text+584661

SR2_pc.exe.text+584647: C1 E1 04              - shl ecx,04
SR2_pc.exe.text+58464A: 8B 89 64 9C 14 02     - mov ecx,[ecx+SR2_pc.exe+1D49C64]
SR2_pc.exe.text+584650: 85 C9                 - test ecx,ecx
SR2_pc.exe.text+584652: 74 05                 - je SR2_pc.exe.text+584659
SR2_pc.exe.text+584654: 39 41 44              - cmp [ecx+44],eax
SR2_pc.exe.text+584657: 74 02                 - je SR2_pc.exe.text+58465B
SR2_pc.exe.text+584659: 33 C9                 - xor ecx,ecx
SR2_pc.exe.text+58465B: 3B CA                 - cmp ecx,edx
SR2_pc.exe.text+58465D: 75 0F                 - jne SR2_pc.exe.text+58466E
SR2_pc.exe.text+58465F: D9 EE                 - fldz 
// ---------- INJECTING HERE ----------
SR2_pc.exe.text+584661: D8 9A 24 11 00 00     - fcomp dword ptr [edx+00001124]
// ---------- DONE INJECTING  ----------
SR2_pc.exe.text+584667: DF E0                 - fnstsw ax
SR2_pc.exe.text+584669: F6 C4 01              - test ah,01
SR2_pc.exe.text+58466C: 75 03                 - jne SR2_pc.exe.text+584671
SR2_pc.exe.text+58466E: B0 01                 - mov al,01
SR2_pc.exe.text+584670: C3                    - ret 
SR2_pc.exe.text+584671: 83 BA 8C 0F 00 00 00  - cmp dword ptr [edx+00000F8C],00
SR2_pc.exe.text+584678: 0F 9D C0              - setge al
SR2_pc.exe.text+58467B: C3                    - ret 
SR2_pc.exe.text+58467C: CC                    - int 3 
SR2_pc.exe.text+58467D: CC                    - int 3 
}

 

 

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


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

// задача, записать максимальное здоровье гг, в фактический адрес здоровья гг.

Спойлер

newmem:
fild [edx+00001120] загружаем максимальное значение здоровья гг 4 байта одновременно перевожим во float
Fstp [edx+00001124] выгружаем в нужный адрес. одновремеено выталкивая значения (т.е. в верхушке стека 0 (смотри fldz)

code:
fcomp dword ptr [edx+00001124] //  здесь здорове гг, но тип float.
jmp return

 

 

  • Понравилось 1

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


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

это все есть на форуме

 

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


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

одновременно перевожим во float

Спасибо попробую

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


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

это все есть на форуме

Может и есть ноя не видел, не где.

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


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

Может и есть ноя не видел, не где.

Первая попавшая 

 

 

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


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

Не работает

Спойлер

image.png

На скриншоте видно что это максимальное значение в адресе proverka в 4 байтах показывает правилно а во float не правильно. вот мой скрипт

Спойлер

{ Game   : SR2_pc.exe
  Version: 
  Date   : 2021-05-02
  Author : Pitronic

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(_heallth_deloper_gg_,SR2_pc.exe,D8 9A 24 11 00 00 DF E0 F6 C4 01 75 03) // should be unique
alloc(newmem,$1000)

label(code)
label(return)
label(proverka)

registersymbol(_heallth_deloper_gg_)
registersymbol(proverka)

newmem:
//cmp [edx+111C],#0
//jne code
fld [edx+00001120]
fstp [proverka]

code:
fcomp dword ptr [edx+00001124]
jmp return

proverka:
dd 0

_heallth_deloper_gg_:
  jmp newmem
  nop
return:

[DISABLE]

_heallth_deloper_gg_:
  db D8 9A 24 11 00 00

unregistersymbol(_heallth_deloper_gg_)
unregistersymbol(proverka)

dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: SR2_pc.exe.text+584661

SR2_pc.exe.text+584647: C1 E1 04              - shl ecx,04
SR2_pc.exe.text+58464A: 8B 89 64 9C 14 02     - mov ecx,[ecx+SR2_pc.exe+1D49C64]
SR2_pc.exe.text+584650: 85 C9                 - test ecx,ecx
SR2_pc.exe.text+584652: 74 05                 - je SR2_pc.exe.text+584659
SR2_pc.exe.text+584654: 39 41 44              - cmp [ecx+44],eax
SR2_pc.exe.text+584657: 74 02                 - je SR2_pc.exe.text+58465B
SR2_pc.exe.text+584659: 33 C9                 - xor ecx,ecx
SR2_pc.exe.text+58465B: 3B CA                 - cmp ecx,edx
SR2_pc.exe.text+58465D: 75 0F                 - jne SR2_pc.exe.text+58466E
SR2_pc.exe.text+58465F: D9 EE                 - fldz 
// ---------- INJECTING HERE ----------
SR2_pc.exe.text+584661: D8 9A 24 11 00 00     - fcomp dword ptr [edx+00001124]
// ---------- DONE INJECTING  ----------
SR2_pc.exe.text+584667: DF E0                 - fnstsw ax
SR2_pc.exe.text+584669: F6 C4 01              - test ah,01
SR2_pc.exe.text+58466C: 75 03                 - jne SR2_pc.exe.text+584671
SR2_pc.exe.text+58466E: B0 01                 - mov al,01
SR2_pc.exe.text+584670: C3                    - ret 
SR2_pc.exe.text+584671: 83 BA 8C 0F 00 00 00  - cmp dword ptr [edx+00000F8C],00
SR2_pc.exe.text+584678: 0F 9D C0              - setge al
SR2_pc.exe.text+58467B: C3                    - ret 
SR2_pc.exe.text+58467C: CC                    - int 3 
SR2_pc.exe.text+58467D: CC                    - int 3 
}

 

 

Изменено пользователем Pitronic
исправление грам ошибок

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


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

Не работает

а повнимательнее
 

 

4 минуты назад, Pitronic сказал:

fld [edx+00001120]

 

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

fild [edx+00001120]

 

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


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

fild [edx+00001120]

а понял филд а не флд

Работает!

Тему можно закрыть.

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


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

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

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

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