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

F0RQU1N and

Известный
1,307
498
И снова доброго времени суток господа.

Как заменить строку при подключении "SAMP 0.3.7 R3 и тд" на "SAMP 0.3.7 R1"
Просто заменить данную строку.



Возможно будет полезно:
mem::copy((PVOID)(samp + 0x85FE), (PVOID)&str_connecting, 4); //connecting
mem::copy((PVOID)(samp + 0xAB11), (PVOID)&str_entering, 4); //connected enter....
mem::copy((PVOID)(samp + 0x1074B), (PVOID)&str_fullconnected, 4); //entered
mem::copy((PVOID)(samp + 0xB7C5), (PVOID)&str_welcome, 4); //samp 037....
mem::copy((PVOID)(samp + 0x8A77), (PVOID)&str_kicked, 4); //closed
mem::copy((PVOID)(samp + 0x8AF7), (PVOID)&str_timeout, 4); //didnt respond
mem::copy((PVOID)(samp + 0xB045), (PVOID)&str_timeout, 4); //didnt respond
mem::copy((PVOID)(samp + 0x8A47), (PVOID)&str_full, 4); //is full
mem::copy((PVOID)(samp + 0xB008), (PVOID)&str_full, 4); //is full
mem::copy((PVOID)(samp + 0xA3C5), (PVOID)&str_restart, 4); //server is resta
mem::copy((PVOID)(samp + 0xA9AA), (PVOID)&str_lost, 4); //lost

mem::copy((PVOID)(samp + 0x10275), (PVOID)&uncnick, 4);
mem::copy((PVOID)(samp + 0x10285), (PVOID)&uncnick2, 4);
mem::copy((PVOID)(samp + 0x10296), (PVOID)&uncnick3, 4);
mem::copy((PVOID)(samp + 0x102A7), (PVOID)&uncnick4, 4);

mem::copy((PVOID)(samp + 0xAC70), (PVOID)&fakever, 4); //0.3.7-R3
mem::copy((PVOID)(samp + 0x5FECD), (PVOID)&fakever, 4); //0.3.7-R3
*reinterpret_cast<PVOID*>(samp + 0xB7C5) = "SAMP 0.3.7 R1"; наверна так
 
  • Bug
  • Нравится
Реакции: writeline и kin4stat

Chilim

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

legendabrn

Известный
Проверенный
120
170
samp - это адрес в памяти
0xB7C5 это смещение
Нужно хукнуть samp.dll?
Или как сделать что бы просто работало? 😄
C++:
std::string chatSAMP{ "SAMP 0.3.7 R1" };

class patchChatSAMP {

public:
    patchChatSAMP() {
        *reinterpret_cast<PVOID*>(GetModuleHandleA("samp.dll") + 0xB7C5) = &chatSAMP;
    }
}
 
  • Bug
  • Нравится
Реакции: F0RQU1N and и kin4stat

legendabrn

Известный
Проверенный
120
170
на данное предупреждение можешь не обращать внимания, .asi плагины подгружаются после подгрузки модуля samp.dll, а значит он уже не может быть пустым
если это весь твой код - то у тебя не инициализирован класс
C++:
std::string chatSAMP{ "SAMP 0.3.7 R1" };

class patchChatSAMP {

public:
    patchChatSAMP() {
        *reinterpret_cast<PVOID*>(GetModuleHandleA("samp.dll") + 0xB7C5) = &chatSAMP;
    }
} pChatSAMP;
 
  • Нравится
Реакции: F0RQU1N and и writeline

F0RQU1N and

Известный
1,307
498
С++:
#include "pch.h"
#include "string"

std::string chatSAMP{ "SAMP 0.3.7 R1" };

class patchChatSAMP {

public:
    patchChatSAMP() {
        *reinterpret_cast<PVOID*>(GetModuleHandleA("samp.dll") + 0xB7C5) = &chatSAMP;
    }
} pChatSAMP;


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;
}

Всё равно не хочет работать 😒

Посмотреть вложение 140403
Посмотреть вложение 140404
так ты прям в иде можешь поменять байты
 
  • Bug
Реакции: 4el0ve4ik

legendabrn

Известный
Проверенный
120
170
С++:
#include "pch.h"
#include "string"

std::string chatSAMP{ "SAMP 0.3.7 R1" };

class patchChatSAMP {

public:
    patchChatSAMP() {
        *reinterpret_cast<PVOID*>(GetModuleHandleA("samp.dll") + 0xB7C5) = &chatSAMP;
    }
} pChatSAMP;


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;
}

Всё равно не хочет работать 😒

Посмотреть вложение 140403
Посмотреть вложение 140404
C++:
#include "pch.h"
#include <string>

std::string chatSAMP{ "SAMP 0.3.7 R1" };

class patchChatSAMP {
private:
    uintptr_t module_samp{ 0 };

public:
    patchChatSAMP() {
        module_samp = reinterpret_cast<uintptr_t>(GetModuleHandleA("samp.dll"));

        DWORD lpflOldProtect;
        VirtualProtect(reinterpret_cast<LPVOID>(module_samp + 0xB7C5), 0x4, PAGE_EXECUTE_READWRITE, &lpflOldProtect);
        *reinterpret_cast<LPVOID*>(module_samp + 0xB7C5) = &chatSAMP;
        VirtualProtect(reinterpret_cast<LPVOID>(module_samp + 0xB7C5), 0x4, lpflOldProtect, &lpflOldProtect);
    }
} pChatSAMP;

upd, правильный вариант:
C++:
#include "pch.h"
#include <string>

std::string chatSAMP{ "SAMP 0.3.7 R1" };

class patchChatSAMP {
private:
    uintptr_t module_samp{ 0 };

public:
    patchChatSAMP() {
        module_samp = reinterpret_cast<uintptr_t>(GetModuleHandleA("samp.dll"));

        DWORD lpflOldProtect;
        VirtualProtect(reinterpret_cast<LPVOID>(module_samp + 0xB7C5), 0x4, PAGE_EXECUTE_READWRITE, &lpflOldProtect);
        *reinterpret_cast<LPVOID*>(module_samp + 0xB7C5) = &chatSAMP[0];
        VirtualProtect(reinterpret_cast<LPVOID>(module_samp + 0xB7C5), 0x4, lpflOldProtect, &lpflOldProtect);
    }
} pChatSAMP;
 
Последнее редактирование:
  • Нравится
Реакции: writeline

sc6ut

неизвестный
Модератор
382
1,089
вы ебнутые? @legendabrn
какой нахуи std::string
C++:
#include <windows.h>

BOOL APIENTRY DllMain( HMODULE, DWORD dwReason, LPVOID ) {
    if ( dwReason == DLL_PROCESS_ATTACH ) {
        auto samp = (DWORD)GetModuleHandleA( "samp.dll" );
        auto addr = samp + 0xE596Cu + 29u;
        DWORD vp = PAGE_EXECUTE_READWRITE;
        VirtualProtect( (void *)addr, 1u, vp, &vp );
        *(char *)addr = '1';
        VirtualProtect( (void *)addr, 1u, vp, nullptr );
    }
}
 
Последнее редактирование:
  • Bug
Реакции: 4el0ve4ik и legendabrn

legendabrn

Известный
Проверенный
120
170
вы ебнутые? @zTechnology @legendabrn
C++:
#include <windows.h>

BOOL APIENTRY DllMain( HMODULE, DWORD dwReason, LPVOID ) {
    if ( dwReason == DLL_PROCESS_ATTACH ) {
        auto samp = (DWORD)GetModuleHandleA( "samp.dll" );
        auto addr = samp + 0xE596Cu + 29u;
        DWORD vp = PAGE_EXECUTE_READWRITE;
        VirtualProtect( (void *)addr, 1, vp, &vp );
        *(char *)addr = '1';
        VirtualProtect( (void *)addr, 1, vp, nullptr );
    }
}
зачем трогать оригинальную строчку, ведь если ему потребуется использовать строку больше 46 символов, то твой пример затронет и чужую строку
 
  • Нравится
Реакции: 4el0ve4ik

sc6ut

неизвестный
Модератор
382
1,089
зачем трогать оригинальную строчку, ведь если ему потребуется использовать строку больше 46 символов, то твой пример затронет и чужую строку
ему надо 1 символ поменять, кстати твой пример тоже работать не будет, там const char[] а ты подменяешь на std::string.
 

legendabrn

Известный
Проверенный
120
170
ему надо 1 символ поменять, кстати твой пример тоже работать не будет, там const char[] а ты подменяешь на std::string.
1647695890822.png

если что, мы подменяем указатель на строку
 
  • Нравится
Реакции: writeline и 4el0ve4ik

sc6ut

неизвестный
Модератор
382
1,089

sc6ut

неизвестный
Модератор
382
1,089