после переделки своей библиотеки я не переделал пример в 3 гайдеделал все по гайду kin4stat, вылезли такие ошибки, что я мог сделать не так?Посмотреть вложение 138267
можешь пожалуйста подсказать что нужно поменятьпосле переделки своей библиотеки я не переделал пример в 3 гайде
скачай старый коммит с гитхаба и поставьможешь пожалуйста подсказать что нужно поменять
всмысле а причем тут хук? ты можешь изменить название папки и без использования языков програмированния, выделив её левой кнопкой мыши на нажав "F2"Доброго времени суток.
Попытался я сам написать "хук", но после 4х часовых попыток, понял что мне это не под силу, возможно тут есть те кто сможет, буду очень признателен.
Суть:изменить название папки:GTA San Andreas User Files
Notepad++Всем добый вечер,подскажите пожалуйста как узнать координаты объекта по его айди?
А нужен "хук" по этому адресу.
мне нужно на с++ в реальном времениТы не понял суть вопроса, либо рофлишь.
При заходе в игру появится такая же папка, с тем же названием "GTA San Andreas User Files"
А нужен "хук" по этому адресу.Посмотреть вложение 138834
Notepad++
Ctrl+F
Посмотреть вложение 138832
И получаешь результат.
Посмотреть вложение 138833
Кароче, что касается вопроса изменения названия папки, то идешь по адресу 0x74503E и перезаписываешь указатель на свою строку. т.е.Ты не понял суть вопроса, либо рофлишь.
При заходе в игру появится такая же папка, с тем же названием "GTA San Andreas User Files"
А нужен "хук" по этому адресу.Посмотреть вложение 138834
Notepad++
Ctrl+F
Посмотреть вложение 138832
И получаешь результат.
Посмотреть вложение 138833
std::string nameFolder{ "\\GTA SA My Name Folder" };
*reinterpret_cast<void**>(0x74503F) = &nameFolder[0];
Во первых ты функцию нигде не вызываешь, вот полностью рабочий код:Сделал вот так, папка не появляется, подсасывает как обычно с дефолт папки.
C++:#include "pch.h" #include "string" void USER_FILES() { std::string nameFolder{ "\\GTA SA My Name Folder" }; *reinterpret_cast<void**>(0x74503F) = &nameFolder[0]; } BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
std::string nameFolder{ "\\GTA SA My Name Folder" };
class patchNameFolder {
public:
patchNameFolder() {
*reinterpret_cast<void**>(0x74503F) = &nameFolder[0];
}
}pNF;
Конкретно данный пример будет крашить если что.Кароче, что касается вопроса изменения названия папки, то идешь по адресу 0x74503E и перезаписываешь указатель на свою строку. т.е.
C++:std::string nameFolder{ "\\GTA SA My Name Folder" }; *reinterpret_cast<void**>(0x74503F) = &nameFolder[0];
Мелочь, но всё же:Во первых ты функцию нигде не вызываешь, вот полностью рабочий код:
C++:std::string nameFolder{ "\\GTA SA My Name Folder" }; class patchNameFolder { public: patchNameFolder() { *reinterpret_cast<void**>(0x74503F) = &nameFolder[0]; } }pNF;
std::string desiredFolderName{"Example"};
void* folderNameAddress{reinterpret_cast<void*>(0x74503F)};
// Проверяем доступность страницы виртуальной памяти, в которой расположен указатель.
::MEMORY_BASIC_INFORMATION mbi{};
if (0 != ::VirtualQuery(folderNameAddress, &mbi, sizeof(mbi)) &&
mbi.State == MEM_COMMIT && (mbi.Protect & (PAGE_EXECUTE | PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY)))
{
// На случай, если адрес памяти указателя под защитой, меняем флаг доступа.
::DWORD protectionFlagsBefore{};
if (::VirtualProtect(
folderNameAddress,
sizeof(void*),
PAGE_READWRITE,
&protectionFlagsBefore))
{
// Клонируем указатель, который находится по данному адресу.
char* folderNamePtr{nullptr};
std::memcpy(&folderNamePtr, folderNameAddress, sizeof(char*));
if (nullptr != folderNamePtr)
{
// Если указатель валиден, то записываем значение прямо в его объект, в отличие от прошлого примера.
// Метод перезаписи адреса, на кой направляет указатель, мне не очень нравится,
// ибо придётся постоянно держать в памяти объект, созданный нами для сего деяния.
// Потому делаем иначе!
std::memcpy(
folderNamePtr,
desiredFolderName.c_str(),
desiredFolderName.size());
}
}
}
void SendVehiclePacket(unsigned __int16 vehID, CVector pos, CVector speed)
{
stInCarData data = {0};
data.sVehicleID = vehID;
data.fPosition[0] = pos.x;
data.fPosition[1] = pos.y;
data.fPosition[2] = pos.z;
data.fMoveSpeed[0] = speed.x;
data.fMoveSpeed[1] = speed.y;
data.fMoveSpeed[2] = speed.z;
data.fQuaternion[0] = 0;
data.fQuaternion[1] = 0;
data.fQuaternion[2] = 0;
data.fQuaternion[3] = 0;
data.fVehicleHealth = 1000.0f;
RakNet::BitStream bs;
bs.Write<unsigned __int8>(ID_VEHICLE_SYNC);
bs.Write((PCHAR)&data, sizeof(stInCarData));
rakhook::send(&bs, PacketPriority::HIGH_PRIORITY, PacketReliability::RELIABLE, '\000');
}