Перейти к содержанию

Как найти bone matrix в играх на движке Source?


Гость abbateur

Рекомендуемые сообщения

Относительно недавно накодил триггербот для Team Fortress 2 (самый простой, только чтение памяти и эмуляция клацания левой кнопки через через mouse_event , через сравнение команды игрока в прицеле со своей командой) и понял,что для снайпера такой триггербот почти бесполезен, а следовательно есть мотивация изучать более продвинутые вещи :-D 

 


Естественно полез шарить по гитхабу и гуглу и нашел вот это: 
https://github.com/OlivierStAmour/CSGO_aimbot/tree/master/source - исходник аимбота,который умеет выцеливать определенные "кости" игрока(голову, туловище, ноги итд)


С пониманием кода никаких проблем не возникло, но возник вопрос - как искать эти самые смещения на "кости"?
Через Cheat engine это не провернуть, туториалов по тому как это сделать в IDA/Ollydbg/x64dbg не нашел.

 

Есть конечно предположение,что копать нужно в сторону sdk,но как использовать его для получения нужных указателей и вообще работать с ним?

Может кто сталкивался и может подкинуть статей по поиску смещений через sdk, или иной вариант получения нужных указателей?
Любые ссылки по теме - приветствуются, как и любая помощь :rolleyes:

Ссылка на комментарий
Поделиться на другие сайты

Так

у тебя будет вместо 12-ой виртуальной функции, 37 вроде бы точно сейчас не скажу. В IDA можно уточнить скачав плагин Class informer и игру под macos, там все функции с отладочной информацией идут т.е подписаны. 

или искать C_BaseAnimating::SetupBones это будет начало функции и смотреть по коду, если в асме разбираешься, восстановишь функцию и быстро найдешь.(SDK в помощь) Инструкция будет выглядеть как-то так:

mov [esi+смещение], eax(ecx было в соурс)

EntityBase(esi) + смещение = C_BaseAnimating::SetupBones

Изменено пользователем partoftheworlD
Ссылка на комментарий
Поделиться на другие сайты

Нашел как разреверсить функцию вот тут,буквально вчера:

http://guidedhacking.com/showthread.php?5210-tut-on-reversing-quot-C_BaseAnimating-SetupBones-quot/page2&highlight=bone

 

Насколько я понял там по факту нужно искать не столько определенный регистр, сколько последовательность mov которая вносит данные по смещениям (так как похоже, что компилятор использует разные регистры для каждого билда), а именно такую последовательность:

Цитата

mov dword ptr ds:[регистр+смещение],0

mov dword ptr ds:[регистр+смещение2],0

movss dword ptr ds:[регистр+смещение3],xmm0

 

https://github.com/ValveSoftware/source-sdk-2013/blob/master/mp/src/game/client/c_baseanimating.cpp

Цитата

bool C_BaseAnimating::SetupBones( matrix3x4_t *pBoneToWorldOut, int nMaxBones, int boneMask, float currentTime )

 

Получил вот это:

Цитата

1E962197 | C7 83 B0 05 00 00 00 00  | mov dword ptr ds:[ebx+5B0],0            |
1E9621A1 | C7 83 B4 05 00 00 00 00  | mov dword ptr ds:[ebx+5B4],0            |
1E9621AB | F3 0F 11 83 5C 08 00 00  | movss dword ptr ds:[ebx+85C],xmm0|

 

Первое смещение похоже на правильное:
GhjBC0s.png

 

Чуть позже проверю чуть более детально.

Изменено пользователем abbateur
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.