Пример #1
0
extern "C" DLL_EXPORT BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason)
    {

    case DLL_PROCESS_ATTACH:
        // attach to process
        // return FALSE to fail DLL load

        HookIAT("MessageBoxA",(DWORD  )trampoline) ;

 /// the following api will be hooked and the trampoline() function will be executed instead !!

        MessageBoxA(NULL,"L0phtTn","HookMe",0);

        break;

    case DLL_PROCESS_DETACH:
        // detach from process
        break;

    case DLL_THREAD_ATTACH:
        // attach to thread
        break;

    case DLL_THREAD_DETACH:
        // detach from thread
        break;

    }
    return TRUE; // succesful
}
Пример #2
0
static void OnAttach(void)
{
	gLog.OpenRelative(CSIDL_MYDOCUMENTS, "\\My Games\\Skyrim Special Edition\\SKSE\\skse64_steam_loader.log");
	gLog.SetPrintLevel(IDebugLog::kLevel_Error);
	gLog.SetLogLevel(IDebugLog::kLevel_DebugMessage);

	FILETIME	now;
	GetSystemTimeAsFileTime(&now);

	_MESSAGE("skse64 loader %08X (steam) %08X%08X %s", PACKED_SKSE_VERSION, now.dwHighDateTime, now.dwLowDateTime, GetOSInfoStr().c_str());
	_MESSAGE("loader base addr = %016I64X", g_dllHandle);
	_MESSAGE("exe base addr = %016I64X", GetModuleHandle(NULL));

	// hook an imported function early so we can inject our code 
	HookIAT();
}
Пример #3
0
extc int _export cdecl ODBG_Plugininit(int ollydbgversion, HWND hw, ulong *features)
{
    DWORD Size;
    TOKEN_LINKED_TOKEN LinkedToken;

    UNREFERENCED_PARAMETER(features);

    if (ollydbgversion < PLUGIN_VERSION)
        return -1;

    OllyWindow = hw;

    // Get Process Elevation Type
    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &OllyToken))
    {
        MessageBoxA(hw, "Failed to open OllyDbg process token.", PLUGIN_NAME, MB_OK | MB_ICONHAND);
        return -1;
    }

    if (!GetTokenInformation(OllyToken, TokenElevationType, &OllyElevationType, sizeof(OllyElevationType), &Size))
    {
        MessageBoxA(hw, "Failed to get elevation type from OllyDbg process token.", PLUGIN_NAME, MB_OK | MB_ICONHAND);
        CloseHandle(OllyToken);
        return -1;
    }

    // Get LUA Token
    switch (OllyElevationType)
    {
    case TokenElevationTypeFull:
        if (!GetTokenInformation(OllyToken, TokenLinkedToken, &LinkedToken, sizeof(LinkedToken), &Size))
        {
            MessageBoxA(hw, "Failed to get LUA token from OllyDbg process token.", PLUGIN_NAME, MB_OK | MB_ICONHAND);
            CloseHandle(OllyToken);
            return -1;
        }

        OllyLUAToken = LinkedToken.LinkedToken;
        break;
    case TokenElevationTypeLimited:
        OllyLUAToken = OllyToken;
        break;
    default:
        OllyLUAToken = NULL;
        break;
    }

    // Hook CreateProcessA
    if (!HookIAT(GetModuleHandleA(NULL), "kernel32.dll", "CreateProcessA", CreateProcessAHook, &HookedCreateProcessA))
    {
        MessageBoxA(hw, "Failed to hook CreateProcessA.", PLUGIN_NAME, MB_OK | MB_ICONHAND);
        if (OllyLUAToken != NULL && OllyLUAToken != OllyToken)
            CloseHandle(OllyLUAToken);
        CloseHandle(OllyToken);
        return -1;
    }

    Addtolist(0, 0, PLUGIN_NAME " has hooked CreateProcessA");

    return 0;
}