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

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

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

Вопрос [gs] ffi загрузить GetThreadContext и GetCurrentThread ?

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
23 Фев 2025
Сообщения
5
Реакции
0
привет, как через ffi загрузить GetThreadContext и GetCurrentThread в ските ?
 
а ты скорее всего и не сможешь, в ските почти половина ffi функций заблокирована
 
привет, как через ffi загрузить GetThreadContext и GetCurrentThread в ските ?
Код:
Expand Collapse Copy
local ffi = require("ffi")
ffi.cdef[[
    typedef void* HANDLE;
    typedef unsigned long DWORD;
    typedef int BOOL;
    typedef unsigned char BYTE;
    typedef struct _WOW64_FLOATING_SAVE_AREA {
      DWORD ControlWord;
      DWORD StatusWord;
      DWORD TagWord;
      DWORD ErrorOffset;
      DWORD ErrorSelector;
      DWORD DataOffset;
      DWORD DataSelector;
      BYTE  RegisterArea[80];
      DWORD Cr0NpxState;
    } WOW64_FLOATING_SAVE_AREA;
    typedef struct _WOW64_CONTEXT {
      DWORD                    ContextFlags;
      DWORD                    Dr0;
      DWORD                    Dr1;
      DWORD                    Dr2;
      DWORD                    Dr3;
      DWORD                    Dr6;
      DWORD                    Dr7;
      WOW64_FLOATING_SAVE_AREA FloatSave;
      DWORD                    SegGs;
      DWORD                    SegFs;
      DWORD                    SegEs;
      DWORD                    SegDs;
      DWORD                    Edi;
      DWORD                    Esi;
      DWORD                    Ebx;
      DWORD                    Edx;
      DWORD                    Ecx;
      DWORD                    Eax;
      DWORD                    Ebp;
      DWORD                    Eip;
      DWORD                    SegCs;
      DWORD                    EFlags;
      DWORD                    Esp;
      DWORD                    SegSs;
      BYTE                     ExtendedRegisters[512];
    } WOW64_CONTEXT;
]]
local get_pattern = {
    GetModuleHandlePtr = ffi.cast("void***", ffi.cast("uint32_t", client.find_signature("engine.dll", "\xFF\x15\xCC\xCC\xCC\xCC\x85\xC0\x74\x0B")) + 2)[0][0],
    GetProcAddressPtr = ffi.cast("void***", ffi.cast("uint32_t", client.find_signature("engine.dll", "\xFF\x15\xCC\xCC\xCC\xCC\xA3\xCC\xCC\xCC\xCC\xEB\x05")) + 2)[0][0],
    reinterpret_cast = function(addr, typestring)
        return function(...) return ffi.cast(typestring, client.find_signature("engine.dll", "\xFF\xE1"))(addr, ...) end
    end,
}
do
    get_pattern.fnGetModuleHandle = get_pattern.reinterpret_cast(get_pattern.GetModuleHandlePtr, "void*(__thiscall*)(void*, const char*)")
    get_pattern.fnGetProcAddress = get_pattern.reinterpret_cast(get_pattern.GetProcAddressPtr, "void*(__thiscall*)(void*, void*, const char*)")
    get_pattern.GetModuleHandle = get_pattern.fnGetModuleHandle
    get_pattern.GetProcAddress = get_pattern.fnGetProcAddress
    get_pattern.lib = { kernel32 = get_pattern.GetModuleHandle("kernel32.dll") }
    get_pattern.export = {
        kernel32 = {
            GetCurrentThread = get_pattern.reinterpret_cast(get_pattern.GetProcAddress(get_pattern.lib.kernel32, "GetCurrentThread"), "HANDLE(__thiscall*)(void*)"),
            GetThreadContext = get_pattern.reinterpret_cast(get_pattern.GetProcAddress(get_pattern.lib.kernel32, "GetThreadContext"), "BOOL(__thiscall*)(HANDLE, WOW64_CONTEXT*)")
        }
    }
end
возможно вронг
 
а ты скорее всего и не сможешь, в ските почти половина ffi функций заблокирована
в нем же можно использовать динамическую подгруску модулей а через них функций, вот думаю что через неё можно её реализовать но хз как
Код:
Expand Collapse Copy
local ffi = require("ffi")
ffi.cdef[[
    typedef void* HANDLE;
    typedef unsigned long DWORD;
    typedef int BOOL;
    typedef unsigned char BYTE;
    typedef struct _WOW64_FLOATING_SAVE_AREA {
      DWORD ControlWord;
      DWORD StatusWord;
      DWORD TagWord;
      DWORD ErrorOffset;
      DWORD ErrorSelector;
      DWORD DataOffset;
      DWORD DataSelector;
      BYTE  RegisterArea[80];
      DWORD Cr0NpxState;
    } WOW64_FLOATING_SAVE_AREA;
    typedef struct _WOW64_CONTEXT {
      DWORD                    ContextFlags;
      DWORD                    Dr0;
      DWORD                    Dr1;
      DWORD                    Dr2;
      DWORD                    Dr3;
      DWORD                    Dr6;
      DWORD                    Dr7;
      WOW64_FLOATING_SAVE_AREA FloatSave;
      DWORD                    SegGs;
      DWORD                    SegFs;
      DWORD                    SegEs;
      DWORD                    SegDs;
      DWORD                    Edi;
      DWORD                    Esi;
      DWORD                    Ebx;
      DWORD                    Edx;
      DWORD                    Ecx;
      DWORD                    Eax;
      DWORD                    Ebp;
      DWORD                    Eip;
      DWORD                    SegCs;
      DWORD                    EFlags;
      DWORD                    Esp;
      DWORD                    SegSs;
      BYTE                     ExtendedRegisters[512];
    } WOW64_CONTEXT;
]]
local get_pattern = {
    GetModuleHandlePtr = ffi.cast("void***", ffi.cast("uint32_t", client.find_signature("engine.dll", "\xFF\x15\xCC\xCC\xCC\xCC\x85\xC0\x74\x0B")) + 2)[0][0],
    GetProcAddressPtr = ffi.cast("void***", ffi.cast("uint32_t", client.find_signature("engine.dll", "\xFF\x15\xCC\xCC\xCC\xCC\xA3\xCC\xCC\xCC\xCC\xEB\x05")) + 2)[0][0],
    reinterpret_cast = function(addr, typestring)
        return function(...) return ffi.cast(typestring, client.find_signature("engine.dll", "\xFF\xE1"))(addr, ...) end
    end,
}
do
    get_pattern.fnGetModuleHandle = get_pattern.reinterpret_cast(get_pattern.GetModuleHandlePtr, "void*(__thiscall*)(void*, const char*)")
    get_pattern.fnGetProcAddress = get_pattern.reinterpret_cast(get_pattern.GetProcAddressPtr, "void*(__thiscall*)(void*, void*, const char*)")
    get_pattern.GetModuleHandle = get_pattern.fnGetModuleHandle
    get_pattern.GetProcAddress = get_pattern.fnGetProcAddress
    get_pattern.lib = { kernel32 = get_pattern.GetModuleHandle("kernel32.dll") }
    get_pattern.export = {
        kernel32 = {
            GetCurrentThread = get_pattern.reinterpret_cast(get_pattern.GetProcAddress(get_pattern.lib.kernel32, "GetCurrentThread"), "HANDLE(__thiscall*)(void*)"),
            GetThreadContext = get_pattern.reinterpret_cast(get_pattern.GetProcAddress(get_pattern.lib.kernel32, "GetThreadContext"), "BOOL(__thiscall*)(HANDLE, WOW64_CONTEXT*)")
        }
    }
end
возможно вронг
спасибо щас чекну
 
Последнее редактирование:
Назад
Сверху Снизу