zoukankan      html  css  js  c++  java
  • 寻找未导出函数的函数地址

    今天读了一篇 如何寻找未导出函数的函数地址的文章,重在思路吧,万一以后用到了呢?

    why?

    内核里有些函数直接导出了,那我们可以直接通过函数名调用它,未导出函数也不是不可以调用,我们需要自己找到函数名称所对应的地址即可。

    How?

    文章涉及3个函数:

    1. PsTerminateSystemThread
    2. PspTerminateThreadByPointer
    3. PspExitThread

    这3个函数的关系是,1调用了2,2调用了3。我们的目标是获得函数3的地址,以便我们直接调用它。其中PsTerminateSystemThread是已导出函数,这一以为着在我们的代码中可以直接通过PsTerminateSystemThread来得到函数地址。那该如何下手呢?

    思路来了:通过反汇编导出函数,找到调用未导出函数之前的字节码作为特征,从导出函数地址开始,搜索特征码,可以得到未导出函数的地址。以从函数1找到函数2地址为例来说。

    lkd> uf nt!PsTerminateSystemThread
    nt!PsTerminateSystemThread:
    805d2c36 8bff            mov     edi,edi
    805d2c38 55              push    ebp
    805d2c39 8bec            mov     ebp,esp
    805d2c3b 64a124010000    mov     eax,dword ptr fs:[00000124h]
    805d2c41 f6804802000010  test    byte ptr [eax+248h],10h
    805d2c48 7507            jne     nt!PsTerminateSystemThread+0x1b (805d2c51)
    
    nt!PsTerminateSystemThread+0x14:
    805d2c4a b80d0000c0      mov     eax,0C000000Dh
    805d2c4f eb09            jmp     nt!PsTerminateSystemThread+0x24 (805d2c5a)
    
    nt!PsTerminateSystemThread+0x1b:
    805d2c51 ff7508          push    dword ptr [ebp+8]
    805d2c54 50              push    eax
    805d2c55 e828fcffff      call    nt!PspTerminateThreadByPointer (805d2882)	//注意这里
    
    nt!PsTerminateSystemThread+0x24:
    805d2c5a 5d              pop     ebp
    805d2c5b c20400          ret     4
    

    那么我们通过找特征码 ff 75 08 50 e8就能找到接下来的28fcffff通过地址计算,就能找到PspTerminateThreadByPointer.公式如下:

    0x805d2c56 + 0xfffffc28 + 4 = 0x805d2882(nt!PspTerminateThreadByPointer)
    

    再通过nt!PspTerminateThreadByPointer函数,找到PspExitThread

  • 相关阅读:
    JavaScript——引用类型
    react+express+mongodb搭建个人博客
    JavaScript——变量及其作用域
    CSS——盒子模型
    CSS——浮动及清除浮动
    hexo博客分支教训
    使用Node.js+Express 简易开发服务端实例
    发布Nuget包命令
    当心引用类型的“坑”
    sqlcmd相关
  • 原文地址:https://www.cnblogs.com/Lnju/p/5407915.html
Copyright © 2011-2022 走看看