Так вообще ничего не происходитПопробуй писать еще и по этому адресу: 0x00B7358C
Так вообще ничего не происходитПопробуй писать еще и по этому адресу: 0x00B7358C
#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>
#include <tchar.h>
#include <psapi.h>
using namespace std;
DWORD GetProcId(const wchar_t* procname)
{
PROCESSENTRY32 pe;
HANDLE hSnap;
pe.dwSize = sizeof(PROCESSENTRY32);
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (Process32First(hSnap, &pe)) {
do {
if (wcscmp(pe.szExeFile, procname) == 0)
break;
} while (Process32Next(hSnap, &pe));
}
return pe.th32ProcessID;
}
DWORD get_module(HANDLE hProcess, const wchar_t* name)
{
HMODULE hMods[1024];
DWORD cbNeeded;
unsigned int i;
if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
{
for (i = 0; i < (cbNeeded / sizeof(HMODULE)); i++)
{
TCHAR szModName[MAX_PATH];
if (GetModuleBaseName(hProcess, hMods[i], szModName, sizeof(szModName) / sizeof(TCHAR)))
{
if (wcscmp(szModName, name) == 0) return (DWORD)hMods[i];
}
}
}
CloseHandle(hProcess);
return 0;
}
int main()
{
DWORD pID = GetProcId(L"gta_sa.exe");
HANDLE pGta = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);
DWORD pSamp = (DWORD)get_module(pGta, L"samp.dll");
float X = 0, Y = 0, Z = 0;
while (true)
{
ReadProcessMemory(pGta, (LPCVOID)(pSamp + 0x76F3B8 + 0x14 + 0x30), &X, 8, 0);
ReadProcessMemory(pGta, (LPCVOID)(pSamp + 0x76F3B8 + 0x14 + 0x34), &Y, 8, 0);
ReadProcessMemory(pGta, (LPCVOID)(pSamp + 0x76F3B8 + 0x14 + 0x38), &Z, 8, 0);
cout << "My Coord: " << X << " | " << Y << " | " << Z << endl;
}
}
Зачем тебе тут самп, если получить можно с помощью указателя локального CPed'a1. Ваш вопрос. Решил на самоизоляции попробовать написать на C++ простой код. Раньше этого не делал, поэтому возможны костыли и небрежность. Суть в чем - выводится не то, что нужно, а именно:
Посмотреть вложение 53043
Может кто показать ошибку?
C++:#include <iostream> #include <Windows.h> #include <TlHelp32.h> #include <tchar.h> #include <psapi.h> using namespace std; DWORD GetProcId(const wchar_t* procname) { PROCESSENTRY32 pe; HANDLE hSnap; pe.dwSize = sizeof(PROCESSENTRY32); hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); if (Process32First(hSnap, &pe)) { do { if (wcscmp(pe.szExeFile, procname) == 0) break; } while (Process32Next(hSnap, &pe)); } return pe.th32ProcessID; } DWORD get_module(HANDLE hProcess, const wchar_t* name) { HMODULE hMods[1024]; DWORD cbNeeded; unsigned int i; if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded)) { for (i = 0; i < (cbNeeded / sizeof(HMODULE)); i++) { TCHAR szModName[MAX_PATH]; if (GetModuleBaseName(hProcess, hMods[i], szModName, sizeof(szModName) / sizeof(TCHAR))) { if (wcscmp(szModName, name) == 0) return (DWORD)hMods[i]; } } } CloseHandle(hProcess); return 0; } int main() { DWORD pID = GetProcId(L"gta_sa.exe"); HANDLE pGta = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID); DWORD pSamp = (DWORD)get_module(pGta, L"samp.dll"); float X = 0, Y = 0, Z = 0; while (true) { ReadProcessMemory(pGta, (LPCVOID)(pSamp + 0x76F3B8 + 0x14 + 0x30), &X, 8, 0); ReadProcessMemory(pGta, (LPCVOID)(pSamp + 0x76F3B8 + 0x14 + 0x34), &Y, 8, 0); ReadProcessMemory(pGta, (LPCVOID)(pSamp + 0x76F3B8 + 0x14 + 0x38), &Z, 8, 0); cout << "My Coord: " << X << " | " << Y << " | " << Z << endl; } }
Можно узнать, как это сделать? Я нашёл исходник один и решил попробовать это сделать, поэтому особо не знаю, как найти CPedЗачем тебе тут самп, если получить можно с помощью указателя локального CPed'a
Сработало?Как строку перевести в utf-8? Есть ли штука типа u8, но чтобы работала еще и с переменными?
VMProtect снимается на изи, и очень сильно нагружает процесс gta, все другие распаковщики так же снимаются, и вообще обязательно найдётся человек, который снимет твой протект за плату. Смысл тогда защищать его? И да, с VMProtect при правильных настройках не будет видно что там ImGui.если у меня в длл будет использоваться имгуи, и при условии что я запротекчу ее VMProtect, возможно ли будет по сигнатуре файла распознать что там есть имгуи?
нагружает защита памятиочень сильно нагружает процесс gta
void CALLBACK getp(std::string param) {
DWORD color = GetPixel(GetDC(GetActiveWindow()), 380, 770);
char c[4];
sprintf(c, "%d", color);
sampAddChatMessage(D3DCOLOR_XRGB(0xAA, 0xAA, 0xAA), c);
}
я задолбался
#include <regex>
#include <charconv>
// ...
void __stdcall getp(std::string param) {
std::smatch match;
const auto regex_result = std::regex_search(param, match, std::regex(R"eof((\d+)\s+(\d+))eof"));
struct DCResource {
HWND hwnd;
HDC hdc;
DCResource(const HWND hwnd = ::GetActiveWindow()) : hwnd(hwnd), hdc(::GetDC(this->hwnd)) {}
~DCResource() {
::ReleaseDC(hwnd, hdc);
}
inline HDC operator*() {
return hdc;
}
};
int numbers[2];
for (unsigned int i = 0; i < 2; i++) {
bool defaults = true;
if (regex_result) {
const auto str = match[i + 1].str();
if (std::from_chars(str.data(), str.data() + str.size(), numbers[i]).ec == std::errc()) {
defaults = false;
}
}
if (defaults) {
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_RGBA(255, 255, 0, 0),
"<warning>: Defaulting %s to 0", !i ? "X" : "Y");
numbers[i] = 0;
}
}
union {
struct {
unsigned red : 8;
unsigned green : 8;
unsigned blue : 8;
unsigned alpha : 8;
};
COLORREF as_int;
} color{ .as_int = ::GetPixel(*DCResource{}, numbers[0], numbers[1]) };
if (color.as_int == CLR_INVALID) {
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(255, 255, 0),
"<error>: Color cannot be retrieved");
}
else {
SF->getSAMP()->getChat()->AddChatMessage(color.as_int | 0xFF000000,
"Color of the point %d %d is the following: %u (0x%x) (R: %u, G: %u, B: %u)",
numbers[0], numbers[1], color.as_int, color.as_int,
color.red,
color.green,
color.blue
);
}
}
знаешь как правильно настроить вмпротект чтобы не было видно имгуи?VMProtect снимается на изи, и очень сильно нагружает процесс gta, все другие распаковщики так же снимаются, и вообще обязательно найдётся человек, который снимет твой протект за плату. Смысл тогда защищать его? И да, с VMProtect при правильных настройках не будет видно что там ImGui.
---------------------------------------------------
Кто знает как можно сделать поиск hex строк или просто строк в памяти процесса gta? Искал долго оч, так и не нашел, вроде пробывал чекать в исходниках Process Hacker там где функция Memory -> Strings но тоже не нашел. буду оч благодарен если подскажите КОДОМ