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

AdCKuY_DpO4uLa

Известный
287
477
Вместо того, чтобы умничать, могли бы объяснить как работают новые хуки, про которые ни слова нигде не написано. В readme и "гайде" описаны методы, которые были больше года назад актуальны.
Вместо методов из примера есть set_cb, который чтобы использовать, надо преисполнится в плюсах. Код с reset remove, выглядит как заклинание, написанное insane'ом(безумцем)
C++:
window_init_hook.set_cb([this](const auto& hook, auto&& hinst)
Я, конечно, понимаю, что лямбда функции это супер удобно. Но вариант из гайда явно проще и понятнее. А объяснение почему функция принимает ссылку на хук и, как я понимаю, ссылку на ссылку на адрес ,который указан при инициализации хука?
если тебе нужен пример того, как ставить хуки, то вот, когда-то че-то хукал, не помню когда и что, мейби разберешься
C++:
kthook::kthook_simple<unsigned __int8** (__fastcall*)(unsigned __int64*)> unkHook{};
unsigned __int8** __fastcall Unk_HOOKED(const decltype(unkHook)&hook, unsigned __int64* param_1) {

    printf("0x%llX\n", (std::uintptr_t)param_1);

    return hook.get_trampoline()(param_1);
}
//install
std::uintptr_t UnkAddrHook = 0x10B1B60;
unkHook.set_dest(UnkAddrHook);
unkHook.set_cb(&Unk_HOOKED);
unkHook.install();
 
  • Клоун
  • Вау
Реакции: Fott и Z3roKwq

papercut

Участник
90
13
если тебе нужен пример того, как ставить хуки, то вот, когда-то че-то хукал, не помню когда и что, мейби разберешься
C++:
kthook::kthook_simple<unsigned __int8** (__fastcall*)(unsigned __int64*)> unkHook{};
unsigned __int8** __fastcall Unk_HOOKED(const decltype(unkHook)&hook, unsigned __int64* param_1) {

    printf("0x%llX\n", (std::uintptr_t)param_1);

    return hook.get_trampoline()(param_1);
}
//install
std::uintptr_t UnkAddrHook = 0x10B1B60;
unkHook.set_dest(UnkAddrHook);
unkHook.set_cb(&Unk_HOOKED);
unkHook.install();
Спасибо. Сделал, правда, уже по твоему гайду через sdk и samp api.

Вопрос: Как зафорсить отправку синхронизации, которая отправляется при открытии скорборда? Как я понимаю, это RPC_UpdateScoresPingsIPs. Но мне нужно именно зафорсить чтобы сама игра отправила этот рпк(если это рпк) и сама заполнила значениями все пулы. Иначе пока игрок не откроет таб, у всех 0 лвл.
 

al3x_

Известный
130
1,043
Вопрос: Как зафорсить отправку синхронизации, которая отправляется при открытии скорборда? Как я понимаю, это RPC_UpdateScoresPingsIPs. Но мне нужно именно зафорсить чтобы сама игра отправила этот рпк(если это рпк) и сама заполнила значениями все пулы. Иначе пока игрок не откроет таб, у всех 0 лвл.
C++:
reinterpret_cast<void(__thiscall*)(void*)>(samp.dll + 0x8A10\0x8BA0 r1\r3-1)(pSAMP);
 

Andrinall

Известный
678
531
1.Как можно сделать авто обновление exe файла любыми возможными методами
Когда-то интересовался авто-обновлением SF плагина, наткнулся на это, где наткнулся - уже не помню, но осталось в записях.
Запускается данное чудо в консоли.
Не знаю, сработает ли так, но вот:
C++:
system("taskkill /f /im \"your.exe\" && timeout /t 1 && del \"your.exe\" && ren \"temp_file.exe\" \"your.exe\" && \"your.exe\"");

upd: если что, перед выполнением этого надо скачать новую версию exeшника. (temp_file.exe - путь к новой версии)
 

Digger Man

Любитель Linux
Модератор
1,635
1,116
Какой оффсетик может отвечать за тюнинг машинок в сингле
 

EclipsedFlow

Известный
Проверенный
1,040
462
Не получается сделать асинхронный http/https запрос. Крашит или зависает игра(но потом крашит).
Кстати - Мне нужно постоянно получать данные у сайта, так что функция вызывается в цикле

C++:
#include <thread>
#include <mutex>
#include <cpr/cpr.h>

mutex mtx{};

void GetAsyncRequest(const string& Address)
{
    cpr::Response{};
    auto Resp = [&]() {
        mtx.lock();
        Response = cpr::Get(Address);
        mtx.unlock();
    };

    thread(Resp).detach();
    return Response;
}

const string Address{"https:\\blast.hk"};
auto Responce = GetAsyncRequest(Address);
 

why ega

РП игрок
Модератор
2,539
2,231
вроде сделал все по гайду, но чет не изменяется погода
main.cpp:
#include "main.hpp"

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_KEYUP:
        {
            switch (wParam)
            {
                case VK_F10: {
                    *reinterpret_cast<unsigned char*>(0xC81320) += 1;
                    printStringNow("2", 1000, NULL, false);
                    break;                   
                }
                case VK_F2: {
                    *reinterpret_cast<unsigned char*>(0xC81320) -= 1;
                    printStringNow("3", 1000, NULL, false);
                    break;                   
                }
            }               
        }
    }
    return CallWindowProcA(WNDPROC(wHandle), hwnd, uMsg, wParam, lParam);
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH: {
            DisableThreadLibraryCalls(hModule);           
            wHandle = SetWindowLongA(FindWindowA(NULL, "GTA:SA:MP"), GWL_WNDPROC, LONG(WindowProc));
            break;
        }
        case DLL_PROCESS_DETACH: {
            break;
        }
    }
    return TRUE;
}
main.hpp:
#pragma once

#include <windows.h>
#include <process.h>

LONG wHandle;

void printStringNow(const char* text, unsigned int time, unsigned short flag, bool bPreviousBrief)
{
    ((void(__cdecl*)(const char*, unsigned int, unsigned short, bool))0x69F1E0)(text, time, flag, bPreviousBrief);
}
 

ARMOR

kjor32 is legend
Модератор
4,847
6,071
вроде сделал все по гайду, но чет не изменяется погода
main.cpp:
#include "main.hpp"

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_KEYUP:
        {
            switch (wParam)
            {
                case VK_F10: {
                    *reinterpret_cast<unsigned char*>(0xC81320) += 1;
                    printStringNow("2", 1000, NULL, false);
                    break;                  
                }
                case VK_F2: {
                    *reinterpret_cast<unsigned char*>(0xC81320) -= 1;
                    printStringNow("3", 1000, NULL, false);
                    break;                  
                }
            }              
        }
    }
    return CallWindowProcA(WNDPROC(wHandle), hwnd, uMsg, wParam, lParam);
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH: {
            DisableThreadLibraryCalls(hModule);          
            wHandle = SetWindowLongA(FindWindowA(NULL, "GTA:SA:MP"), GWL_WNDPROC, LONG(WindowProc));
            break;
        }
        case DLL_PROCESS_DETACH: {
            break;
        }
    }
    return TRUE;
}
main.hpp:
#pragma once

#include <windows.h>
#include <process.h>

LONG wHandle;

void printStringNow(const char* text, unsigned int time, unsigned short flag, bool bPreviousBrief)
{
    ((void(__cdecl*)(const char*, unsigned int, unsigned short, bool))0x69F1E0)(text, time, flag, bPreviousBrief);
}
Там нужно сам плагин подгрузить с помощью pload( команда для консоли sf ), или процесс хакером
 

ARMOR

kjor32 is legend
Модератор
4,847
6,071
та я вроде асишник сделал, поидее его аси лоадер должен подгружать
Там wndProc подключается к GTA:SA:MP, а во время окна загрузки игры у окна игры другое название.

дайте адрес конструктора CTaskSimpleRunNamedAnim
0x61A990
Прототип (спиздил с иды) :
C++:
CTaskSimpleRunNamedAnim *__thiscall CTaskSimpleRunNamedAnim::CTaskSimpleRunNamedAnim(CTaskSimpleRunNamedAnim *this, int animName, int fileName, int flags, float frameDelta, int time, char nonInterruptable, char isActiveSequence, char dontLockZ, char a10)
 

why ega

РП игрок
Модератор
2,539
2,231
Там wndProc подключается к GTA:SA:MP, а во время окна загрузки игры у окна игры другое название.
не пон, так вродя мне и надо, шоб к уже загруженному сампу регался вндпрок
1670703447019.png
 
  • Эм
  • Bug
Реакции: F0RQU1N and и ARMOR