Sandboxie按需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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值