Другое С/С++ Вопрос - Ответ

redcode

🤔
Друг
147
1,282
С таким кодом просто крашит (в логе даже нет сообщения о коннекте):
Во первых: стоит использовать нормальную библиотеку для хуков, например: MinHook, Microsoft Detours.
Во вторых: правильный прототип функции должен выглядеть так:
C++:
using AddEntry_t = void(__fastcall*)(void* _this, DWORD edx, int nType, const char* szText, const char* szPrefix, D3DCOLOR textColor, D3DCOLOR prefixColor);
 
  • Нравится
Реакции: dekname

dekname

Участник
44
2
Во первых: стоит использовать нормальную библиотеку для хуков, например: MinHook, Microsoft Detours.

Если вы не слышали, что-то о какой либо библиотеке, например в данном случаи PolyHook, то это не значит, что библиотека говно или наоборот. 600 звезд на GitHub и на unknowncheats.me не считают, что она говно.




Во вторых: правильный прототип функции должен выглядеть так:
C++:
using AddEntry_t = void(__fastcall*)(void* _this, DWORD edx, int nType, const char* szText, const char* szPrefix, D3DCOLOR textColor, D3DCOLOR prefixColor);


Хотелось бы узнать: Почему надо хукать AddEntry, а не AddChatMessage?

А, так спасибо, работает)
 

redcode

🤔
Друг
147
1,282
Если вы не слышали, что-то о какой либо библиотеке, например в данном случаи PolyHook, то это не значит, что библиотека говно или наоборот. 600 звезд на GitHub и на unknowncheats.me не считают, что она говно.
Дело не в том, что она плохая, а в том, что она слишком жирная для сампа.
Хотелось бы узнать: Почему надо хукать AddEntry, а не AddChatMessage?
Функция AddEntry добавляет сообщение в чат.
Функции AddChatMessage и AddMessage выполняют дополнительные операции и вызывают AddEntry.
 

imring

Ride the Lightning
Всефорумный модератор
2,362
2,545
Во первых: стоит использовать нормальную библиотеку для хуков, например: MinHook, Microsoft Detours.
есть ОТЕЧЕСТВЕННЫЕ реализации хуков:
- https://github.com/allwanttokissme/Yet-another-hook-library/ by @BlackKnigga
- https://github.com/iammemir/microhooks by @memir (недоделаны)
- https://github.com/katursis/urmem by @urShadow
 
  • Нравится
Реакции: Dark_Knight и sc6ut

Dark_Knight

Me, me and me.
Друг
4,078
2,096
Попробуй на юрмеме так сделать, Код писал по памяти в блокноте++
C++:
#include <iostream>
#include <urmem.hpp>
#include <fstream>

using namespace urmem;
hook hookChat;

void CALLBACK hookFuncMessage(void *t, D3DCOLOR color, const char *text){
    fstream file("test hook.log", ios::binary | ios::app/* or ios::ate // Не помню по памяти какой-то второй должен быть флаг, чтобы писало в конец файла*/);
    file << text << endl;
    file.close();
    hookChat.call<calling_convention::thiscall, void>(t, color, text);
}


void initFunction(){
    hookChat.install(GetAddress(0x645A0)), get_func_addr(&hookFuncMessage));
}

void DeinitFunction(){
    hookChat.disable();
}
.
 
Последнее редактирование:
  • Нравится
Реакции: dekname

dekname

Участник
44
2
Попробуй на юрмеме так сделать, Код писал по памяти в блокноте++
C++:
#include <iostream>
#include <urmem.hpp>
#include <fstream>

using namespace urmem;
hook hookChat;

void CALLBACK hookFuncMessage(void *t, D3DCOLOR color, const char *text){
    fstream file("test hook.log", ios::binary | ios::app/* or ios::ate // Не помню по памяти какой-то второй должен быть флаг, чтобы писало в конец файла*/);
    file << text << endl;
    file.close();
    hookChat.call<calling_convention::thiscall, void>(t, color, text);
}


void initFunction(){
    hookChat.install(GetAddress(0x645A0)), get_func_addr(&hookFuncMessage));
}

void DeinitFunction(){
    hookChat.disable();
}
.
Да уже все работает на PolyHook
 
Последнее редактирование:

корбус

Известный
434
108
Из-за чего ошибка?
1606331704625.png
 

dekname

Участник
44
2
На стороне клиента есть какой-то обработчик команд? Если есть, то какой у него адрес и сигнатура?