- 20.06.2022
- 23 849
- 218
- 36
- Награды
- 10
- Пол
- Муж.
Репутация:
- Автор темы
- Администратор
- Модератор
- Команда форума
- #1
Для начала нам нужно найти хреф на конвар (я делаю это все в x64dbg)
1. Нажимаем ctrl+g и пишем client.entry
2. Пкм по тому что нашли (Search for > Current module > String references)
3. Ждем пока загрузит хрефы и вписываем dota_use_particle_fow (конвар который хотим менять через наш код, можно и любой другой)
4. C хрефа на название квара ты находишь функцию которая вызывает конструктор, в rcx прямо перед вызовом самого конструктора будет засунут квар ибо конструктор это __thiscall
Дальше смотрим что читает значение (7FFC60562990 + 0x58, 0x58 оффсет на котором лежит значение квара) нашего конвара (F5 в CE)
Бинго, осталось сделать сигу на 7FFC605629C8 (48 8B ? ? ? ? ? 83 78 58 ? 48 8B ? ? ? ? ? 0F 95)
Теперь в коде нам нужно засигсканить наши данные, найти адрес и перезаписать
В питоне уже есть готовый модуль для работы с памятью в винде (pymem), и не поверите, там даже есть готовый патерн сканер, вау
Я же написал небольшую обертку над pymem (унаследовал класс и дописал свои функи)
Осталось самое легкое - написать код)
Фулл код:
1. Нажимаем ctrl+g и пишем client.entry
2. Пкм по тому что нашли (Search for > Current module > String references)
3. Ждем пока загрузит хрефы и вписываем dota_use_particle_fow (конвар который хотим менять через наш код, можно и любой другой)
4. C хрефа на название квара ты находишь функцию которая вызывает конструктор, в rcx прямо перед вызовом самого конструктора будет засунут квар ибо конструктор это __thiscall
Дальше смотрим что читает значение (7FFC60562990 + 0x58, 0x58 оффсет на котором лежит значение квара) нашего конвара (F5 в CE)
Код:
7FFC5DA19514 - and rbp,-40
7FFC5DA19518 - mov rax,[7FFC605629C8] <<< Указатель на квар
7FFC5DA1951F - cmp dword ptr [rax+58],00
7FFC5DA19523 - mov rax,[7FFC60562B08]
7FFC5DA1952A - setne byte ptr [7FFC6074C718]
Бинго, осталось сделать сигу на 7FFC605629C8 (48 8B ? ? ? ? ? 83 78 58 ? 48 8B ? ? ? ? ? 0F 95)
Теперь в коде нам нужно засигсканить наши данные, найти адрес и перезаписать
В питоне уже есть готовый модуль для работы с памятью в винде (pymem), и не поверите, там даже есть готовый патерн сканер, вау
Я же написал небольшую обертку над pymem (унаследовал класс и дописал свои функи)
Python:
class QwemeMemory(pymem.Pymem):
def getAbsAddr(self, ptr: int, offset: int, size: int) -> int:
return ptr + self.read_int(ptr + offset) + size
def sigScan(self, module_name, pattern) -> int:
module = pymem.process.module_from_name(self.process_handle, module_name)
pattern_bytes_str = ""
for byte in pattern.split(" "):
if byte == "?":
pattern_bytes_str += "."
else:
pattern_bytes_str += "\\x" + byte
pattern_bytes = bytes(pattern_bytes_str, "utf-8")
value = pymem.pattern.pattern_scan_module(self.process_handle, module, pattern_bytes)
if value is None:
value = 0
return value
Осталось самое легкое - написать код)
Python:
def main() -> int:
dota = QwemeMemory("dota2.exe")
dota_use_particle_fow_ptr = dota.sigScan("client.dll", "48 8B ? ? ? ? ? 83 78 58 ? 48 8B ? ? ? ? ? 0F 95")
dota_use_particle_fow_addr = dota.getAbsAddr(dota_use_particle_fow_ptr, 3, 7)
dota_use_particle_fow_value = dota.read_ulonglong(dota_use_particle_fow_addr) + 0x58 # value of convar on 0x58
dota.write_int(dota_use_particle_fow_value, 0) # equal dota_use_particle_fow 0
return 0
Фулл код:
Python:
import pymem
import pymem.process
import pymem.pattern
class QwemeMemory(pymem.Pymem):
def getAbsAddr(self, ptr: int, offset: int, size: int) -> int:
return ptr + self.read_int(ptr + offset) + size
def sigScan(self, module_name, pattern) -> int:
module = pymem.process.module_from_name(self.process_handle, module_name)
pattern_bytes_str = ""
for byte in pattern.split(" "):
if byte == "?":
pattern_bytes_str += "."
else:
pattern_bytes_str += "\\x" + byte
pattern_bytes = bytes(pattern_bytes_str, "utf-8")
value = pymem.pattern.pattern_scan_module(self.process_handle, module, pattern_bytes)
if value is None:
value = 0
return value
def main() -> int:
dota = QwemeMemory("dota2.exe")
dota_use_particle_fow_ptr = dota.sigScan("client.dll", "48 8B ? ? ? ? ? 83 78 58 ? 48 8B ? ? ? ? ? 0F 95")
dota_use_particle_fow_addr = dota.getAbsAddr(dota_use_particle_fow_ptr, 3, 7)
dota_use_particle_fow_value = dota.read_ulonglong(dota_use_particle_fow_addr) + 0x58 # value of convar on 0x58
dota.write_int(dota_use_particle_fow_value, 0) # equal dota_use_particle_fow 0
return 0
if __name__ == "__main__":
exit(main())
Последние темы в этом разделе:
- [Udemy] Paul Chin - Гейм Хакинг: Основы взлома игр с Cheat Engine (2021)
- [Infinite Skills] Реверс-инжиниринг и разработка эксплойтов. Часть 1
- Скрипт Лоадер [Key,UID,Auth - System]
- Скрипт Hwid Checker + анимации + ключ к Hwid + сброс Hwid
- Скрипт Hwid Checker + ключ привязка к Hwid + отправка в телеграм
- Скрипт Hwid Checker
- Приватный Курс по реверс-инжирингу - Курс от colby57
- Курс по реверс-инжирингу - Создание читов для игр
- Как создать chams в Unity
- Как в EFT получить информацию о игроке (K/D, LVL, etc...)