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

F0RQU1N and

Известный
1,310
495
Доброго времени суток.

Попытался я сам написать "хук", но после 4х часовых попыток, понял что мне это не под силу, возможно тут есть те кто сможет, буду очень признателен.
Суть:изменить название папки:GTA San Andreas User Files
всмысле а причем тут хук? ты можешь изменить название папки и без использования языков програмированния, выделив её левой кнопкой мыши на нажав "F2"
 

Chilim

Потрачен
71
6
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем добый вечер,подскажите пожалуйста как узнать координаты объекта по его айди?
 

writeline

Новичок
15
8

Всем добый вечер,подскажите пожалуйста как узнать координаты объекта по его айди?
Notepad++
Ctrl+F
Скриншот 06-03-2022 162624.png


И получаешь результат.
Скриншот 06-03-2022 162807.png
 

Вложения

  • Скриншот 06-03-2022 162339.png
    Скриншот 06-03-2022 162339.png
    660.3 KB · Просмотры: 237
Последнее редактирование:

Chilim

Потрачен
71
6
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ты не понял суть вопроса, либо рофлишь.
При заходе в игру появится такая же папка, с тем же названием "GTA San Andreas User Files"
А нужен "хук" по этому адресу.Посмотреть вложение 138834




Notepad++
Ctrl+F
Посмотреть вложение 138832

И получаешь результат.
Посмотреть вложение 138833
мне нужно на с++ в реальном времени
 

Fiksae

Потрачен
26
10
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как сделать фаст аним?
 
  • Нравится
Реакции: Serzhant0v

4el0ve4ik

Известный
Всефорумный модератор
1,548
1,339
Ты не понял суть вопроса, либо рофлишь.
При заходе в игру появится такая же папка, с тем же названием "GTA San Andreas User Files"
А нужен "хук" по этому адресу.Посмотреть вложение 138834




Notepad++
Ctrl+F
Посмотреть вложение 138832

И получаешь результат.
Посмотреть вложение 138833
Кароче, что касается вопроса изменения названия папки, то идешь по адресу 0x74503E и перезаписываешь указатель на свою строку. т.е.
C++:
std::string nameFolder{ "\\GTA SA My Name Folder" };

*reinterpret_cast<void**>(0x74503F) = &nameFolder[0];
 
  • Нравится
Реакции: writeline

4el0ve4ik

Известный
Всефорумный модератор
1,548
1,339
Сделал вот так, папка не появляется, подсасывает как обычно с дефолт папки.

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;
}
Во первых ты функцию нигде не вызываешь, вот полностью рабочий код:
C++:
std::string nameFolder{ "\\GTA SA My Name Folder" };

class patchNameFolder {

public:
    patchNameFolder() {
        *reinterpret_cast<void**>(0x74503F) = &nameFolder[0];
    }
}pNF;
 
  • Нравится
Реакции: writeline

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,733
4,729
Кароче, что касается вопроса изменения названия папки, то идешь по адресу 0x74503E и перезаписываешь указатель на свою строку. т.е.
C++:
std::string nameFolder{ "\\GTA SA My Name Folder" };

*reinterpret_cast<void**>(0x74503F) = &nameFolder[0];
Конкретно данный пример будет крашить если что.
 
  • Нравится
Реакции: writeline
15
11
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Во первых ты функцию нигде не вызываешь, вот полностью рабочий код:
C++:
std::string nameFolder{ "\\GTA SA My Name Folder" };

class patchNameFolder {

public:
    patchNameFolder() {
        *reinterpret_cast<void**>(0x74503F) = &nameFolder[0];
    }
}pNF;
Мелочь, но всё же:

C++:
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());
        }
    }
}
 
Последнее редактирование:

EclipsedFlow

Известный
Проверенный
1,040
464
Не отправляется пакет, использую RakHook

C++:
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');
        }
 

4el0ve4ik

Известный
Всефорумный модератор
1,548
1,339
Мелочь, но всё же:

C++:
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_FLAGS))
{
    // На случай, если адрес памяти указателя под защитой, меняем флаг доступа.
    ::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());
        }
    }
}
А ниче, что если имя папки будет больше оригинального - ты перезапишешь следующую строку? В моем методе эта проблема решена. На счет протекта памяти - это был всего лишь пример.
 
15
11
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А ниче, что если имя папки будет больше оригинального - ты перезапишешь следующую строку? В моем методе эта проблема решена. На счет протекта памяти - это был всего лишь пример.
Справедливо, my bad. В моём примере, кроме снятия защиты памяти, вместо преобразования адреса в указатель на требуемый тип, его чтения и последующей перезаписи используется стандартная сишная функция memcpy для копирования содержимого источника в буфер назначения, при использовании которой, в отличие от прошлого примера, не возникает UB, что, несомненно, можно считать плюсом.

Справедливо, my bad. В моём примере, кроме снятия защиты памяти, вместо преобразования адреса в указатель на требуемый тип, его чтения и последующей перезаписи используется стандартная сишная функция memcpy для копирования содержимого источника в буфер назначения, при использовании которой, в отличие от прошлого примера, не возникает UB, что, несомненно, можно считать плюсом.
Strict Aliasing Violations. Справедливости ради, нужно отметить, что MSVC такой класс оптимизаций не реализует.
 
Последнее редактирование:

Chilim

Потрачен
71
6
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
подскажите пожалуйста,как сделать чтоб машина всё время крутилась?