• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Вопрос Supreme Commander

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
364
Реакции
24
Не могу понять почему крашит когда я ставлю БП в чит енджине или в х86дбг. чтобы реверсить что функа передает приходится юзать чит енджиновский инжект в код. Даже когда атачусь визуалкой то вообще не выскакивает никакой краш или exception.
А второй вопрос, я вот пытаюсь вызвать игровую функу чтобы отрисовывать текст на экране на позиции. нашел функу по хрефам. иследовал неделю с помощью жпт.

(внутри umain.lua игры)

nB0X71F.png



oSS5sKf.png


ziZWePQ.png
C++:
Expand Collapse Copy
void CUIManager::DrawTextAt(float x, float y, int r, int g, int b, int a, const char* Text, float Duration)
{
    int color = (a << 24) | (r << 16) | (g << 8) | b;
    DrawTextAt(static_cast<float>(x), static_cast<float>(y), color, Text, Duration);
}

void CUIManager::DrawTextAt(float x, float y, int CLR, const char* Text, float Duration = 5.0)
{
    DWORD* v17[5]{ nullptr,nullptr,nullptr,nullptr,nullptr }; // [esp+34h] [ebp-54h] BYREF
    DWORD* v18[5]{ nullptr,nullptr,nullptr,nullptr,nullptr }; // [esp+48h] [ebp-40h] BYREF
    DWORD* v19[5]{ nullptr,nullptr,nullptr,nullptr,nullptr }; // [esp+5Ch] [ebp-2Ch] BYREF
  
    void* nodePtr = *(void**)GetNodePtr();
    DWORD* LuaModule = nullptr; 
    LuaModule = LoadLuaModuleFile(v17, nodePtr, "/lua/ui/uimain.lua");
    auto LuaFunc = LoadLuaFuncFromModule(LuaModule,v18,"StartCursorText");
    if(!LuaFunc)
    {
        OutputDebugStringA("Failed to DrawText\n");
        return;
    }
     
    auto result = oInitLuaState(v19, LuaFunc);
     
    DWORD* colorObj[5] = {nullptr,nullptr,nullptr,nullptr}; 
    oGetAsColor(colorObj, nodePtr, CLR);

    void* valuesPtr = *(void**)((uintptr_t)v19+0x4);//(void*)&some;
    void* Color = *(void**)((uintptr_t)colorObj + 0x10);
    __asm
    { 
        mov edi, v19
    }
    oDraw(
        //  esp
        x, // 4
        y,  // 8
        Text, // C
        v19,  // 10

        &valuesPtr,// 14 ptr to where we can only 4
        nodePtr, //18
        4, //1C
        Color, //20

        Duration, // 24 
        0);  // 28

    this->CleanUp(v17);

    this->CleanUp(v18);
    this->CleanUp(v19);
    return;
} 

DWORD WINAPI OnInjected()
{
     

    void* ptr = nullptr; 
    //UIManager
    ptr = PatternScan("6A FF 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 40 A1 ?? ?? ?? ?? 53 56 8B 70 30 57 51 8B C4 89 64 24 10 8D 4C 24 14");
     
    UIManager = *(CUIManager**)(GetAbsoluteAddress((uintptr_t)ptr+0x18,1));

     
    SimDriver* driver = nullptr;
    Sim* sim = nullptr;

     

    bool SigFailed = false;
    std::string errorMessage = "Failed to obtain:";

    ptr = (void*)GetAbsoluteAddress(0x66A545);

    driver = *(SimDriver**)ptr;

    //MsgPtr
    ptr = PatternScan("6A FF 68 A8 6C BE 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC");
    if (!ptr)
    {
        errorMessage += "MsgPtr";
    }
    Console::oMsg = (Console::_Msg)ptr;

    //MemAllocPtr
    ptr = PatternScan("55 8B EC 83 EC 0C EB 0D FF 75 08 E8 B3 4C 01 00 85 C0 59 74 0F FF 75 08 E8 6D 57 E5");
    if (ptr)
    {
        MemAlloc = (_MemAlloc)ptr;
    }
    else
    {
        errorMessage += ",MemAllocPtr";
    }

    //_UIDraw 
    ptr = PatternScan("6A FF 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 08 55 56 8B CF C7 44 24 18 00 00 00 00 E8");// ?? ?? ?? ?? 8B F0 56 89 74 24 0C
    if (!ptr)
    {
        errorMessage += ",UIDraw";
    }
    oDraw = (_UIDraw)0x84FD90;//ptr;

    //_LoadLuaModule
    ptr = PatternScan("55 8B EC 6A FF 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 18 53 56 57 8B 7D 0C C7 45 E8 00 00 00 00 8B 37 89 65");// F0 56 89 75 DC E8 ?? ?? ?? ??
    if (!ptr)
    {
        errorMessage += ",LoadLuaModule";
    }
    oLoadLuaModule = (_LoadLuaModule)ptr;

    //_LoadLuaFunc 
    ptr = PatternScan("83 EC 60 53 56 8B F1 8B 46 08 33 DB 3B C3 89 74 24 0C 89 5C 24 08 75 1D 68 ?? ?? ?? ?? 8D 4C 24 1C E8 ?? ?? ?? ?? 68");// ?? ?? ?? ?? 8D 44 24 1C 50 E8 ?? ?? ?? ??
    if (!ptr)
    {
        errorMessage += ",LoadLuaFunc";
    }
    oLoadLuaFunc = (_LoadLuaFunc)ptr;

    //UIManager
    ptr = PatternScan("6A FF 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 40 A1 ?? ?? ?? ?? 53 56 8B 70 30 57 51 8B C4 89 64 24 10 8D 4C 24 14");
    if (!ptr)
    {
        errorMessage += ",UIManager";
    }
    UIManager = *(CUIManager**)(GetAbsoluteAddress((uintptr_t)ptr + 0x18, 1));

    ptr = PatternScan("64 A1 00 00 00 00 6A FF 68 ?? ?? ?? ?? 50 8B 44 24 14 64 89 25 00 00 00 00 56 8B 74 24 14 50 8B CE E8"); // ?? ?? ?? ?? 8B CE C7 44 24 0C 00 00 00 00 E8 ?? ?? ?? ??
    if (!ptr)
    {
        errorMessage += ",LoadFuncData";
    }
    oInitLuaState = (_LoadFuncData)0x41F910;//ptr;
    oDrawTextCursor = (_DrawTextCursor)0x844840;
    oGetAsColor = (_GetAsColor)0x4B9980;
    oGetAsString = (_GetAsString)0x9731E0;


    if (SigFailed)
    {
        OutputDebugStringA((errorMessage + "\n").c_str());
    } 
    while (true)
    {
        if (!driver)
        {
            continue;
        }
        auto sim = driver->sim;

        if (sim)
        {
            if (!LocalCommander)
            {
                LocalCommander = sim->GetLocalEntity();
                if (LocalCommander)
                { 
                    UIManager->DrawTextWrapper("<LOC Engine0011>Coordinated Attack!", 0xFFFF0000, 4, 0);

                    auto result = nullptr;
                    UIManager->AddBeatFunc(result);

                }
            }
            sim->PrintCommanders();


        }
        Sleep(2500);
    }
     
    return 0;
}
ну и кароче такой прикол что я супер дохуя реверсил, и вроде бы как понял что проблема в том что когдая вызвыаю мою функу которая испольузует что-то на подобии глобального стека, оно затирает игрвоой стек или игра затирает мой стэк и получается вместо нормального текста как игра отображает, у меня какая-то хуйня наполовину отрисовывается. Я не шарю в луа, я просто наугад подписовал функи в иде. Самой большой проблемой является дебагинг кода игры. Ставлю БП и сразу ловлю краш без причины без записей в визуалке. Единственные краши которые ловлю в визуалке это либо что-то со стеком (ну это проблема в конвенциах или еще каккая-то херня )
 
Назад
Сверху Снизу