Исходник Разблокировка sv_cheats на путоне

Начинающий
Статус
Оффлайн
Регистрация
26 Янв 2022
Сообщения
70
Реакции[?]
7
Поинты[?]
0
Пожалуйста, авторизуйтесь для просмотра ссылки.
- сурс
там же найдете exe, но через exe иногда не работает бинд, хз почему, у друга так

Пожалуйста, авторизуйтесь для просмотра ссылки.


Как юзать
Качаете код в зип с гитхаба
Запускаете xdota.py, но лучше конечно через exe чтобы не ебатся с путоном
Если дохуя ошибок, установите либы которые сверху подключены (pip install <pkg-name>)
Дальше регаем паблик
Загрузились игру и жмем кнопку консоли (по дефу "\")
Нажимаем ctrl+p когда курсор находится в инпуте консоли (куда текст вводится)
все, теперь вы видите тп врагов их спелы (в тумане войны) и ваша камера на орбите земли
если вы хотите поменять эти настройки или добавить свои откройте с помощью блокнотика patch.jsonc там все закомментировано разберетесь

плюс в консоли (аппы) вы увидите
1650384405168.png
Дефолтные настройки
1650384580623.png

Скриншот (лобак стокгольм читы офнуты на сервере)
1650384459157.png
dota_range_display 1950 фишка для пака чтобы видеть куда орба долетит на самом деле
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
RVA не юзай(Relative Virtual Address, оффсет от базы модуля)
cv = self.mem.read_int(self.engine + 0x4EC5F8)
юзай сигу лучше, рва почти гарантированно сломается после апдейта, а сига чуть дольше проживёт.
 
Начинающий
Статус
Оффлайн
Регистрация
26 Янв 2022
Сообщения
70
Реакции[?]
7
Поинты[?]
0
RVA не юзай(Relative Virtual Address, оффсет от базы модуля)
cv = self.mem.read_int(self.engine + 0x4EC5F8)
юзай сигу лучше, рва почти гарантированно сломается после апдейта, а сига чуть дольше проживёт.
спасибо, учту в следующий раз, я думаю после обновы любой чел сможет через чит енжин найти новый адрес, но да было бы удобнее, чтобы оно само работало
 
Начинающий
Статус
Оффлайн
Регистрация
26 Янв 2022
Сообщения
70
Реакции[?]
7
Поинты[?]
0
RVA не юзай(Relative Virtual Address, оффсет от базы модуля)
cv = self.mem.read_int(self.engine + 0x4EC5F8)
юзай сигу лучше, рва почти гарантированно сломается после апдейта, а сига чуть дольше проживёт.
сейчас вышел микроапдейт рва не поменялся мб на глобал патче типо 7.32 поменяют
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
сейчас вышел микроапдейт рва не поменялся мб на глобал патче типо 7.32 поменяют
я имел ввиду апдейт дллки. этот микропатч(64.6 мб) не менял engine2.dll, поэтому ничего и не сломалось. движок обычно раз в несколько патчей апдейтят. иногда могут хоть целую неделю или месяц не апдейтить.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Начинающий
Статус
Оффлайн
Регистрация
26 Янв 2022
Сообщения
70
Реакции[?]
7
Поинты[?]
0
я имел ввиду апдейт дллки. этот микропатч(64.6 мб) не менял engine2.dll, поэтому ничего и не сломалось. движок обычно раз в несколько патчей апдейтят. иногда могут хоть целую неделю или месяц не апдейтить.
Пожалуйста, авторизуйтесь для просмотра ссылки.
кстати я наверное даун, но я не смог в дебагере найти что то адекватное по адресу рва, пошел искать через строки в engine2.dll и нашел там sv_cheats сделал сигу на нее но она не робит
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
на скрине конструктор(а точнее вызов конструктора).
в rcx перед call кладётся адрес переменной которая конструируется(наш квар)
на 0x58 значение лежит
но так как таких кваров дофига то и функций похожих на эту тоже будет дофига поэтому делать сигу на нее это бред(кучу говна найдет ибо все функции конструкции кваров похожи).
но тут есть один момент - у св_читс уникальные флаги(mov r9d, 0x82100)(пару лет как минимум не менялись эти флаги)
можешь абузить данный факт и делать сигу с этим числом сразу 0x82100
48 8d 0d ?? ?? ?? ?? c6 44 24 ?? ?? 41 b9(lea rcx qword ?; mov byte [rsp + ?], ?; mov r9d) находит кучу говна схожего(и следовательно не подходит ибо сига должна быть уникальной, т.е. находить только одно место в памяти)
48 8d 0d ?? ?? ?? ?? c6 44 24 ?? ?? 41 b9 00 21 08 00(lea rcx qword ?; mov byte [rsp + ?], ?; mov r9d, 0x82100) - находит токо наш квар изза уникальных флагов
1650430528500.png
 
Эксперт
Статус
Оффлайн
Регистрация
9 Апр 2020
Сообщения
1,446
Реакции[?]
673
Поинты[?]
32K
спасибо, учту в следующий раз, я думаю после обновы любой чел сможет через чит енжин найти новый адрес, но да было бы удобнее, чтобы оно само работало
Python:
def PatternScanner(Module, Pattern, Extra = 0, Offset = 0, Relative = True):
        Module = pymem.process.module_from_name(pm.process_handle, Module)
        Bytes = pm.read_bytes(Module.lpBaseOfDll, Module.SizeOfImage)
        Match = re.search(Pattern, Bytes).start()

        NonRelative = pm.read_int(Module.lpBaseOfDll + Match + Offset) + Extra
        YesRelative = pm.read_int(Module.lpBaseOfDll + Match + Offset) + Extra - Module.lpBaseOfDll

        return "0x{:X}".format(YesRelative) if Relative else "0x{:X}".format(NonRelative)
Example:
int(PatternScanner('engine.dll', rb'\xA1....\x33\xD2\x6A\x00\x6A\x00\x33\xC9\x89\xB0', 0, 1), 0)
 
Начинающий
Статус
Оффлайн
Регистрация
26 Янв 2022
Сообщения
70
Реакции[?]
7
Поинты[?]
0
Python:
def PatternScanner(Module, Pattern, Extra = 0, Offset = 0, Relative = True):
        Module = pymem.process.module_from_name(pm.process_handle, Module)
        Bytes = pm.read_bytes(Module.lpBaseOfDll, Module.SizeOfImage)
        Match = re.search(Pattern, Bytes).start()

        NonRelative = pm.read_int(Module.lpBaseOfDll + Match + Offset) + Extra
        YesRelative = pm.read_int(Module.lpBaseOfDll + Match + Offset) + Extra - Module.lpBaseOfDll

        return "0x{:X}".format(YesRelative) if Relative else "0x{:X}".format(NonRelative)
Example:
int(PatternScanner('engine.dll', rb'\xA1....\x33\xD2\x6A\x00\x6A\x00\x33\xC9\x89\xB0', 0, 1), 0)
я уже делал такую штуку(можешь посмотреть в исходниках я публиковал в февларе там ентити систем по сиге находится) пррсто саму сигу не смог найти валидную, спасибо либералисту)
я уже делал такую штуку(можешь посмотреть в исходниках я публиковал в февларе там ентити систем по сиге находится) пррсто саму сигу не смог найти валидную, спасибо либералисту)
Python:
ent_find = pymem.pattern.pattern_scan_module(dota.process_handle, client, rb"\x48\x83\xEC.\x83\x3A\x02\x7D\x12\x48\x8D\x0D....\x48\x83\xC4.\x48\xFF\x25....\x48\x89\x5C..\x48\x8D\x0D....\x48\x89\x6C")
ent_system = ent_find + 56465928
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
я уже делал такую штуку(можешь посмотреть в исходниках я публиковал в февларе там ентити систем по сиге находится) пррсто саму сигу не смог найти валидную, спасибо либералисту)

Python:
ent_find = pymem.pattern.pattern_scan_module(dota.process_handle, client, rb"\x48\x83\xEC.\x83\x3A\x02\x7D\x12\x48\x8D\x0D....\x48\x83\xC4.\x48\xFF\x25....\x48\x89\x5C..\x48\x8D\x0D....\x48\x89\x6C")
ent_system = ent_find + 56465928
кстати в идеале сигскан сигскан должен продолжать поиск даже после того как нашел сигу для того, чтобы удостовериться что больше сига не будет найдена(то есть сига уникальна), ибо если найдет еще одну сигу - кто знает какая сига верная первая или вторая? лучше в ебало прилетит ошибка что больше одной сиги нашло, чем вызывать левую функцию найденную в не том месте с неуникальной сиги и потом долго думать что и почему не работает.
 
Эксперт
Статус
Оффлайн
Регистрация
9 Апр 2020
Сообщения
1,446
Реакции[?]
673
Поинты[?]
32K
кстати в идеале сигскан сигскан должен продолжать поиск даже после того как нашел сигу для того, чтобы удостовериться что больше сига не будет найдена(то есть сига уникальна), ибо если найдет еще одну сигу - кто знает какая сига верная первая или вторая? лучше в ебало прилетит ошибка что больше одной сиги нашло, чем вызывать левую функцию найденную в не том месте с неуникальной сиги и потом долго думать что и почему не работает.
Как ты думаешь, почему сигнатура выглядит "05 ? ? ? ? C3 CC CC CC CC CC CC CC A1", а не "05 ? ? ? ? C3".
К тому же, ну найдешь ты 2 сигнатуры, и как ты поймешь какая верная ?
 
Легенда форума
Статус
Оффлайн
Регистрация
10 Дек 2018
Сообщения
4,385
Реакции[?]
2,286
Поинты[?]
191K
кстати в идеале сигскан сигскан должен продолжать поиск даже после того как нашел сигу для того, чтобы удостовериться что больше сига не будет найдена(то есть сига уникальна), ибо если найдет еще одну сигу - кто знает какая сига верная первая или вторая? лучше в ебало прилетит ошибка что больше одной сиги нашло, чем вызывать левую функцию найденную в не том месте с неуникальной сиги и потом долго думать что и почему не работает.
Так в том то и дело, что сигнатуры уникальны, каво?

И мне кажется, что за такой наглый врайт вак тебя через неделю словит
 
Пользователь
Статус
Оффлайн
Регистрация
3 Авг 2016
Сообщения
186
Реакции[?]
252
Поинты[?]
0
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Как ты думаешь, почему сигнатура выглядит "05 ? ? ? ? C3 CC CC CC CC CC CC CC A1", а не "05 ? ? ? ? C3".
К тому же, ну найдешь ты 2 сигнатуры, и как ты поймешь какая верная ?
я не говорил про твою сигнатуру или чью-то еще, я говорил в общем. во-первых не все делают такие длинные сиги, а во-вторых чисто теоритически что мешает габену так пересобрать свою приложуху в некст апдейте что появится еще одно совпадение по сиге "05 ? ? ? ? C3 CC CC CC CC CC CC CC A1"?(собственно и чел выше то же самое написал)
ты найдешь 2 сигнатуры и ты КИНЕШЬ ОШИБКУ, ты не будешь разбираться какая верная или нет - ты пойдешь делать новую сигу, ибо если юзать старую может крашить или что-то еще делать и ладно бы если бы сразу крашило, тебе может крашнуть потом ваще в другом месте и ты задолбаешься дебажить почему крашит.
 
Легенда форума
Статус
Оффлайн
Регистрация
10 Дек 2018
Сообщения
4,385
Реакции[?]
2,286
Поинты[?]
191K
Сегодня уникальная, а завтра после очередного апдейта под эту сигу найдётся ещё что-то
Это очень, ОЧЕНЬ маловероятно. Особенно, если в сиге нет маски.
ты найдешь 2 сигнатуры и ты КИНЕШЬ ОШИБКУ, ты не будешь разбираться какая верная или нет - ты пойдешь делать новую сигу
Один фиг, при неверной сиге тебе уже сам write/read кинет исключение memory access violation.
Так что смысла заниматься такими приколами лично я не вижу.
 
Эксперт
Статус
Оффлайн
Регистрация
9 Апр 2020
Сообщения
1,446
Реакции[?]
673
Поинты[?]
32K
я не говорил про твою сигнатуру или чью-то еще, я говорил в общем. во-первых не все делают такие длинные сиги, а во-вторых чисто теоритически что мешает габену так пересобрать свою приложуху в некст апдейте что появится еще одно совпадение по сиге "05 ? ? ? ? C3 CC CC CC CC CC CC CC A1"?(собственно и чел выше то же самое написал)
ты найдешь 2 сигнатуры и ты КИНЕШЬ ОШИБКУ, ты не будешь разбираться какая верная или нет - ты пойдешь делать новую сигу, ибо если юзать старую может крашить или что-то еще делать и ладно бы если бы сразу крашило, тебе может крашнуть потом ваще в другом месте и ты задолбаешься дебажить почему крашит.
Длина сигны = ее уникальность.
Я не знаю какой бездарь будет делать короткую сигну, только наверное еблан, который не знает как она работает.
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Это очень, ОЧЕНЬ маловероятно. Особенно, если в сиге нет маски.

Один фиг, при неверной сиге тебе уже сам write/read кинет исключение memory access violation.
Так что смысла заниматься такими приколами лично я не вижу.
так а что если не кинет? что если ты считаешь адрес, но тот адрес с которого ты считал - неверный(не тот что тебе нужен. валидный адрес, но там другие данные)? а потом ты передашь этот адрес в какую-то функу, эта функа его куда-нибудь запишет, потом кто-то через секунду считает этот адрес и крашнет, в итоге у тебя краш в какойто жопе и ты задолбаешься дебажить искать причину этого краша.
 
Легенда форума
Статус
Оффлайн
Регистрация
10 Дек 2018
Сообщения
4,385
Реакции[?]
2,286
Поинты[?]
191K
так а что если не кинет? что если ты считаешь адрес, но тот адрес с которого ты считал - неверный(не тот что тебе нужен. валидный адрес, но там другие данные)? а потом ты передашь этот адрес в какую-то функу, эта функа его куда-нибудь запишет, потом кто-то через секунду считает этот адрес и крашнет, в итоге у тебя краш в какойто жопе и ты задолбаешься дебажить искать причину этого краша.
Что там можно задолбаться дебажить? Я не очень понимаю, честно. Как будто сложно посмотреть значения переменных на момент краша, vs debugger все необходимые для этого инструменты предоставляет.
Да и каков вообще шанс, что валвы полезут менять что-то, связанное с свчитсом?
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Что там можно задолбаться дебажить? Я не очень понимаю, честно. Как будто сложно посмотреть значения переменных на момент краша, vs debugger все необходимые для этого инструменты предоставляет.
так я говорю, тебе может крашнуть не сразу а через секунду или еще позже когда все следы уже пропали. краш может быть не у тебя в приложухе, а именно в таргет приложухе - ты же вызываешь игровые функции, они что-то где-то куда-то могут записывать, потом оттуда кто-нибудь еще считает. в итоге ты смотришь а у тебя как будто "крашнулась игра" а не сам чит. это всё непредсказуемо.
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Что там можно задолбаться дебажить? Я не очень понимаю, честно. Как будто сложно посмотреть значения переменных на момент краша, vs debugger все необходимые для этого инструменты предоставляет.
Да и каков вообще шанс, что валвы полезут менять что-то, связанное с свчитсом?
на поиграйся в условный симулятор краша. из твоего(всмысле кода чита) кода тут только

TJob GetSomeJob()//типо по сиге нашел джобу(по легенде вернуло кривую джобу потому что сиг нашло несколько)
{
return shitty_job;
}
и
StartWork(GetSomeJob());
представь что остальное это чужой код(код приложухи)
C++:
#include <thread>

using TJob = void(*)();

class Worker
{
    TJob job{};
public:
    Worker(TJob j) noexcept : job{ j } {}
    void DoJob() const noexcept
    {
        job();
    }
};

void StartWork(TJob job)
{
    Worker worker{ job };
    std::thread worker_thread{ [&worker]() {
        std::this_thread::sleep_for(std::chrono::seconds(5));
        worker.DoJob();
    } };
    worker_thread.join();
}

class MyObject
{
    int real_return_code{ 1 };
public:
    int* return_code{ &real_return_code };
    int DoShit() const noexcept { return *return_code; }
};
MyObject my_object{};

void shitty_job() noexcept
{
    my_object.return_code = nullptr;
}

TJob GetSomeJob() noexcept
{
    return shitty_job;
}

int main()
{
    StartWork(GetSomeJob());//типа твой код просто в другом треде условно
    return my_object.DoShit();//типа код игры который крашнет
}
крашит почему? потому что my_object->return_code ноль. почему он ноль? потому что кто-то в другом треде его поменял на ноль? кто? да бог его знает(это был воркер из StartWork). почему он его поменял? потому что ему дали джобу shitty_job 5 секунд назад. кто ему ее дал? да бог его знает(это был main). почему он ее дал? потому что GetSomeJob вернул shitty_job. почему он ее вернул? тоже бог его знает(потому что условно две сиги нашло. но ты даже об этом не знаешь потому что ты не чекнул сколько тебе сиг нашло!). а теперь представь что здесь не 50 строк кода а гораздо больше.
и я не про св_читс говорил я просто в целом говорил про сигсканы. я лично считаю что лучше перестраховаться лишний раз.
 
Сверху Снизу