Поставим хук на добавление сообщений в чат на SAMP 0.3.7 R3 без готовой базы, а на основе только отсканированого samp.dll
1. Найдём место где отправляется любое сообщение в чат, проще всего будет взять какой-то статический текст по типу текста при скриншоте.
Для этого генерируем строки с помощью нажатия Shift + F12, нас перекидывает в окно "Strings"
Посмотреть вложение 254673
Тут нажимаем на любую строку после чего Ctrl + F и ищем текст связаный с скриншотом. Нам нужна строка
Нажимаем по ней два раза и нас перекидывает на смещение .rdata:100EA75C
Нажимаем левой кнопкой мыши по выделеному на скриншоте тексту
Посмотреть вложение 254674
После чего нажимаем X ( икс ), и смотрим где в samp.dll вызывается данная строка.
Посмотреть вложение 254675
Видим что строка вызывается только один раз, это очень сильно облегчает нам задачу. Переходим к месту вызова нажав "OK"
Нас перекидывает на смещение 10074FC7 где мы видим такую картину
Посмотреть вложение 254677
Код идёт как всегда сверху в низ и это значит что всё что сверху это параметры для функции sub_100678F0, значит эта функция отправляет сообщение о скриншоте в чат, посмотрим её в псевдокоде C нажав на F5
Посмотреть вложение 254678
Тут видим что эта функция вызывается с параметрами ArgList, Текст формата сообщения, и значение для формата, в нашём случае значение формата это номер скриншота, а ArgList это указатель на CChat. Назовём пока что эту функцию SendDebugMessage, и двойным нажатием на её название перейдём в её псевдокод.
Посмотреть вложение 254680
Тут мы видим что функция форматирует строку которая передается вторым параметром и потом передает её в другую функцию, с другими параметрами.
Значит эта функция занимается только форматированием, и передачей параметров в другую функцию sub_10067460, переименуем её в AddMessageToChat, перейдём в неё и посмотрим её псевдокод
Посмотреть вложение 254681
Тут видим сигнатуру функции
из этого уже можно создать хук, но слегка переделаем нашу сигнатуру дабы было более понятно нажав на название функции правой кнопкой мыши и нажав Y
Посмотреть вложение 254682
Нас кидает сюда. Первым делом укажем возвращаемый тип данных void ( Потому что если мы перейдем по вызовам функции то увидим что функции которые её вызывают на самом деле не должны ничего возвращать. Дальше изменим int this на void* this, char* Source изменим на const char* szText, int a5 изменим на unsigned int nColor ( Потому что если полазить по вызовам функции то увидим что в функции sub_100679F0 она вызывается с параметром 0xFF000000, что скорее всего может являться цветом сообщения )
На выходе мы получаем сигнатуру
Адрес функции это смещение в samp.dll где начинается её пролог. В нашём случае это 0x67460
Посмотреть вложение 254683