Sandboxie按需HOOK

Sandboxie通过在进程初始化时挂载LdrQueryImageFileExecutionOptions函数,实现对DLL加载的控制。当DLL加载完成后,会调用Ldr_MyDllCallbackA函数,对特定DLL进行hook初始化。这一机制避免了不必要的DLL加载,提高了系统安全性。博客详细阐述了Sandboxie如何利用回调函数来管理DLL的加载和hook操作。

很多hook DLL,为了挂载一些函数会直接load相关的dll,然后加载。或者因为依赖关系的原因相应的dll会被加载,这有时候会导致有些进程加载一些不必要的dll。

我们看Sandboxie的处理。

Sandboxie对在初始化的时候挂载了

LdrQueryImageFileExecutionOptions

进程加载dll完成后会调用该函数,该函数最后调用Ldr_MyDllCallbackA,在Ldr_MyDllCallbackA中根据当前加载的dll的信息,对该dll相关的函数进行hook的初始化。


_FX void Ldr_MyDllCallbackA(const CHAR *ImageName, HMODULE ImageBase)
{
    //
    // invoke our sub-modules as necessary
    //
    if (ImageBase) {

        DLL *dll = Ldr_Dlls;
        while (dll->nameA) {
            if (_stricmp(ImageName, dll->nameA) == 0) {
                BOOLEAN ok = dll->init_func(ImageBase);
                if (!ok)
                    SbieApi_Log(2318, dll->nameW);
                break;
            }
            ++dll;
        }
    }
}

堆栈如下:
Call Site
SbieDll!AdvApi_Init [e:\sandboxie5.40\core\dll\advapi.c @ 173] 
SbieDll!Ldr_MyDllCallbackA+0x61 [e:\sandboxie5.40\core\dll\ldr.c @ 1073] 
SbieDll!Ldr_CallOneDllCallback+0x3b [e:\sandboxie5.40\core\dll\ldr.c @ 651] 
SbieDll!Ldr_CallDllCallbacks+0x276 [e:\sandboxie5.40\core\dll\ldr.c @ 820] 
SbieDll!Ldr_LdrQueryImageFileExecutionOptions+0x25 [e:\sandboxie5.40\core\dll\ldr.c @ 1026] 
ntdll!RtlIsDosDeviceName_U+0x4674
ntdll!RtlCreateUnicodeStringFromAsciiz+0xea
ntdll!LdrLoadDll+0x9e
SbieDll!Ldr_LdrLoadDll+0x5c [e:\sandboxie5.40\core\dll\ldr.c @ 888] 
KERNELBASE!LoadLibraryExW+0x19c
KERNELBASE!LoadLibraryExA+0x51
chrome!IsSandboxedProcess+0x84365
chrome!IsSandboxedProcess+0xb3e4e
0xaaaaaaaa`00000000
0x8de670
0x1
0x8de650

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值