Добро пожаловать! Игровой форум WLUX.NET - Игры, Читы, Скрипты, Статьи, Софт, Курсы.

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

Добро пожаловать гость!

Приветствуем вас на нашем форуме! Мы очень рады вас видеть и с большим удовольствием поделимся всей информацией нашего форума!

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

Система наград, ежедневное пополнения тем!

Общайся, получай награды.

Статьи, гайды, софт

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

FAQ по форуму

Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

  • Добро пожаловать на сайт - wlux.net!

    FAQ по форуму

    1. Все сообщения до группы местный проходят модерацию от 1 минуты до 24 часа

    2. Сообщения учитываються в следующих разделах: Читать

    3.Что-бы скачать вложение нужно 2 сообщения.

    4.Личные переписки работают только с Администрацией форума

    5. Запрещено: Просить скрытый текст , спам, реклама, скам, ддос, кардинг и другая чернуха, нарушать любые законы РФ/СНГ = бан аккаунта

    6. Внимание! Мы не удаляем аккаунты с форума! Будьте внимательны ДО регистрации! Как удалить аккаунт на форуме?!

    5.Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

python Исходник Гайд Гайд по External ConVars в Dota 2 - Как искать их изменять значения

wlux.net Оффлайн

wlux.net

Где волчьи уши, там волчьи зубы.
Команда форума
LV
7
 
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
1660613591923.png

Дальше смотрим что читает значение (7FFC60562990 + 0x58, 0x58 оффсет на котором лежит значение квара) нашего конвара (F5 в CE)
1660614315916.png

Код:
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())
 

Поиск по форуму

shape1
shape2
shape3
shape4
shape7
shape8
Верх