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

Новичок
Статус
Оффлайн
Регистрация
23 Фев 2025
Сообщения
1
Реакции[?]
0
Поинты[?]
0
Видел в форуме как делают отрисовку эффектов телепорта, патчили false на true в setrenderingenable(particle, boolean), я не владею C++, у меня Python использую ctypes, pymem, win32api и т.п Через ctypes получаю все права на управление памятью процесса через kernel32.OpenProcess. Думаю бан не словлю осталось только реализация его.
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
851
Реакции[?]
335
Поинты[?]
67K
Видел в форуме как делают отрисовку эффектов телепорта, патчили false на true в setrenderingenable(particle, boolean), я не владею C++, у меня Python использую ctypes, pymem, win32api и т.п Через ctypes получаю все права на управление памятью процесса через kernel32.OpenProcess. Думаю бан не словлю осталось только реализация его.
1) OpenProcess детектится(все хендлы в системе можно через NtQuerySystemInformation посмотреть и определить какой из них на какой процесс открыт и с какими правами), это конечно не значит что детект происходит(важно понимать что вак детектит только то что хочет детектить и только тогда когда хочет, там зачастую половина функционала вырублена, это не значит что он не умеет детектить это просто вопрос желаний габена) и что мерой наказания будет именно бан(кроме бана есть другие вещи типа как траст фактор в кс и т.д., или бан может быть отложен на какой-то срок).
2) байтпатч .text тоже детектится(содержимое ридонли секций после резолва импортов и применения релокаций не должно никак меняться, т.е. содержимое оригинального файла на диске(после резолва импортов и применений релокаций) должно совпадать с содержимым секции в памяти). опять таки тоже вопрос захочет ли габен это детектить.
3) в чем вопрос то? открыл процесс прочитал память доты к себе в процесс сразу целиком всю секцию(ну или весь модуль)(чтобы по одному байту не читать как даун), нашел что надо(сигскан)(альтернативно можно просто по рва но сломается при некст апдейте), заменил где надо на что надо, записал эту замену в доту. и делается это собственно на любом языке одинаково(разве что естественно некоторые библиотеки могут предоставлять обертки на какието вещи но библиотеки это не язык).
 
Начинающий
Статус
Оффлайн
Регистрация
19 Фев 2022
Сообщения
16
Реакции[?]
1
Поинты[?]
1K
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:
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()
но скажу честно, как будто после нескольких каток с такими приколами начинают попадаться типы с софтом
 

Вложения

  • 144.2 KB Просмотры: 5
  • 97 KB Просмотры: 5
  • 9.6 KB Просмотры: 3
  • 72.2 KB Просмотры: 4
  • 73.1 KB Просмотры: 4
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
12 Мар 2025
Сообщения
9
Реакции[?]
0
Поинты[?]
0
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:
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
Или есть пиратка? (Сомневаюсь)
 
Начинающий
Статус
Оффлайн
Регистрация
19 Фев 2022
Сообщения
16
Реакции[?]
1
Поинты[?]
1K
Начинающий
Статус
Оффлайн
Регистрация
19 Фев 2022
Сообщения
16
Реакции[?]
1
Поинты[?]
1K
Бля братан а что если я бедный и у меня нет Pro иды? Есть альтернатива Ghidra
Или есть пиратка? (Сомневаюсь)
ну а вообще просто код запусти этот, оказывается я с новыми сигнатурами дал
 
Сверху Снизу