Вопрос Как пропатчить SetRenderingEnable в модули particles.dll

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
23 Фев 2025
Сообщения
2
Реакции
0
Видел в форуме как делают отрисовку эффектов телепорта, патчили false на true в setrenderingenable(particle, boolean), я не владею C++, у меня Python использую ctypes, pymem, win32api и т.п Через ctypes получаю все права на управление памятью процесса через kernel32.OpenProcess. Думаю бан не словлю осталось только реализация его.
 
Видел в форуме как делают отрисовку эффектов телепорта, патчили false на true в setrenderingenable(particle, boolean), я не владею C++, у меня Python использую ctypes, pymem, win32api и т.п Через ctypes получаю все права на управление памятью процесса через kernel32.OpenProcess. Думаю бан не словлю осталось только реализация его.
1) OpenProcess детектится(все хендлы в системе можно через NtQuerySystemInformation посмотреть и определить какой из них на какой процесс открыт и с какими правами), это конечно не значит что детект происходит(важно понимать что вак детектит только то что хочет детектить и только тогда когда хочет, там зачастую половина функционала вырублена, это не значит что он не умеет детектить это просто вопрос желаний габена) и что мерой наказания будет именно бан(кроме бана есть другие вещи типа как траст фактор в кс и т.д., или бан может быть отложен на какой-то срок).
2) байтпатч .text тоже детектится(содержимое ридонли секций после резолва импортов и применения релокаций не должно никак меняться, т.е. содержимое оригинального файла на диске(после резолва импортов и применений релокаций) должно совпадать с содержимым секции в памяти). опять таки тоже вопрос захочет ли габен это детектить.
3) в чем вопрос то? открыл процесс прочитал память доты к себе в процесс сразу целиком всю секцию(ну или весь модуль)(чтобы по одному байту не читать как даун), нашел что надо(сигскан)(альтернативно можно просто по рва но сломается при некст апдейте), заменил где надо на что надо, записал эту замену в доту. и делается это собственно на любом языке одинаково(разве что естественно некоторые библиотеки могут предоставлять обертки на какието вещи но библиотеки это не язык).
 
1) Открываешь ida pro закидываешь из доты файл particles.dll
2) когда все загрузилось жмешь shift+f12 (фото 1)
3) ctrl+f и пишешь Error in child list of particle system %s [%p], parent: %p\n (фото 2)
4) 2 раза по нему видишь aErrorInChildLi наводишься на него и жмешь x
5) тут просто ок (фото 3)
6) Появляется окно фото 4
7) листаешь вверх до loc_180039FD2: фото 5
8) тут чуть чуть объяснений именно [rsi+0A64h] — это структура или поле, отвечающее за отрисовку партиклей. Если мы пропатчим функцию так, чтобы этот флаг всегда был включен то и партикли буду рисоваться всегда.
9) тут нам нужен уже для иды модуль signmaker
10) наводимся на byte и ctrl + alt + s выбираем ida signature получаем что то в виде Signature for 180039FD2: 80 A6 ? ? ? ? ? 41 0F B6 C4 11) Сигнатура, которую мы нашли (80 A6 ?? ?? ?? ?? ?? 41 0F B6 C4). Здесь: 80 A6 - это опкод для инструкции and с байтом 64 0A 00 00 - это смещение 0A64h 7F - это значение для операции and (7Fh) 41 0F B6 C4 - это следующая инструкция следовательно нам надо всегда устанавливать старший бит в 1 (true): Оригинал: 80 A6 64 0A 00 00 7F (and byte ptr [rsi+0A64h], 7Fh) Патч: 80 8E 64 0A 00 00 80 (or byte ptr [rsi+0A64h], 80h)


Сейчас там другие значения, но принцип тот же самый
HUINYA:
Expand Collapse Copy
import pymem
import pymem.process


def main():
    try:
        pm = pymem.Pymem('dota2.exe')
        particles = pymem.process.module_from_name(pm.process_handle, 'particles.dll')
        particles_module = pm.read_bytes(particles.lpBaseOfDll, particles.SizeOfImage)

        # Обновленная сигнатура (смещение изменилось)
        pattern = bytes([0x80, 0xA6, 0xA4, 0x09, 0x00, 0x00, 0x7F])

        # Поиск инструкции
        instruction_offset = particles_module.find(pattern)
        if instruction_offset == -1:
            print("Инструкция не найдена в particles.dll")
            return

        instruction_address = particles.lpBaseOfDll + instruction_offset
        print(f"Инструкция найдена по адресу: 0x{instruction_address:X}")

        # Обновленный патч
        patch_bytes = bytes([0x80, 0x8E, 0xA4, 0x09, 0x00, 0x00, 0x80])

        # Применяем патч
        pm.write_bytes(instruction_address, patch_bytes, len(patch_bytes))
        print("Патч успешно применен")

        # Верификация патча
        verification = pm.read_bytes(instruction_address, len(patch_bytes))
        if verification == patch_bytes:
            print("Верификация успешна - патч применен корректно")
        else:
            print("Ошибка верификации - патч мог не примениться корректно")

    except Exception as e:
        print(f"Ошибка: {e}")
    finally:
        try:
            pm.close_process()
        except:
            pass


if [B]name[/B] == '[B]main[/B]':
    main()

но скажу честно, как будто после нескольких каток с такими приколами начинают попадаться типы с софтом
 

Вложения

  • 1.png
    1.png
    144.2 KB · Просмотры: 30
  • 2.png
    2.png
    97 KB · Просмотры: 30
  • 3.png
    3.png
    9.6 KB · Просмотры: 19
  • 4.png
    4.png
    72.2 KB · Просмотры: 27
  • 5.png
    5.png
    73.1 KB · Просмотры: 21
Последнее редактирование:
1) Открываешь ida pro закидываешь из доты файл particles.dll
2) когда все загрузилось жмешь shift+f12 (фото 1)
3) ctrl+f и пишешь Error in child list of particle system %s [%p], parent: %p\n (фото 2)
4) 2 раза по нему видишь aErrorInChildLi наводишься на него и жмешь x
5) тут просто ок (фото 3)
6) Появляется окно фото 4
7) листаешь вверх до loc_180039FD2: фото 5
8) тут чуть чуть объяснений именно [rsi+0A64h] — это структура или поле, отвечающее за отрисовку партиклей. Если мы пропатчим функцию так, чтобы этот флаг всегда был включен то и партикли буду рисоваться всегда.
9) тут нам нужен уже для иды модуль signmaker
10) наводимся на byte и ctrl + alt + s выбираем ida signature получаем что то в виде Signature for 180039FD2: 80 A6 ? ? ? ? ? 41 0F B6 C4 11) Сигнатура, которую мы нашли (80 A6 ?? ?? ?? ?? ?? 41 0F B6 C4). Здесь: 80 A6 - это опкод для инструкции and с байтом 64 0A 00 00 - это смещение 0A64h 7F - это значение для операции and (7Fh) 41 0F B6 C4 - это следующая инструкция следовательно нам надо всегда устанавливать старший бит в 1 (true): Оригинал: 80 A6 64 0A 00 00 7F (and byte ptr [rsi+0A64h], 7Fh) Патч: 80 8E 64 0A 00 00 80 (or byte ptr [rsi+0A64h], 80h)


Сейчас там другие значения, но принцип тот же самый
HUINYA:
Expand Collapse Copy
import pymem
import pymem.process


def main():
    try:
        pm = pymem.Pymem('dota2.exe')
        particles = pymem.process.module_from_name(pm.process_handle, 'particles.dll')
        particles_module = pm.read_bytes(particles.lpBaseOfDll, particles.SizeOfImage)

        # Обновленная сигнатура (смещение изменилось)
        pattern = bytes([0x80, 0xA6, 0xA4, 0x09, 0x00, 0x00, 0x7F])

        # Поиск инструкции
        instruction_offset = particles_module.find(pattern)
        if instruction_offset == -1:
            print("Инструкция не найдена в particles.dll")
            return

        instruction_address = particles.lpBaseOfDll + instruction_offset
        print(f"Инструкция найдена по адресу: 0x{instruction_address:X}")

        # Обновленный патч
        patch_bytes = bytes([0x80, 0x8E, 0xA4, 0x09, 0x00, 0x00, 0x80])

        # Применяем патч
        pm.write_bytes(instruction_address, patch_bytes, len(patch_bytes))
        print("Патч успешно применен")

        # Верификация патча
        verification = pm.read_bytes(instruction_address, len(patch_bytes))
        if verification == patch_bytes:
            print("Верификация успешна - патч применен корректно")
        else:
            print("Ошибка верификации - патч мог не примениться корректно")

    except Exception as e:
        print(f"Ошибка: {e}")
    finally:
        try:
            pm.close_process()
        except:
            pass


if [B]name[/B] == '[B]main[/B]':
    main()

но скажу честно, как будто после нескольких каток с такими приколами начинают попадаться типы с софтом
Бля братан а что если я бедный и у меня нет Pro иды? Есть альтернатива Ghidra
Или есть пиратка? (Сомневаюсь)
 
Бля братан а что если я бедный и у меня нет Pro иды? Есть альтернатива Ghidra
Или есть пиратка? (Сомневаюсь)
ну а вообще просто код запусти этот, оказывается я с новыми сигнатурами дал
 
Назад
Сверху Снизу