Для выполнения права должны быть ReadExecuteПосмотреть вложение 233315
Ставлю ВиртуалПротект - что не так?
Нажимаю типа дальше - пишет "Необработанное исключение по адресу (тому же) в Project3.exe: 0xC0000005: нарушение прав доступа при исполнении по адресу "
Как отправить 2 запроса с одной сессии (с теми же куки и заголовками) при помощи curl?
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* response)
{
response->append((char*)contents, size * nmemb);
return size * nmemb;
}
int main()
{
CURL* curl = curl_easy_init();
if (curl)
{
std::string url = "http://google.com/api";
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
std::string response;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK)
{
std::cout << "error res one: " << curl_easy_strerror(res) << std::endl;
return 1;
}
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
response.clear();
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
res = curl_easy_perform(curl);
if (res != CURLE_OK)
{
std::cout << "error res two: " << curl_easy_strerror(res) << std::endl;
return 1;
}
std::cout << "res res one: " << response << std::endl;
curl_easy_cleanup(curl);
}
return 0;
}
Нужно убрать вот эти слова из памяти от DLL-Библиотеки, использую ManualMap. Слова берет из меню чита, также переменные.
Посмотреть вложение 233322
Не работаетC++:size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* response) { response->append((char*)contents, size * nmemb); return size * nmemb; } int main() { CURL* curl = curl_easy_init(); if (curl) { std::string url = "http://google.com/api"; curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_COOKIEFILE, ""); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); std::string response; curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) { std::cout << "error res one: " << curl_easy_strerror(res) << std::endl; return 1; } curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); response.clear(); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); res = curl_easy_perform(curl); if (res != CURLE_OK) { std::cout << "error res two: " << curl_easy_strerror(res) << std::endl; return 1; } std::cout << "res res one: " << response << std::endl; curl_easy_cleanup(curl); } return 0; }
#include <iostream>
#include <regex>
#include <curl/curl.h>
using namespace std;
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* response);
int main()
{
CURL* curl = curl_easy_init();
string resp;
smatch m;
string token;
curl_httppost* formpost = NULL;
curl_httppost* lastptr = NULL;
curl_slist* headers = curl_slist_append(NULL, "Content-Type: multipart/form-data");
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL, "https://www.blast.hk/members/451976/");
curl_easy_setopt(curl, CURLOPT_COOKIE, "xf_user=VALUE");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &resp);
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK)
{
cout << "Error : " << curl_easy_strerror(res) << endl;
return 1;
}
if (regex_search(resp, m, regex("csrf: '(\\S*)'")))
if (m.size() > 0)
token = m.str(1);
resp.clear();
curl_easy_setopt(curl, CURLOPT_URL, "https://www.blast.hk/members/451976/post");
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "xfToken",
CURLFORM_COPYCONTENTS, token,
CURLFORM_END);
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "_xfToken",
CURLFORM_COPYCONTENTS, token,
CURLFORM_END);
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "_xfResponseType",
CURLFORM_COPYCONTENTS, "json",
CURLFORM_END);
curl_formadd(&formpost, &lastptr,
CURLFORM_COPYNAME, "message_html",
CURLFORM_COPYCONTENTS, "<p>asd</p>",
CURLFORM_END);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &resp);
res = curl_easy_perform(curl);
if (res != CURLE_OK)
{
cout << "Error: " << curl_easy_strerror(res) << endl;
return 1;
}
cout << resp << endl;
curl_formfree(formpost);
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
}
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* response)
{
response->append((char*)contents, size * nmemb);
return size * nmemb;
}
#include "sampapi/CObject.h"
CObject* pObject = sampapi::v037r3::RefNetGame()->GetPlayerPool()->m_localInfo.m_pObject->m_pPed->m_accessories.m_pObject[1];
auto pEntity = pObject->m_pGameEntity // error
plugin-sdkПри помощи sampapi получаю указатель на зааттаченный объект, как в дальнейшем я могу обращаться к его полям?
Посмотреть вложение 234077C++:#include "sampapi/CObject.h" CObject* pObject = sampapi::v037r3::RefNetGame()->GetPlayerPool()->m_localInfo.m_pObject->m_pPed->m_accessories.m_pObject[1]; auto pEntity = pObject->m_pGameEntity // error
Если коротко, мне надо сделать хук на рендер объектов и если они приаттачены ко мне - пропускать отрисовку, в псдк немного покопался, не нашел того, что надо. Решил сделать путем получения всех аксессуаров и сравнения их с тем, что рендеритсяplugin-sdk
void __cdecl CPlugin::CRendererRenderOneNonRoadHooked(const decltype(CRendererRenderOneNonRoadHook)& hook, uintptr_t* pEntity)
{
char entityType = *reinterpret_cast<unsigned char*>(*pEntity + 0x36) & 7;
if (entityType == eEntityType::ENTITY_TYPE_OBJECT && GetKeyState(VK_RBUTTON) & 0x8000)
{
for (int i = 0; i < sampapi::v037r3::CPed::MAX_ACCESSORIES; i++)
{
CObject* pObject = sampapi::v037r3::RefNetGame()->GetPlayerPool()->m_localInfo.m_pObject->m_pPed->m_accessories.m_pObject[i];
uintptr_t* pAccessoriesEntity = reinterpret_cast<uintptr_t*>(pObject->m_pGameEntity); // HUY PIZDA ZALUPA ERROR
if (pEntity == pAccessoriesEntity) return;
}
}
hook.get_trampoline()(pEntity);
}
тебе просто нужен plugin-SDK чтобы определялся игровой CObject, в sampapi нет игровых структур, вместо них заглушкиЕсли коротко, мне надо сделать хук на рендер объектов и если они приаттачены ко мне - пропускать отрисовку, в псдк немного покопался, не нашел того, что надо. Решил сделать путем получения всех аксессуаров и сравнения их с тем, что рендерится
C++:void __cdecl CPlugin::CRendererRenderOneNonRoadHooked(const decltype(CRendererRenderOneNonRoadHook)& hook, uintptr_t* pEntity) { char entityType = *reinterpret_cast<unsigned char*>(*pEntity + 0x36) & 7; if (entityType == eEntityType::ENTITY_TYPE_OBJECT && GetKeyState(VK_RBUTTON) & 0x8000) { for (int i = 0; i < sampapi::v037r3::CPed::MAX_ACCESSORIES; i++) { CObject* pObject = sampapi::v037r3::RefNetGame()->GetPlayerPool()->m_localInfo.m_pObject->m_pPed->m_accessories.m_pObject[i]; uintptr_t* pAccessoriesEntity = reinterpret_cast<uintptr_t*>(pObject->m_pGameEntity); // HUY PIZDA ZALUPA ERROR if (pEntity == pAccessoriesEntity) return; } } hook.get_trampoline()(pEntity); }
Если я правильно понял, CObject наследуется от Entity. Как его можно сравнить с нужной мне сущностью, которая передается в мой хук?тебе просто нужен plugin-SDK чтобы определялся игровой CObject, в sampapi нет игровых структур, вместо них заглушки
void __cdecl CPlugin::CRendererRenderOneNonRoadHooked(const decltype(CRendererRenderOneNonRoadHook)& hook, uintptr_t* pEntity)
{
char entityType =* reinterpret_cast<unsigned char* >(*pEntity + 0x36) & 7;
if (entityType == eEntityType::ENTITY_TYPE_OBJECT && GetKeyState(VK_RBUTTON) & 0x8000)
{
for (int i = 0; i < sampapi::v037r3::CPed::MAX_ACCESSORIES; i++)
{
if (sampapi::v037r3::RefNetGame() != nullptr)
{
sampapi::v037r3::CPlayerPool* pPlayerPool = sampapi::v037r3::RefNetGame()->GetPlayerPool();
if (pPlayerPool != nullptr && pPlayerPool->m_localInfo.m_pObject != nullptr && pPlayerPool->m_localInfo.m_pObject->m_pPed != nullptr)
{
CObject* pObject = pPlayerPool->m_localInfo.m_pObject->m_pPed->m_accessories.m_pObject[i];
if (pObject != nullptr)
{
// 0x40 - m_pGameEntity
uintptr_t* pAccessoriesEntity = reinterpret_cast<uintptr_t*>(*reinterpret_cast<uintptr_t*>(pObject) + 0x40);
if (pEntity != nullptr && pEntity == pAccessoriesEntity) return;
}
}
}
}
}
hook.get_trampoline()(pEntity);
}
вам это нужно на базовом SA-MP? Если да, то сервер обычно проверяет его через rpc_clientcheck, чтобы проверить, совпадает ли данный адрес с тем, что в игре без читов, просто скопируйте ответы RPC из чистой игры и перехватите rpc_clientcheckresponse, а затем замените данные на оригинальные и отправьте их. назад.Нужно убрать вот эти слова из памяти от DLL-Библиотеки, использую ManualMap. Слова берет из меню чита, также переменные.
Посмотреть вложение 233322