Для чего нужны сигнатуры?
Сигнатуры представляют собой последовательность байтов, необходима это последовательность, чтобы найти определенную функцию или определенную область кода игры.
Байты представляют собой ассеблерные инструкции. Т.е по факту это сам код игры только в ассемблерном представлении. А сами инструкции асемблера можно представить в виде HEX-чисел.
Получается что мы ищем этот паттерн байтов в коде игры и получаем адрес.
Например: \x55\x89\xE5\x53\x83\xEC\x04\x8B\x5D\x2A\x8B\x83\x2A\x2A\x2A\x2A\x85\xC0\x74\x2A\x8B\x10\x85\xD2\x74\x2A\x83\xEC\x08

Чтобы представить скомпилированный код игры в ассемблерном виде нам необходим дизассемблер. В большинстве случаев используется либо Ghidra, либо IDA.
Я буду показывать на примере IDA PRO. Именно PRO, т.к в ней есть представление инструкций асемблера в псевдокод.
Ищем необходимую функцию сначала в исходниках игры. (Их можно найти на GitHub).
Например возьмем RadiusFlash. Сигнатура этой функции используется в расширении Blind Hook
1682620300392.png

RadiusFlash вызывается в другой функции в которой есть строки. Нам они и нужны, именно по строкам осуществляется поиск сигнатур.
  • Исходники папки game(кроме папки client) – server.so/dll
  • Исходники папки engineengine.so/dll
Открываем библиотеку server.so/dll (в зависимости от того на какую OS вы хотите найти сигнатуру) через IDA PRO. При первом открытии необходимо дождаться загрузки. (Внизу будет написано idle). После нажмите пробел, чтобы выйти из графов.

По итогу будет выглядеть как-то так:
1682620371794.png

Теперь сгенерируем строки: View -> Open subviews -> Strings
В окне нажмем Ctrl + F, чтобы осуществить поиск строки и введем: Flashbang.Explode (посмотрите 1 скриншот, если не понимаете почему именно эта строка).
Переходим к строке и оказываемся в секции .rodata. Сюда компилятор складывает все константные значения, в том числе и строки.
1682620451097.png

Чтобы найти ту функцию, в которой эта строка используется нажмем X. Sub_XXXXXX – это функция. Их тут аж 3 штуки, но нам необходима 2. Вы можете сами потыкать по ним и посмотреть, что они из себя представляют.
1682620507866.png
Также вы можете сгенерировать псевдокод, чтобы понять как примерно эти функции выглядят.
1682620554433.png

1 и 3 функции вот такие:
1682620666056.png
1682620675652-png.111532
А вторая нам подходит. Выше вызова функции со строкой Flashbang.Explode и находится RadiusFlash. Переходим к этой функции.
1682620916894.png

Получить сигнатуру RadiusFlash нам поможет скрипт.
makesig.idc скачать его можно здесь: https://github.com/pmrowla/sourcemod-central/tree/master/tools/ida_scripts
Теперь нам необходимо выполнить скрипт, который как раз позволит получить нам уникальный паттерн байтов из начала функции.
Итог:
1682622552294.png

Также добавлю откуда эти байты появились, если мы посмотрим ассемблерное представление функции, то получим как раз эти байты. Просто скрипт нам помогает найти именно УНИКАЛЬНУЮ последовательность байтов, а также подставляет пропуски(\x2A), там где это нужно, подробнее про это вы можете почитать здесь - Signature scanning - AlliedModders Wiki
1682621295445.png