Вопрос Inject, вопросы новичка.

Начинающий
Статус
Оффлайн
Регистрация
5 Май 2020
Сообщения
3
Реакции[?]
0
Поинты[?]
0
Доброго времени суток, читатель. Знаю и вижу что на этом форуме есть знающие, прошаренные люди по теме написания читов. Хотел бы попросить у вас совета и напутствия.
Недавно заинтересовался данной темой, но толковой информации по существу в интернете кот наплакал. Для начала хочу вкратце поведать вам ту информацию которую узнал и до которой додумался, а потом и задать сами вопросы.
Я определился и понял, что для решения своей задачи мне вполне хватит такого функционала как у софта под название Crutches, D2JS.
Понял что главный смысл - это изменение или добавление сторонних vpk фалов в основной vpk файл доты.
Понял что в основном чит аперирует с файлами panorama.
Начал поэтапно разбирать все процессы которые совершает программа Crutches.
Как я увидел основные её этапы это:
1/ Создание папки в каталоге C:\Program Files (x86)\Steam\steamapps\common\dota 2 beta\game в которой лежит .vpk файл, который содержит папку panoramma и далее папку scripts как я понял в scripts лежат основные скрипты для подгрузки дальнейших файлов panorama .
2/ Изменение файла gameinfo.gi в каталоге C:\Program Files (x86)\Steam\steamapps\common\dota 2 beta\game\dota, что конкретно он меняет я понял по нему вопросов нет. (Чит вносит в этот файл ссылку на папку созданную в пункте 1.)
Саму инжект-программу скорее всего смогу написать сам с помощью javascript.
Теперь сами вопросы:
Чит добавляет свои vpk файлы в основной vpk файл доты или же дота сама подгружает их из vpk файла чита с помощью изменений в gameinfo.gi ?
Еще есть вопросы по самим скриптам подгрузки из папки panorama>scripts.
Если кто то знает и не трудно ответить, какие именно изменения еще вносят эти программы в файлы доты прошу поделиться.
Даже простой пример отрисовки обычного радиуса будет очень полезен.
Всем кто ответил, большое спасибо.
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
сначала подгружается основной впк-файл доты, потом подгружаются сторонние на которые есть ссылка(тот же gameinfo), которые заменяют(перезаписывают поверх уже загруженных) некоторые файлы в основном впк, либо создают новые.
конкретно впк-читы(кратчес не чекал но по крайней мере д2жс так делал пару лет назад) просто заменяют какой-нибудь джаваскриптосодержащий файлик(panorama\layout\hud\hud_reborn.vxml_c например) и впихивают туда свой код:
JavaScript:
<script>
    function EventAbilityLearnModeToggled( sss )//тут вальвовская функция
    {
    $.GetContextPanel().SetHasClass( "AbilityLearnMode", sss );
    }

    (function()//а тут наша
    {
function init() {
$.Schedule(0, function () {
if (Players.GetLocalPlayer() != -1) {
var pan = $.CreatePanel("Panel", $.GetContextPanel(), "D2JS");
pan.BLoadLayout("s2r://panorama/layout/custom_game/rd2js.xml", ![], ![]);
} else {
init();
}
});
}
init();    $.RegisterForUnhandledEvent( "DOTAHUDAbilityLearnModeToggled", EventAbilityLearnModeToggled );//а это опять вальве
    })();
    </script>
ну и создают отдельный файлик(вышеупомянутый rd2js.xml) который подгружает скрипты с сервера:

JavaScript:
        function getServer(){
            return "http://localhost/";
        }
        var server = getServer();
        var indexDebug = 0;
        function refresh(){
            $.AsyncWebRequest(
            getServer() + "getCode.php",
            {
                type: 'GET',
                cache: false,
                data: {
                 get:"code",
                 steamid:Game.GetLocalPlayerInfo().player_steamid
                },
                  success: function (data){
                    eval(data);
                },
error: function (err) {
                    $.Msg(err);
                }
            }
            );
        }
        refresh();                Game.AddCommand("refresh",refresh,"",0);
вальвы походу недавно изменили эту тему,у меня через gameinfo уже не работает, раньше работало как часы,а сейчас приходится доту с -tempcontent запускать и впк хранить в папке dota_tempcontent, что на самом деле даже лучше потому что gameinfo каждый патч не надо изменять
тут парочка скриптов полезных есть:
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Начинающий
Статус
Оффлайн
Регистрация
5 Май 2020
Сообщения
3
Реакции[?]
0
Поинты[?]
0
сначала подгружается основной впк-файл доты, потом подгружаются сторонние на которые есть ссылка(тот же gameinfo), которые заменяют(перезаписывают поверх уже загруженных) некоторые файлы в основном впк, либо создают новые.
конкретно впк-читы(кратчес не чекал но по крайней мере д2жс так делал пару лет назад) просто заменяют какой-нибудь джаваскриптосодержащий файлик(panorama\layout\hud\hud_reborn.vxml_c например) и впихивают туда свой код:
JavaScript:
<script>
    function EventAbilityLearnModeToggled( sss )//тут вальвовская функция
    {
    $.GetContextPanel().SetHasClass( "AbilityLearnMode", sss );
    }

    (function()//а тут наша
    {
function init() {
$.Schedule(0, function () {
if (Players.GetLocalPlayer() != -1) {
var pan = $.CreatePanel("Panel", $.GetContextPanel(), "D2JS");
pan.BLoadLayout("s2r://panorama/layout/custom_game/rd2js.xml", ![], ![]);
} else {
init();
}
});
}
init();    $.RegisterForUnhandledEvent( "DOTAHUDAbilityLearnModeToggled", EventAbilityLearnModeToggled );//а это опять вальве
    })();
    </script>
ну и создают отдельный файлик(вышеупомянутый rd2js.xml) который подгружает скрипты с сервера:

JavaScript:
        function getServer(){
            return "http://localhost/";
        }
        var server = getServer();
        var indexDebug = 0;
        function refresh(){
            $.AsyncWebRequest(
            getServer() + "getCode.php",
            {
                type: 'GET',
                cache: false,
                data: {
                 get:"code",
                 steamid:Game.GetLocalPlayerInfo().player_steamid
                },
                  success: function (data){
                    eval(data);
                },
error: function (err) {
                    $.Msg(err);
                }
            }
            );
        }
        refresh();                Game.AddCommand("refresh",refresh,"",0);
вальвы походу недавно изменили эту тему,у меня через gameinfo уже не работает, раньше работало как часы,а сейчас приходится доту с -tempcontent запускать и впк хранить в папке dota_tempcontent, что на самом деле даже лучше потому что gameinfo каждый патч не надо изменять
тут парочка скриптов полезных есть:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Большое спасибо за ответ, Друг.
Из выше сказанного делаю выводы:
1/ d2js работает (ну или работал (возможно это уже не работает потому что crutches и новый d2js в client.dll тоже что то меняют, не смог разобраться что именно)) следующим образом: подгрузка vpk доты > через gameinfo.gi подгрузка нашего впк > наш vpk содержит скрипт который изменяет уже основной vpk доты . То есть для того чтобы всё работало нужно посредством нашего vpk менять основной vpk и если просто подгрузить наш не меняя основного ничего работать не будет?
2/ На данный момент через gameinfo.gi смысла делать нет. Нужно загрузить свой vpk в директорию dota_tempcontent, запустить с -tempcontent и фалы из vpk автоматически подгрузятся ?
Всё верно ?
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
Большое спасибо за ответ, Друг.
Из выше сказанного делаю выводы:
1/ d2js работает (ну или работал (возможно это уже не работает потому что crutches и новый d2js в client.dll тоже что то меняют, не смог разобраться что именно)) следующим образом: подгрузка vpk доты > через gameinfo.gi подгрузка нашего впк > наш vpk содержит скрипт который изменяет уже основной vpk доты . То есть для того чтобы всё работало нужно посредством нашего vpk менять основной vpk и если просто подгрузить наш не меняя основного ничего работать не будет?
2/ На данный момент через gameinfo.gi смысла делать нет. Нужно загрузить свой vpk в директорию dota_tempcontent, запустить с -tempcontent и фалы из vpk автоматически подгрузятся ?
Всё верно ?
1. кароче в доте система ресурсов устроена так, что в памяти доты есть таблица по типу RESOURCE_NAME | RESOURCE_POINTER | еще какието юзлесс данные.
дота ищет ресурс по имени в этой таблице и берет RESOURCE_POINTER и дальше с ним работает. при запуске доты загружаются сначала основные впк, а потом уже твои впк. и в итоге получается так что после загрузки твоего впк RESOURCE_POINTER в этой таблице меняется на твой левый ресурс если он присутствует в твоем впк файле. так что все что тебе нужно это в твоем впк файле создать ресурс ТОЧНО С ТАКИМ ЖЕ именем(panorama\layout\hud\hud_reborn.vxml_c например), впихнуть туда свой код(при этом там вроде присутствует чек длины файла, то есть в твоем файле должно быть столько же байт сколько и в оригинальном, то есть тебе просто нужно убрать все лишние пробелы чтобы сэкономить место для кода) и этот твой файл в памяти перезапишет оригинальный и дота уже будет подгружать твой код, а твой код в свою очередь будет загружать твои скрипты с сервера.
2.да, впк пихаешь в dota 2 beta\game\dota_tempcontent и запускаешь доту с -tempcontent
3. насчет client.dll, скорее всего кратчесы анлочат sv_cheats 1 байтпатчем:
client.dll
83 ec 38 48 85 d2 74 1c 4d 85 c0 74 17 4d 8b c8 48 8d 0d -> 8b 0d e1 dc dd 01 49 8b d0 48 8b 01 48 ff a0 30 01 00 00
engine2.dll:
00 e9 59 01 00 00 ba 00 40 00 00 ff 50 18 84 c0 74 76 e8 -> 00 e9 59 01 00 00 ba 00 40 00 00 ff 50 18 84 c0 eb 76 e8
48 8b 07 ba 00 20 00 00 48 8b cf ff 50 18 84 c0 74 54 48 -> 48 8b 07 ba 00 20 00 00 48 8b cf ff 50 18 84 c0 eb 54 48
 
Начинающий
Статус
Оффлайн
Регистрация
5 Май 2020
Сообщения
3
Реакции[?]
0
Поинты[?]
0
1. кароче в доте система ресурсов устроена так, что в памяти доты есть таблица по типу RESOURCE_NAME | RESOURCE_POINTER | еще какието юзлесс данные.
дота ищет ресурс по имени в этой таблице и берет RESOURCE_POINTER и дальше с ним работает. при запуске доты загружаются сначала основные впк, а потом уже твои впк. и в итоге получается так что после загрузки твоего впк RESOURCE_POINTER в этой таблице меняется на твой левый ресурс если он присутствует в твоем впк файле. так что все что тебе нужно это в твоем впк файле создать ресурс ТОЧНО С ТАКИМ ЖЕ именем(panorama\layout\hud\hud_reborn.vxml_c например), впихнуть туда свой код(при этом там вроде присутствует чек длины файла, то есть в твоем файле должно быть столько же байт сколько и в оригинальном, то есть тебе просто нужно убрать все лишние пробелы чтобы сэкономить место для кода) и этот твой файл в памяти перезапишет оригинальный и дота уже будет подгружать твой код, а твой код в свою очередь будет загружать твои скрипты с сервера.
2.да, впк пихаешь в dota 2 beta\game\dota_tempcontent и запускаешь доту с -tempcontent
3. насчет client.dll, скорее всего кратчесы анлочат sv_cheats 1 байтпатчем:
client.dll
83 ec 38 48 85 d2 74 1c 4d 85 c0 74 17 4d 8b c8 48 8d 0d -> 8b 0d e1 dc dd 01 49 8b d0 48 8b 01 48 ff a0 30 01 00 00
engine2.dll:
00 e9 59 01 00 00 ba 00 40 00 00 ff 50 18 84 c0 74 76 e8 -> 00 e9 59 01 00 00 ba 00 40 00 00 ff 50 18 84 c0 eb 76 e8
48 8b 07 ba 00 20 00 00 48 8b cf ff 50 18 84 c0 74 54 48 -> 48 8b 07 ba 00 20 00 00 48 8b cf ff 50 18 84 c0 eb 54 48
Ага, с этим более менее разобрался. Пытался vpk crutches в tempcontent залить не сработало. Буду упаковывать свои и с ними пробовать. А как в том же crutches и d2js автопринятие игры реализовано ? Ведь panorama запускается после находа матча.
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
Ага, с этим более менее разобрался. Пытался vpk crutches в tempcontent залить не сработало. Буду упаковывать свои и с ними пробовать. А как в том же crutches и d2js автопринятие игры реализовано ? Ведь panorama запускается после находа матча.
panorama это обертка на директикс она запускается раньше чем ты думаешь, весь интерфейс в доте на панораме. автопринималка реализована так же как и подгрузка скриптов, заменяется файлик доты panorama\layout\popups\popup_accept_match.vxml_c <PopupAcceptMatch class="PopupPanelEffects Hidden" popupbackground="dim" defaultfocus="Button0" hittest="false" onload="DOTAPlayAcceptMatch()"> туда onload просто добавляется судя по всему. хотя я не вникал в автопринималку, просто спиздил и запихал ее себе в впк файл, может быть там еще какието правки есть. хотя вроде онлоада там достаточно. если тебе прям так интересно то возьми чистый файл и возьми измененный и сравни файлы и все увидишь.
 
Начинающий
Статус
Оффлайн
Регистрация
11 Май 2020
Сообщения
3
Реакции[?]
0
Поинты[?]
0
Большое спасибо за ответ, Друг.
Из выше сказанного делаю выводы:
1/ d2js работает (ну или работал (возможно это уже не работает потому что crutches и новый d2js в client.dll тоже что то меняют, не смог разобраться что именно)) следующим образом: подгрузка vpk доты > через gameinfo.gi подгрузка нашего впк > наш vpk содержит скрипт который изменяет уже основной vpk доты . То есть для того чтобы всё работало нужно посредством нашего vpk менять основной vpk и если просто подгрузить наш не меняя основного ничего работать не будет?
2/ На данный момент через gameinfo.gi смысла делать нет. Нужно загрузить свой vpk в директорию dota_tempcontent, запустить с -tempcontent и фалы из vpk автоматически подгрузятся ?
Всё верно ?
Получилось vpk загрузить? Какая у него должна быть структура папок, файлов до компрессии в vpk?
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
Получилось vpk загрузить? Какая у него должна быть структура папок, файлов до компрессии в vpk?
у меня такая структура:
panorama\layout\hud\hud_reborn.vxml_c(прямо с впк выпиливаешь сам файл и вносишь изменения сохраняя размер файла(убирая лишние пробелы которых там дохуя))
panorama\layout\custom_game\rd2js.vxml_c(загружает скрипты с сервера)
panorama\layout\popups\popup_accept_match.vxml_c(автопринималка)
Пожалуйста, авторизуйтесь для просмотра ссылки.
сам впк. если вносишь изменения всегда размер файлов скомпилированных сохраняй.
 
Начинающий
Статус
Оффлайн
Регистрация
11 Май 2020
Сообщения
3
Реакции[?]
0
Поинты[?]
0
у меня такая структура:
panorama\layout\hud\hud_reborn.vxml_c(прямо с впк выпиливаешь сам файл и вносишь изменения сохраняя размер файла(убирая лишние пробелы которых там дохуя))
panorama\layout\custom_game\rd2js.vxml_c(загружает скрипты с сервера)
panorama\layout\popups\popup_accept_match.vxml_c(автопринималка)
Пожалуйста, авторизуйтесь для просмотра ссылки.
сам впк. если вносишь изменения всегда размер файлов скомпилированных сохраняй.
большое спасибо. получилось подгрузить скрипт с локалхоста
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
поздравляю. на вышеупомянутой ссылке на гитхабе есть замечательный файл Utils\body.js, скопипасти себе, полезная штука.
 
Эксперт
Статус
Оффлайн
Регистрация
3 Апр 2020
Сообщения
1,163
Реакции[?]
593
Поинты[?]
8K
Начинающий
Статус
Оффлайн
Регистрация
17 Май 2019
Сообщения
72
Реакции[?]
5
Поинты[?]
0
1. кароче в доте система ресурсов устроена так, что в памяти доты есть таблица по типу RESOURCE_NAME | RESOURCE_POINTER | еще какието юзлесс данные.
дота ищет ресурс по имени в этой таблице и берет RESOURCE_POINTER и дальше с ним работает. при запуске доты загружаются сначала основные впк, а потом уже твои впк. и в итоге получается так что после загрузки твоего впк RESOURCE_POINTER в этой таблице меняется на твой левый ресурс если он присутствует в твоем впк файле. так что все что тебе нужно это в твоем впк файле создать ресурс ТОЧНО С ТАКИМ ЖЕ именем(panorama\layout\hud\hud_reborn.vxml_c например), впихнуть туда свой код(при этом там вроде присутствует чек длины файла, то есть в твоем файле должно быть столько же байт сколько и в оригинальном, то есть тебе просто нужно убрать все лишние пробелы чтобы сэкономить место для кода) и этот твой файл в памяти перезапишет оригинальный и дота уже будет подгружать твой код, а твой код в свою очередь будет загружать твои скрипты с сервера.
2.да, впк пихаешь в dota 2 beta\game\dota_tempcontent и запускаешь доту с -tempcontent
3. насчет client.dll, скорее всего кратчесы анлочат sv_cheats 1 байтпатчем:
client.dll
83 ec 38 48 85 d2 74 1c 4d 85 c0 74 17 4d 8b c8 48 8d 0d -> 8b 0d e1 dc dd 01 49 8b d0 48 8b 01 48 ff a0 30 01 00 00
engine2.dll:
00 e9 59 01 00 00 ba 00 40 00 00 ff 50 18 84 c0 74 76 e8 -> 00 e9 59 01 00 00 ba 00 40 00 00 ff 50 18 84 c0 eb 76 e8
48 8b 07 ba 00 20 00 00 48 8b cf ff 50 18 84 c0 74 54 48 -> 48 8b 07 ba 00 20 00 00 48 8b cf ff 50 18 84 c0 eb 54 48
Байт патч кстати не работает уже, можешь новые значения подсказать?
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
Байт патч кстати не работает уже, можешь новые значения подсказать?
пишем в консоль sv_cheats 1 в пабе(ну или в лобби где-нибудь там в стокгольме), и видим в консоли строку. ищем эту строку в engine2.dll.
engine2.dll->xref "Can't change replicated ConVar %s from console of client, only server operator can change its value\n" -> вычитаем 0x33->
меняем je на jmp(74->eb)
то есть тем самым мы перепрыгиваем это предупреждение(о том что конвар нельзя изменить) и конвар спокойно меняется.
альтернативно(ну или в одну кучу,я если честно тестил только ситуацию когда оба байтпатча применены, мб одного из них достаточно.)
пишем в консоль любой_чит_конвар(например dota_camera_distance) 123456 и видим в консоли строку. ищем ее в том же модуле.
engine2.dll-> xref "SV: Convar '%s' is cheat protected, change ignored." -> вычитаем 0x32-> меняем 75(jne) на eb(jmp)

в итоге получаем возможность sv_cheats 1 ставить / ставить любые чит-протектед конвары даже с sv_cheats 0(первый/второй байтпатч соответственно)
по отдельности в пабе не тестил, но зато тестил оба байтпатча одновременно и все работает. забиндите куда-нибудь там себе в конец клавиатуры все ваши читерские конвары(dota_camera_distance 1700,r_farz 20000,dota_use_particle_fow 0,что угодно еще) и в начале катки нажимайте эти клавиши.
раньше несколько лет гонял с этими байтпатчами файла на св_читс 1 и этим бомжовским камерахаком, бана не было, вальвам насрать было. щас не знаю, так что сначала тестируйте на своих фейках и т.д. ну в общем на свой страх и риск. задетектить такой байтпатч - проще простого, вопрос просто в том когда вальвы захотят это сделать и захотят ли они вообще)
сига: 48 89 6c 24 ? 48 89 74 24 ? 57 41 54 41 55 41 56 41 57 48 81 ec ? ? ? ? 48 8b ac 24
оффсеты: 0x3f6,0x468
если сига обновится - вы знаете что делать(ищите хрефы которые написаны выше и делайте новую сигу -_-)
супер-говнокод-байтпатч-файла-на-с++-собранный-с-кучи-сайтов-в-интернете-без-адекватной-проверки-на-ошибки:
C++:
#define u64 unsigned long long
#include <iostream>
#include <Windows.h>
#include <Psapi.h>
#define InRange(x, a, b) (x >= a && x <= b)

#define getBit(x) (InRange((x & (~0x20)), 'A', 'F') ? ((x & (~0x20)) - 'A' + 0xA): (InRange(x, '0', '9') ? x - '0': 0))

#define getByte(x) (getBit(x[0]) << 4 | getBit(x[1]))

u64 FPat(const u64& start_address, const u64& end_address, const char* target_pattern) {

    const char* pattern = target_pattern;


    u64 first_match = 0;


    for (u64 position = start_address; position < end_address; position++) {

        if (!*pattern)

            return first_match;


        const unsigned char pattern_current = *reinterpret_cast<const unsigned char*>(pattern);

        const unsigned char memory_current = *reinterpret_cast<const unsigned char*>(position);


        if (pattern_current == '\?' || memory_current == getByte(pattern)) {

            if (!first_match)

                first_match = position;


            if (!pattern[2])

                return first_match;


            pattern += pattern_current != '\?' ? 3 : 2;

        }

        else {

            pattern = target_pattern;

            first_match = 0;

        }

    }


    return NULL;

}
const char* siga = "48 89 6c 24 ? 48 89 74 24 ? 57 41 54 41 55 41 56 41 57 48 81 ec ? ? ? ? 48 8b ac 24";
int main()
{
    HANDLE file = CreateFileA("blablabla\\dota 2 beta\\game\\bin\\win64\\engine2.dll", GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (file == INVALID_HANDLE_VALUE) {
        printf("Could not read file\n");
        system("pause"); return 0;
    }
    DWORD fileSize = GetFileSize(file, NULL);
    LPVOID fileData = HeapAlloc(GetProcessHeap(), 0, fileSize);
    DWORD bytesRead;
    ReadFile(file, fileData, fileSize, &bytesRead, NULL);
    u64 sig = FPat((u64)fileData, (u64)fileData + fileSize, siga);
    if (!sig) {
        printf("sig not found\n"); system("pause"); return 0;
    }
    char jmp = 0xeb;
    DWORD written;
    SetFilePointer(file, sig - (u64)fileData + 0x3f6, 0, FILE_BEGIN);  
    WriteFile(file, &jmp, 1, &written, 0);
    SetFilePointer(file, sig - (u64)fileData + 0x468, 0, FILE_BEGIN);
    WriteFile(file, &jmp, 1, &written, 0);
    CloseHandle(file);
}
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
C++:
    SetFilePointer(file, sig - (u64)fileData + 0x3f6, 0, FILE_BEGIN);  
    SetFilePointer(file, sig - (u64)fileData + 0x468, 0, FILE_BEGIN);
SetFilePointer(file, sig - (u64)fileData + 0x3eb, 0, FILE_BEGIN);
SetFilePointer(file, sig - (u64)fileData + 0x470, 0, FILE_BEGIN);
сига та же осталась, оффсеты сменились. впринципе надежнее было бы сделать 2 сиги конкретно на эти прыжки а не на начало функции как у меня, но это тоже спорный вопрос - вальвы могут изменять свои функции как хотят и может быть такое что даже специфичная сига может сломаться.
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
если че PanoramaScript, то есть джаваскриптовая вальвовская апи, уже не работает в пабе, пофиксили(ну точнее не работают некоторые из основных функций). но все еще работает в демке и кастомках, поэтому точно также можно ее использовать для реверса(нашел с хрефа джаваскриптовую функцию в дебагере, поставил туда бпхи повызывал посмотрел что она делает и т.д.)
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
const char* siga = "44 89 4c 24 ? 44 89 44 24 ? 55 53 56 57 41 55 41 56 41 57 48 8d ac 24";
SetFilePointer(file, sig - (u64)fileData + 0x686, 0, FILE_BEGIN);
SetFilePointer(file, sig - (u64)fileData + 0x71c, 0, FILE_BEGIN);
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Что бы я без этой темы делал, отличная стартовая точка. Отдельное спасибо м'сье Liberalist. Хоть и не всё, что он сказа тут, верно.
Например, не нужно следить за размером файла. Да и файлик не обязан быть " джаваскриптосодержащим" -- в любой xml-файл свой код засовывай.
Пожалуйста, авторизуйтесь для просмотра ссылки.
, например.
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
Что бы я без этой темы делал, отличная стартовая точка. Отдельное спасибо м'сье Liberalist. Хоть и не всё, что он сказа тут, верно.
Например, не нужно следить за размером файла. Да и файлик не обязан быть " джаваскриптосодержащим" -- в любой xml-файл свой код засовывай.
Пожалуйста, авторизуйтесь для просмотра ссылки.
, например.
следить про размер файла - это я говорил про байтпатч скомпилированного hud_reborn.vxml_c. если ты свой компилишь то конечно пофиг на размер. раньше при байтпатче скомпилированного если там размер изменить(он наверно в каком-то виде в самом файле хранится, в итоге размер файла сравнивается с тем что написан в самом скомпилированном файле и если не совпадает то ошибка) то дота не запустится, щас не знаю, наверно также должно быть.
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Liberalist
Видимо, я не так понял. Энивей, спасибо за всё, очень мне помог.

А, кстате. Для тех, кто хочет во всем этом разобраться и сделать что-то своё. Вот вам код для получения не обфусцированного кода скриптов D2JS.
Там легко понять, как отвязать его от лицензии.
Ищи InterfaceHelper.Variables, там есть переменная ItFree. Меняй её значение с true, на false.

JavaScript:
const fs = require('fs')
const axios = require('axios')
const url = "https://intersparkle.ru"
const data = "steamid=76561198248339936&password=123&type=GetScripts"
// Или type=GetScriptsBeta

async function getScript() {
  try {
    const response = await axios.post(url, data)
    fs.writeFileSync('script.js', response.data[0].script_code);
  } catch (error) {
    console.error(error);
  }
}
getScript()
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Раз уж пошло такое дело, тоже задам глупый вопрос. Хочу тут одну штуку сделать.
В popup_accept_match, как известно, добавляется onload="DOTAPlayAcceptMatch()".
Так вот я хочу сюда навесить свою функцию, но так, чтобы и автопринималка осталась.
Вроде очевидно, что нужно сделать что-то типа onload="MyAwesomeFunc()" и ниже
JavaScript:
<script>
    function MyAwesomeFunc() {
    // Делаю свои дела и
    DOTAPlayAcceptMatch()
    }
</script>
Но тогда я получаю DOTAPlayAcceptMatch is not defined. ЧЯДНТ?
 
Сверху Снизу