Как находить оффсеты ?

VanikMelkin

Новичок
Автор темы
9
4
Братва, здарова. Как находить оффсеты для написания хуков ? Вот типо у меня есть samp.dll в IDA Free, что мне дальше делать чтобы получить оффсет ?
1728851639478.png
 
  • Эм
Реакции: EKPAHHNY_HAGN6ATOP

VanikMelkin

Новичок
Автор темы
9
4
во-первых, удали иду фри и скачай кряк иды про, во-вторых, скачай готовые базы сампа и гта, и в-третьих, ктхуки
У меня есть и Ида про, суть в том, как вообще их находить, из готовых баз сампа - многие не сходятся
 

movebx

Известный
71
197
1728853492165.png

когда то уже расписывал в луакидах, не ахти, но для самых несмешариков. Лучше подтянуть матчасть по ассемблеру и адресации. Если просто понадобится хукнуть функцию - ида и hex-rays тебе предоставит всю нужную инфу
 

ARMOR

Я не кодер. Я аболтус
Модератор
5,000
7,019
Поставим хук на добавление сообщений в чат на SAMP 0.3.7 R3 без готовой базы, а на основе только отсканированого samp.dll
1. Найдём место где отправляется любое сообщение в чат, проще всего будет взять какой-то статический текст по типу текста при скриншоте.
Для этого генерируем строки с помощью нажатия Shift + F12, нас перекидывает в окно "Strings"
1729489228801.png


Тут нажимаем на любую строку после чего Ctrl + F и ищем текст связаный с скриншотом. Нам нужна строка
Screenshot Taken - sa-mp-%03i.png
Нажимаем по ней два раза и нас перекидывает на смещение .rdata:100EA75C
Нажимаем левой кнопкой мыши по выделеному на скриншоте тексту
1729489375932.png


После чего нажимаем X ( икс ), и смотрим где в samp.dll вызывается данная строка.
1729489419746.png


Видим что строка вызывается только один раз, это очень сильно облегчает нам задачу. Переходим к месту вызова нажав "OK"

Нас перекидывает на смещение 10074FC7 где мы видим такую картину
1729489905216.png

Код идёт как всегда сверху в низ и это значит что всё что сверху это параметры для функции sub_100678F0, значит эта функция отправляет сообщение о скриншоте в чат, посмотрим её в псевдокоде C нажав на F5
1729490027376.png

Тут видим что эта функция вызывается с параметрами ArgList, Текст формата сообщения, и значение для формата, в нашём случае значение формата это номер скриншота, а ArgList это указатель на CChat. Назовём пока что эту функцию SendDebugMessage, и двойным нажатием на её название перейдём в её псевдокод.
1729490198866.png


Тут мы видим что функция форматирует строку которая передается вторым параметром и потом передает её в другую функцию, с другими параметрами.
Значит эта функция занимается только форматированием, и передачей параметров в другую функцию sub_10067460, переименуем её в AddMessageToChat, перейдём в неё и посмотрим её псевдокод
1729490379142.png

Тут видим сигнатуру функции
char*(__thiscall*)(int this, int a2, char* Source, const char* a4, int a5, int a6)
из этого уже можно создать хук, но слегка переделаем нашу сигнатуру дабы было более понятно нажав на название функции правой кнопкой мыши и нажав Y
1729490497833.png

Нас кидает сюда. Первым делом укажем возвращаемый тип данных void ( Потому что если мы перейдем по вызовам функции то увидим что функции которые её вызывают на самом деле не должны ничего возвращать. Дальше изменим int this на void* this, char* Source изменим на const char* szText, int a5 изменим на unsigned int nColor ( Потому что если полазить по вызовам функции то увидим что в функции sub_100679F0 она вызывается с параметром 0xFF000000, что скорее всего может являться цветом сообщения )
На выходе мы получаем сигнатуру
void(__thiscall*)(void* this, int a2, const char* szText, const char* a4, unsigned int nColor, int a6)

Адрес функции это смещение в samp.dll где начинается её пролог. В нашём случае это 0x67460
1729490901430.png
 

VanikMelkin

Новичок
Автор темы
9
4
Поставим хук на добавление сообщений в чат на 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
лучший, как раз то что мне надо
 
  • Влюблен
Реакции: ARMOR

rqcePeek

Участник
67
20
Поставим хук на добавление сообщений в чат на 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
неплохой мини-гайд, что за версия иды?