Вопрос PanoramaScript на серверах Valve

Начинающий
Статус
Оффлайн
Регистрация
13 Янв 2020
Сообщения
5
Реакции[?]
0
Поинты[?]
0
Есть ли возможность разблокировать использование PanoramaScript на серверах Valve? Если да, то как?
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
делаешь скрипт. чекаешь локалхост видишь что все работает заебок. заходишь в лоббак хостишь в стокгольме каком-нибудь(то есть сервак вальве), видишь что нихуя не работает(скрипты работают но апи возвращает хуйню).
находишь функцию апи по хрефу (GetAllPlayerIDs например). два хрефа(ибо два байндинга), хрефы по типу:
trash...
lea func_GetAllPlayerIDS
trash...
lea xref "GetAllPlayerIDS"
1630438618100.png
ставишь бп и трейсишь функцию сначала на локалхосте где все работает(под трейсингом я имею ввиду проверяешь результат каждого прыжка - чекаешь какие прыжки берутся а какие не берутся), а потом в лоббаке вальвов. и видишь такую деталь:
в локалхосте прыжок не берется, а в лоббаке берется. прыгает сразу в конец функции(ну то есть посылает тебя кароче так ничего и не вернув интересного).
ищешь причину прыжка. видишь чек test [dword:[rax+cc]-f], 0xfffffffb. и прыжок jne(ака jnz ака jump not zero, то есть прыгает если не 0). то есть тебе нужно сделать так, чтобы [rax+cc]-f & 0xfffffffb давало 0. такие числа это 0xf и 0x13. чекаешь что в rax. а там C_DOTAGamerules. значит ты берешь получаешь g_pGameRules и вписываешь в dword g_pGameRules+0xcc числа либо 0xf либо 0x13.(бог значет чем это может быть опасно но вроде не крашит :D потести сам)
1630438687000.png
Результат(всунул 0xf в g_pGameRules + 0xcc (spatchem), оригинально там было 0x17(bezpatcha)):
1630439046900.png
альтернативно ты можешь просто все проверки пропатчить(jne->nop) сделав сигу вычитания f теста на 0xfffffffb и jne.

тестил простейшим скриптом так что не знаю все ли апи так можно пофиксить, но тем не менее сущности вроде работают.
JavaScript:
Game.PlayersHeroEnts = function(){
    var PlayersEnt = []
    var PlayersIDs = Game.GetAllPlayerIDs()
    for(i in PlayersIDs)
        PlayersEnt.push( Players.GetPlayerHeroEntityIndex( PlayersIDs[i] ) )
    return PlayersEnt
}
function _test(){
    var test_x = Game.GetAllPlayerIDs();
    $.Msg(test_x);
    var ents = Game.PlayersHeroEnts();
    for(var i = 0; i < ents.length; i++)
    {
        $.Msg(Entities.GetUnitName(ents[i]));
    }
    $.Schedule(5, _test);
};
$.Schedule(5, _test);
тока что в турбо пабе протестил вроде все норм(вражеских 5 героев имена не пишет потому что они еще не засветились и не создались их сущности)
 
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
Пользователь
Статус
Оффлайн
Регистрация
10 Июн 2017
Сообщения
677
Реакции[?]
117
Поинты[?]
0
делаешь скрипт. чекаешь локалхост видишь что все работает заебок. заходишь в лоббак хостишь в стокгольме каком-нибудь(то есть сервак вальве), видишь что нихуя не работает(скрипты работают но апи возвращает хуйню).
находишь функцию апи по хрефу (GetAllPlayerIDs например). два хрефа(ибо два байндинга), хрефы по типу:
trash...
lea func_GetAllPlayerIDS
trash...
lea xref "GetAllPlayerIDS"
Посмотреть вложение 169694
ставишь бп и трейсишь функцию сначала на локалхосте где все работает(под трейсингом я имею ввиду проверяешь результат каждого прыжка - чекаешь какие прыжки берутся а какие не берутся), а потом в лоббаке вальвов. и видишь такую деталь:
в локалхосте прыжок не берется, а в лоббаке берется. прыгает сразу в конец функции(ну то есть посылает тебя кароче так ничего и не вернув интересного).
ищешь причину прыжка. видишь чек test [dword:[rax+cc]-f], 0xfffffffb. и прыжок jne(ака jnz ака jump not zero, то есть прыгает если не 0). то есть тебе нужно сделать так, чтобы [rax+cc]-f & 0xfffffffb давало 0. такие числа это 0xf и 0x13. чекаешь что в rax. а там C_DOTAGamerules. значит ты берешь получаешь g_pGameRules и вписываешь в dword g_pGameRules+0xcc числа либо 0xf либо 0x13.(бог значет чем это может быть опасно но вроде не крашит :D потести сам)
Посмотреть вложение 169695
Результат(всунул 0xf в g_pGameRules + 0xcc (spatchem), оригинально там было 0x17(bezpatcha)):
Посмотреть вложение 169697
альтернативно ты можешь просто все проверки пропатчить(jne->nop) сделав сигу вычитания f теста на 0xfffffffb и jne.

тестил простейшим скриптом так что не знаю все ли апи так можно пофиксить, но тем не менее сущности вроде работают.
JavaScript:
Game.PlayersHeroEnts = function(){
    var PlayersEnt = []
    var PlayersIDs = Game.GetAllPlayerIDs()
    for(i in PlayersIDs)
        PlayersEnt.push( Players.GetPlayerHeroEntityIndex( PlayersIDs[i] ) )
    return PlayersEnt
}
function _test(){
    var test_x = Game.GetAllPlayerIDs();
    $.Msg(test_x);
    var ents = Game.PlayersHeroEnts();
    for(var i = 0; i < ents.length; i++)
    {
        $.Msg(Entities.GetUnitName(ents[i]));
    }
    $.Schedule(5, _test);
};
$.Schedule(5, _test);
тока что в турбо пабе протестил вроде все норм(вражеских 5 героев имена не пишет потому что они еще не засветились и не создались их сущности)
мужик ты невероятно крут
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Говорил же, лучший <З

Если кому нужно, сига на C_DOTAGamerules: 48 8B 05 ? ? ? ? 48 85 C0 75 ? 0F 57 C0 C3 F3 0F 10 80 ? ? ? ? C3

Только у меня чет на 0xCC не 0x17, а 0x1. Хотя мож потому что лобби, я хз.
И если на 0xF менять, сразу краш. 0x13 вроде работает.

UPD: Чет хз, короче. Если так патчить на стадии пика и в первые несколько секунд после начала игры (PREGAME || GAME_IN_PROGRESS), потом создавать партикль вокруг героя (другое не тестил), то крашит, когда героя двигаешь.
Надо другое думать.
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Говорил же, лучший <З

Если кому нужно, сига на C_DOTAGamerules: 48 8B 05 ? ? ? ? 48 85 C0 75 ? 0F 57 C0 C3 F3 0F 10 80 ? ? ? ? C3

Только у меня чет на 0xCC не 0x17, а 0x1. Хотя мож потому что лобби, я хз.
И если на 0xF менять, сразу краш. 0x13 вроде работает.

UPD: Чет хз, короче. Если так патчить на стадии пика и в первые несколько секунд после начала игры (PREGAME || GAME_IN_PROGRESS), потом создавать партикль вокруг героя (другое не тестил), то крашит, когда героя двигаешь.
Надо другое думать.
попробуй пропатчить все проверки 8d ?? f1 a9 fb ff ff ff 0f 85(sig = 0; while sig = findSig("mysig", sig) sig.replace(0f85,90.repeat(6))) findSig ищет сигу начиная от sig + 1(ну то есть нашел первую сигу, вторую ищешь начианя от первой сиги + 1) мб так будет работать.
мб у тебя на 0xcc чето другое лежит? мб у тебя архитектура другая(хотя по сиге твоей на геймрулес вижу что х64 :D)? это для х64 дотки оффсет. проверь у себя самостоятельно оффсет. найди джс функцию по хрефу и там чекни какой оффсет.
 
Последнее редактирование:
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
попробуй пропатчить все проверки 8d ?? f1 a9 fb ff ff ff 0f 85(sig = 0; while sig = findSig("mysig", sig) sig.replace(0f85,90.repeat(6))) findSig ищет сигу начиная от sig + 1(ну то есть нашел первую сигу, вторую ищешь начианя от первой сиги + 1) мб так будет работать.
мб у тебя на 0xcc чето другое лежит? мб у тебя архитектура другая(хотя по сиге твоей на геймрулес вижу что х64 :D)? это для х64 дотки оффсет. проверь у себя самостоятельно оффсет. найди джс функцию по хрефу и там чекни какой оффсет.
Да странно, вроде если чуть позже патчить -- всё работает прекрасно. Да и хрен с ним, работает -- хорошо.
Мне панорама чисто чтобы реверсить удобней было, бпшки ставить, все дела xd

Ну а ваще, адрес статичный, можешь сам глянуть -- может это рили каким-то чудом не оно (а что тогда, лол).
[client.dll+370C240] + 0xCC
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Да странно, вроде если чуть позже патчить -- всё работает прекрасно. Да и хрен с ним, работает -- хорошо.
Мне панорама чисто чтобы реверсить удобней было, бпшки ставить, все дела xd

Ну а ваще, адрес статичный, можешь сам глянуть -- может это рили каким-то чудом не оно (а что тогда, лол).
[client.dll+370C240] + 0xCC
понятно, что адрес статичный. это же non-const(конст в .rdata летит ака Read-only initialized data ) статик(статики это либо глобальные переменные либо объявленные как static переменные). это в .data летит( Initialized data ). но RVA(например client.dll+370c240 как у тебя) юзать - вариант ненадежный. RVA легко поменяется с некст апдейтом. у меня например даже уже другой RVA на геймрулес(ну видимо апдейты доты разные. мб вчера/седня апдейт вышел и я не обновлял или ты не обновлял хз.). лучше сигу юзать так как сига поменяется только если функция будет изменена и тем самым пересобрана. а если ее менять никто не будет то и компилятор будет использовать уже собранную функцию, и поэтому сига останется та же. RVA же ломается очень просто:
client.dll.update1:
C_SomethingElse* g_OtherVariable{nullptr};//offset SOME_RVA
C_DOTAGameRules* g_pGameRules{nullptr};//offset SOME_RVA + 8
C_AnotherThing* g_pAnotherPtr{nullptr}://offset SOME_RVA + 16
client.dll.update2:
C_SomethingElse* g_OtherVariable{nullptr};//offset SOME_RVA
C_NewClass* g_NewVariable{nullptr};//offset SOME_RVA + 8
C_DOTAGameRules* g_pGameRules{nullptr};//offset SOME_RVA + 16
C_AnotherThing* g_pAnotherPtr{nullptr}://offset SOME_RVA + 24
стоит переменную добавить просто сверху до g_pGameRules и все твой RVA поломался. был 1000 допустим в первом апдейте, стал 1008 в некст.
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
понятно, что адрес статичный. это же non-const(конст в .rdata летит ака Read-only initialized data ) статик(статики это либо глобальные переменные либо объявленные как static переменные). это в .data летит( Initialized data ). но RVA(например client.dll+370c240 как у тебя) юзать - вариант ненадежный. RVA легко поменяется с некст апдейтом. у меня например даже уже другой RVA на геймрулес(ну видимо апдейты доты разные. мб вчера/седня апдейт вышел и я не обновлял или ты не обновлял хз.). лучше сигу юзать так как сига поменяется только если функция будет изменена и тем самым пересобрана. а если ее менять никто не будет то и компилятор будет использовать уже собранную функцию, и поэтому сига останется та же. RVA же ломается очень просто:
client.dll.update1:
C_SomethingElse* g_OtherVariable{nullptr};//offset SOME_RVA
C_DOTAGameRules* g_pGameRules{nullptr};//offset SOME_RVA + 8
C_AnotherThing* g_pAnotherPtr{nullptr}://offset SOME_RVA + 16
client.dll.update2:
C_SomethingElse* g_OtherVariable{nullptr};//offset SOME_RVA
C_NewClass* g_NewVariable{nullptr};//offset SOME_RVA + 8
C_DOTAGameRules* g_pGameRules{nullptr};//offset SOME_RVA + 16
C_AnotherThing* g_pAnotherPtr{nullptr}://offset SOME_RVA + 24
стоит переменную добавить просто сверху до g_pGameRules и все твой RVA поломался. был 1000 допустим в первом апдейте, стал 1008 в некст.
Ну я не совсем идиот, понимаю, потому сигу и скинул :^)
 
Сверху Снизу