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

loganhackerdff

Известный
868
517
поставил простой хук на RPC Create3d text label, чтоб он перезаписывал дистанцию видимости, но почемуто крашит
C++:
bool CALLBACK incRPC(stRakNetHookParams* p)
{
    if (bDistUp)
    {
        if (p->packetId == RPC_ScrCreate3DTextLabel)
        {
            
            float dist;
            p->bitStream->SetReadOffset(144);
            p->bitStream->Read(dist);
            p->bitStream->ResetReadPointer();
            if (dist == 5.0)
            {
                p->bitStream->SetWriteOffset(144);
                dist = 15.0;
                p->bitStream->Write(dist);
                p->bitStream->ResetWritePointer();
            }
        }
    }
    return true;
}
почему то затирает всё после дистанции, ну чо за приколы
C++:
bool CALLBACK rpchook(stRakNetHookParams* p)
{
    if (p->packetId == RPC_ScrCreate3DTextLabel)
    {
        p->bitStream->SetWriteOffset(144);
        p->bitStream->Write((float)15.0);
    }
    
    return true;
}
 
Последнее редактирование:

ucciModd

Новичок
18
2
1. Как выгрузить asi/dll?
2. Почему геймстейт выводит неправильно?
1588169223051.png

Структуру (R3) взял с самп апи (https://github.com/BlastHackNet/SAMP-API)
 
Последнее редактирование:

loganhackerdff

Известный
868
517
возможно ли сделать невидимый на фрапсе вх на SF, рисуя через методы SF.getRender?
я пытался через vmthookmanager хукать девайс который создавал для созданного окна, но крашило
по тупому я делал както
 
Последнее редактирование:

Blood

Известный
45
1
if (params->packetId == 151) 151 incoming rpc, можно его полное название?
 

manukhov

Известный
126
128
Ошибка LNK2019 ссылка на неразрешенный внешний символ "extern "C" struct HDC__ * __stdcall GetDC(struct HWND__ *)" (?GetDC@@$$J14YGPAUHDC__@@PAUHWND__@@@Z) в функции "void __clrcall `dynamic initializer for 'hdc''(void)" (???__Ehdc@@YMXXZ@?A0xa98138a8@@$$FYMXXZ)

Юникод на многобайтовую кодировку менял, не помогло. На странице ошибки слишком размыто и инфы конкретной я не нашел

Memory.h:
#include <Windows.h>
#include <TlHelp32.h>
#include <iostream>
#include <memory.h>
#include <memory>


DWORD GetProcId(const char* procName)
{
    DWORD procId = 0;
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hSnap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 procEntry;
        procEntry.dwSize = sizeof(procEntry);

        if (Process32First(hSnap, &procEntry))
        {
            do
            {
                if (!strcmp(procEntry.szExeFile, procName))
                {
                    procId = procEntry.th32ProcessID;
                    break;
                }
            } while (Process32Next(hSnap, &procEntry));

        }
    }
    CloseHandle(hSnap);
    return procId;
}

uintptr_t GetModuleBaseAddress(DWORD procId, const char* modName)
{
    uintptr_t modBaseAddr = 0;
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId);
    if (hSnap != INVALID_HANDLE_VALUE)
    {
        MODULEENTRY32 modEntry;
        modEntry.dwSize = sizeof(modEntry);
        if (Module32First(hSnap, &modEntry))
        {
            do
            {
                if (!strcmp(modEntry.szModule, modName))
                {
                    modBaseAddr = (uintptr_t)modEntry.modBaseAddr;
                    break;
                }
            } while (Module32Next(hSnap, &modEntry));
        }
    }
    CloseHandle(hSnap);
    return modBaseAddr;
}

uintptr_t moduleBase = GetModuleBaseAddress(GetProcId("gta_sa.exe"), "samp.dll");
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, NULL, GetProcId("gta_sa.exe"));
HDC hdc = GetDC(FindWindowA(NULL, "GTA:SA:MP"));

template<typename T> T RPM(SIZE_T address) {
   
    T buffer;

  
    ReadProcessMemory(hProcess, (LPCVOID)address, &buffer, sizeof(T), NULL);


    return buffer;
}
 

SR_team

like pancake
BH Team
4,720
6,369
Ошибка LNK2019 ссылка на неразрешенный внешний символ "extern "C" struct HDC__ * __stdcall GetDC(struct HWND__ *)" (?GetDC@@$$J14YGPAUHDC__@@PAUHWND__@@@Z) в функции "void __clrcall `dynamic initializer for 'hdc''(void)" (???__Ehdc@@YMXXZ@?A0xa98138a8@@$$FYMXXZ)

Юникод на многобайтовую кодировку менял, не помогло. На странице ошибки слишком размыто и инфы конкретной я не нашел

Memory.h:
#include <Windows.h>
#include <TlHelp32.h>
#include <iostream>
#include <memory.h>
#include <memory>


DWORD GetProcId(const char* procName)
{
    DWORD procId = 0;
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hSnap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 procEntry;
        procEntry.dwSize = sizeof(procEntry);

        if (Process32First(hSnap, &procEntry))
        {
            do
            {
                if (!strcmp(procEntry.szExeFile, procName))
                {
                    procId = procEntry.th32ProcessID;
                    break;
                }
            } while (Process32Next(hSnap, &procEntry));

        }
    }
    CloseHandle(hSnap);
    return procId;
}

uintptr_t GetModuleBaseAddress(DWORD procId, const char* modName)
{
    uintptr_t modBaseAddr = 0;
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId);
    if (hSnap != INVALID_HANDLE_VALUE)
    {
        MODULEENTRY32 modEntry;
        modEntry.dwSize = sizeof(modEntry);
        if (Module32First(hSnap, &modEntry))
        {
            do
            {
                if (!strcmp(modEntry.szModule, modName))
                {
                    modBaseAddr = (uintptr_t)modEntry.modBaseAddr;
                    break;
                }
            } while (Module32Next(hSnap, &modEntry));
        }
    }
    CloseHandle(hSnap);
    return modBaseAddr;
}

uintptr_t moduleBase = GetModuleBaseAddress(GetProcId("gta_sa.exe"), "samp.dll");
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, NULL, GetProcId("gta_sa.exe"));
HDC hdc = GetDC(FindWindowA(NULL, "GTA:SA:MP"));

template<typename T> T RPM(SIZE_T address) {
 
    T buffer;


    ReadProcessMemory(hProcess, (LPCVOID)address, &buffer, sizeof(T), NULL);


    return buffer;
}
dbghelp и gdi32 в линкере подключи
 

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Я делал, но способ крайне тупой. Записывать из события окна WM_CHAR значения в строку и после каждой записи производить поиск подстроки нужной и если результат истинный, то активировал нужный кусок кода и очищал строку. Так же делал фильтрацию на длинную строки в 32 символа, чтобы не забивать память.
Если строка была длинее 32 символов, то удалял первый символ из неё.
 
  • Нравится
Реакции: 4el0ve4ik

Merger

Новичок
1
0
Как в asi можно получить указатель на cchat. Тот, что передается первым аргументом в AddMessage.
 

ALF

Известный
Проверенный
320
537
Как сделать активацию по читкоду в sf?
C++:
// https://github.com/cleolibrary/CLEO4/blob/master/source/CTextManager.cpp#L67
bool TestCheat(const char* cheat)
{
    char* c = reinterpret_cast<char*>(0x00969110);
    char buf[30];
    strcpy(buf, cheat);
    char* s = _strrev(buf);
    if (_strnicmp(s, c, strlen(s))) return false;
    *reinterpret_cast<char*>(0x00969110) = 0;
    return true;
}

if (TestCheat("cheat"))
{
    // ...
}
 
Последнее редактирование:

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Такой вопрос. Он В самповских тексдравах есть возможность рендерить модель обьекта(педов, машин и т.д). Собственно, у меня такой вопрос. Как это можно реализовать самому и оттуда вытянуть(создать) текстуру в виде LPDIRECT3DTEXTURE9?