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

Vintik

Мечтатель
Проверенный
1,467
916
1709214449863.png

Ставлю ВиртуалПротект - что не так?
Нажимаю типа дальше - пишет "Необработанное исключение по адресу (тому же) в Project3.exe: 0xC0000005: нарушение прав доступа при исполнении по адресу "
 

eqzzz

Участник
126
19
Нужно убрать вот эти слова из памяти от DLL-Библиотеки, использую ManualMap. Слова берет из меню чита, также переменные.

Снимок.PNG
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
Посмотреть вложение 233315
Ставлю ВиртуалПротект - что не так?
Нажимаю типа дальше - пишет "Необработанное исключение по адресу (тому же) в Project3.exe: 0xC0000005: нарушение прав доступа при исполнении по адресу "
Для выполнения права должны быть ReadExecute
 
  • Нравится
Реакции: Vintik

Sadow

Известный
1,436
585
Как отправить 2 запроса с одной сессии (с теми же куки и заголовками) при помощи curl?
 

iAmerican

Известный
Друг
615
257
Как отправить 2 запроса с одной сессии (с теми же куки и заголовками) при помощи curl?
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;
}

Нужно убрать вот эти слова из памяти от DLL-Библиотеки, использую ManualMap. Слова берет из меню чита, также переменные.

Посмотреть вложение 233322

Если банально..
То тебе нужно все свои строковые переменные привести к XOR виду , уже положить XOR значения туда изначально. (Сам XOR используй с своим ключом)
При открытии меню их дешифровать , а при закрытии меню их обратно шифровать , при этом ячейка памяти должна быть одна и та же.
 
Последнее редактирование:

Sadow

Известный
1,436
585
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;
}
Не работает

Вот мой код:

говнокод на c++:
#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;
}
 
Последнее редактирование:

0x9

Новичок
10
0
как с помощью plugin sdk можно найти определенную текстуру на машине и изменить ей цвет?
 

why ega

РП игрок
Модератор
2,539
2,232
При помощи sampapi получаю указатель на зааттаченный объект, как в дальнейшем я могу обращаться к его полям?

C++:
#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
1709992204406.png
 

Musaigen

abobusnik
Проверенный
1,583
1,302
При помощи sampapi получаю указатель на зааттаченный объект, как в дальнейшем я могу обращаться к его полям?

C++:
#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
Посмотреть вложение 234077
plugin-sdk
 

why ega

РП игрок
Модератор
2,539
2,232
Если коротко, мне надо сделать хук на рендер объектов и если они приаттачены ко мне - пропускать отрисовку, в псдк немного покопался, не нашел того, что надо. Решил сделать путем получения всех аксессуаров и сравнения их с тем, что рендерится
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);
}
 

Musaigen

abobusnik
Проверенный
1,583
1,302
Если коротко, мне надо сделать хук на рендер объектов и если они приаттачены ко мне - пропускать отрисовку, в псдк немного покопался, не нашел того, что надо. Решил сделать путем получения всех аксессуаров и сравнения их с тем, что рендерится
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);
}
тебе просто нужен plugin-SDK чтобы определялся игровой CObject, в sampapi нет игровых структур, вместо них заглушки
 
  • Нравится
Реакции: ARMOR и why ega

why ega

РП игрок
Модератор
2,539
2,232
тебе просто нужен plugin-SDK чтобы определялся игровой CObject, в sampapi нет игровых структур, вместо них заглушки
Если я правильно понял, CObject наследуется от Entity. Как его можно сравнить с нужной мне сущностью, которая передается в мой хук?

возможно я туплю, но вроде как туда передается самповский CObject
1710017089481.png
 
Последнее редактирование:

why ega

РП игрок
Модератор
2,539
2,232
Попробовал провернуть такой код, но странно, что объекты все равно продолжают рендериться:
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++)
        {
            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);
}
 

horacy

Известный
102
92
Нужно убрать вот эти слова из памяти от DLL-Библиотеки, использую ManualMap. Слова берет из меню чита, также переменные.

Посмотреть вложение 233322
вам это нужно на базовом SA-MP? Если да, то сервер обычно проверяет его через rpc_clientcheck, чтобы проверить, совпадает ли данный адрес с тем, что в игре без читов, просто скопируйте ответы RPC из чистой игры и перехватите rpc_clientcheckresponse, а затем замените данные на оригинальные и отправьте их. назад.