browser icon
You are using an insecure version of your web browser. Please update your browser!
Using an outdated browser makes your computer unsafe. For a safer, faster, more enjoyable user experience, please update your browser today or try a newer browser.

获取kernel32.dll映像基址

Posted by on 2006 年 11 月 20 日

你可以任意转载本文,但请在转载后的文章中注明作者和原始链接。
媒体约稿请联系 titilima_AT_163.com(把“_AT_”换成“@”)。

很久不写关于技术的东西了,由于最近在研究内嵌汇编和机器码的注入,故把下面这段代码列出来。其中C/C++的部分和inline asm的最后一句是我写的。自评:极其缺乏原创精神。

HMODULE GetKernel32( void )
{
    HMODULE hRet = NULL;
    __asm
    {
        mov eax, fs:30h
        mov eax, [eax + 0ch]
        mov esi, [eax + 1ch]
        lodsd
        mov eax, [eax + 08h]
        mov hRet, eax
    }
    return hRet;
}

这段代码的功能是不借助于GetModuleHandle API获取kernel32.dll的模块句柄(映像基址),只适用于Win32 NT内核。

订阅本站

4 Comments

  • At 2008.12.23 13:37, vxib said:

    哎,早前看这篇文章。
    如今才知道该方法的含义
    望马哥有空能够解释下这几句汇编,
    方便小弟消化吸受。谢谢!
    感激不尽。
    有没有类似的方法可以找到其它module的基址

    • At 2008.12.24 09:35, 李马 said:

      [quote=vxib]哎,早前看这篇文章。
      如今才知道该方法的含义
      望马哥有空能够解释下这几句汇编,
      方便小弟消化吸受。谢谢!
      感激不尽。
      有没有类似的方法可以找到其它module的基址[/quote]
      fs:30h 中保存的是 PEB 的地址,接下来就是从 Ldr 链表中取 kernel32 罢了。这个方法也可用于找其它的 DLL,只是需要遍历链表。

      • At 2008.12.25 09:58, vxib said:

        谢谢呀。受益匪浅

        • At 2008.12.31 13:02, luther said:

          是什么原理呢?

          (Required)
          (Required, will not be published)