Exemple #1
0
bool LoadVkLibraryAndGetProcAddrFuncs(PFN_vkGetInstanceProcAddr* instProc,
                                                   PFN_vkGetDeviceProcAddr* devProc) {
#ifdef SK_MOLTENVK
    // MoltenVK is a statically linked framework, so there is no Vulkan library to load.
    *instProc = &vkGetInstanceProcAddr;
    *devProc = &vkGetDeviceProcAddr;
    return true;
#else
    static void* vkLib = nullptr;
    static PFN_vkGetInstanceProcAddr localInstProc = nullptr;
    static PFN_vkGetDeviceProcAddr localDevProc = nullptr;
    if (!vkLib) {
#if defined _WIN32
        vkLib = DynamicLoadLibrary("vulkan-1.dll");
#else
        vkLib = DynamicLoadLibrary("libvulkan.so");
#endif
        if (!vkLib) {
            return false;
        }
        localInstProc = (PFN_vkGetInstanceProcAddr) GetProcedureAddress(vkLib,
                                                                        "vkGetInstanceProcAddr");
        localDevProc = (PFN_vkGetDeviceProcAddr) GetProcedureAddress(vkLib,
                                                                     "vkGetDeviceProcAddr");
    }
    if (!localInstProc || !localDevProc) {
        return false;
    }
    *instProc = localInstProc;
    *devProc = localDevProc;
    return true;
#endif
}
static GrGLFuncPtr angle_get_gl_proc(void* ctx, const char name[]) {
    const Libs* libs = reinterpret_cast<const Libs*>(ctx);
    GrGLFuncPtr proc = (GrGLFuncPtr) GetProcedureAddress(libs->fGLLib, name);
    if (proc) {
        return proc;
    }
    proc = (GrGLFuncPtr) GetProcedureAddress(libs->fEGLLib, name);
    if (proc) {
        return proc;
    }
    return eglGetProcAddress(name);
}
Exemple #3
0
CPlugin::~CPlugin()
{
    if(m_pLibrary)
    {
        OnPluginUnload_t pfn = (OnPluginUnload_t) GetProcedureAddress("OnPluginUnload");

        if(pfn)
            pfn();

#ifdef WIN32
        FreeLibrary((HMODULE)m_pLibrary);
#else
        dlclose(m_pLibrary);
#endif
        m_pLibrary = NULL;
    }
}
static void load_command_buffer_functions() {
    if (!gLibrary) {
#if defined _WIN32
        gLibrary = DynamicLoadLibrary("command_buffer_gles2.dll");
#elif defined SK_BUILD_FOR_MAC
        gLibrary = DynamicLoadLibrary("libcommand_buffer_gles2.dylib");
#else
        gLibrary = DynamicLoadLibrary("libcommand_buffer_gles2.so");
#endif // defined _WIN32
        if (gLibrary) {
            gfGetDisplay = (GetDisplayProc)GetProcedureAddress(gLibrary, "eglGetDisplay");
            gfInitialize = (InitializeProc)GetProcedureAddress(gLibrary, "eglInitialize");
            gfTerminate = (TerminateProc)GetProcedureAddress(gLibrary, "eglTerminate");
            gfChooseConfig = (ChooseConfigProc)GetProcedureAddress(gLibrary, "eglChooseConfig");
            gfGetConfigAttrib = (GetConfigAttrib)GetProcedureAddress(gLibrary, "eglGetConfigAttrib");
            gfCreateWindowSurface = (CreateWindowSurfaceProc)GetProcedureAddress(gLibrary, "eglCreateWindowSurface");
            gfCreatePbufferSurface = (CreatePbufferSurfaceProc)GetProcedureAddress(gLibrary, "eglCreatePbufferSurface");
            gfDestroySurface = (DestroySurfaceProc)GetProcedureAddress(gLibrary, "eglDestroySurface");
            gfCreateContext = (CreateContextProc)GetProcedureAddress(gLibrary, "eglCreateContext");
            gfDestroyContext = (DestroyContextProc)GetProcedureAddress(gLibrary, "eglDestroyContext");
            gfMakeCurrent = (MakeCurrentProc)GetProcedureAddress(gLibrary, "eglMakeCurrent");
            gfSwapBuffers = (SwapBuffersProc)GetProcedureAddress(gLibrary, "eglSwapBuffers");
            gfGetProcAddress = (GetProcAddressProc)GetProcedureAddress(gLibrary, "eglGetProcAddress");

            gfFunctionsLoadedSuccessfully = gfGetDisplay && gfInitialize && gfTerminate &&
                                            gfChooseConfig && gfCreateWindowSurface &&
                                            gfCreatePbufferSurface && gfDestroySurface &&
                                            gfCreateContext && gfDestroyContext && gfMakeCurrent &&
                                            gfSwapBuffers && gfGetProcAddress;

        }
    }
}
Exemple #5
0
int main(int argc, char *argv[])
{
#if 1

    HANDLE  hProcess;
    DWORD   procAddr, procAddr2;
    DWORD   procId;

    if (argc < 2) {
        printf("Current process\n");
        procId = (DWORD) GetCurrentProcessId();
    } else {
        printf("Process: %s\n", argv[1]);
        procId = atoi(argv[1]);
    }

    hProcess = OpenProcess(
        PROCESS_CREATE_THREAD |
        PROCESS_VM_OPERATION |
        PROCESS_VM_WRITE | PROCESS_VM_READ | PROCESS_QUERY_INFORMATION,
        FALSE,
        procId);

    if (hProcess == NULL)
        return 1;

    DWORD pKernel32 = GetRemoteModule(hProcess, "kernel32.dll");
    DWORD pNtdll = GetRemoteModule(hProcess, "ntdll.dll");

    if ((!pKernel32)||(!pNtdll))
        return 1;

    procAddr = GetProcedureAddress(hProcess, pKernel32, "KERNEL32.dll", LOAD_LIBRARY_NAME);
    procAddr2 = GetProcedureAddress(hProcess, pNtdll, "ntdll.dll", "RtlGetLastWin32Error");
    printf("LoadLibraryA:\t0x%08x\nRtlGetLastWin32Error:\t0x%08x\n", procAddr, procAddr2);
    if ((procAddr == 0)||(procAddr2 == 0)) {
        
        return 1;
    }


    printf("Trying to inject...\n");

//    HMODULE hModule = LoadLibraryW(L"kernel32.dll");
#endif
    

#define THREAD_ALLOC_SIZE 4096

    LPVOID pRemote = VirtualAllocEx(
        hProcess,
        NULL,
        THREAD_ALLOC_SIZE,
        MEM_COMMIT,
        PAGE_EXECUTE_READWRITE
        );
    if (pRemote == NULL) {
        printf("Failed to allocate memory in remote process: %x\n", GetLastError());
        goto exit;
    }

    char libName[] = "c:\\111\\dll.dll";

    printf("lib_name:\t%d\nop_call_2:\t%d\nop_ret:\t%d\n", FIELD_OFFSET(SHELL_CODE,lib_name),
    FIELD_OFFSET(SHELL_CODE,op_call_2),
    FIELD_OFFSET(SHELL_CODE,op_ret));
     /*
    // Copy string to remote process address space
    if (!WriteProcessMemory(hProcess, (LPVOID) ((DWORD) pRemote + 13), (PVOID) libName, sizeof(libName), NULL)) {
        printf("Failed to write in remote process libName: %x\n", GetLastError());
        goto exit;
    }
   
    DWORD tmp = (DWORD) pRemote + 18;

    DWORD call_addr = procAddr - (DWORD) pRemote - 11;
    printf("Call Addr: 0x%08x\n", call_addr);

    DWORD call_addr2 = procAddr2 - (DWORD) pRemote - 16;
    printf("Call Addr: 0x%08x\n", call_addr);

    //pRemote+6 : call call_addr
    // dest_addr = pRemote + 11 + call_addr = procAddr;

    char code[] = {
        0xcc,                           // int3
        0x68, tmp & 0xff, tmp >> 8 & 0xff, tmp >> 16 & 0xff, tmp >> 24 & 0xff ,   // push
        0xe8, call_addr & 0xff, call_addr >> 8 & 0xff, call_addr >> 16 & 0xff, call_addr >> 24 & 0xff ,   // call
        0xe8, call_addr2 & 0xff, call_addr2 >> 8 & 0xff, call_addr2 >> 16 & 0xff, call_addr2 >> 24 & 0xff ,
        0xcc,
        0xc2, 0x04,                     // ret
    };
    */

    char code[256];
    InitShellCode((PSHELL_CODE)code, (DWORD) pRemote, procAddr, procAddr2, libName);

    __debugbreak();
    LoadLibraryA(libName);

    // Write inject code
    if (!WriteProcessMemory(hProcess, pRemote, code, sizeof(code), NULL)) {
        printf("Failed to write in remote process code: %x\n", GetLastError());
        goto exit;
    }

    HANDLE hThread = CreateRemoteThread(
        hProcess,
        NULL, 
        0,
        (LPTHREAD_START_ROUTINE) pRemote,
        NULL,
        0,
        NULL
        );
    if(hThread == NULL) {
        printf("Failed to CreateRemoteThread: %x\n", GetLastError());
        return 1;
    }

    WaitForSingleObject(hThread, INFINITE);
exit:
    printf("Freeing resources...\n");
    if (pRemote)
        VirtualFreeEx(hProcess, pRemote, 0, MEM_RELEASE);
    if (hThread)
        CloseHandle(hThread);
    if (hProcess)
        CloseHandle(hProcess);

      
    getch();
    return 0;
}