愚蠢的傲慢

3 篇文章 0 订阅
//  GetKernel32FuncAddr.cpp : 
#include <stdio.h>
#include <stdlib.h>

unsigned long GetKernel32FuncAddr()
{
    unsigned long pBaseOfKernel32, pNameOfModule;
    unsigned long pAddressOfFunctions, pAddress0fNames,NumberofFunctions;

    __asm{
        mov edx, fs:30h         ; PEB base
        mov edx, [edx+0ch]      ; PEB_LER_DATA
        // base of ntdll.dll=====================
        mov edx, [edx+1ch]      ; The first element of InInitOrderModuleList
        // base of kernel32.dll=====================
        ;mov edx,[edx]           ; Next element
        mov eax, [edx+8]        ; Base address of second module
        mov pBaseOfKernel32,eax ; Save it to local variable**********************************
        mov ebx, eax            ; Base address of kernel32.dll, save it to ebx
        // get the addrs of first function =========
        mov edx,[ebx+3ch]       ; e_lfanew
        mov edx,[edx+ebx+78h]   ; DataDirectory[0]
        add edx,ebx             ; RVA + base
        mov esi,edx             ; Save first DataDirectory to esi
        // get fields of IMAGE_EXPORT_DIRECTORY pNameOfModule
        mov edx,[esi+0ch]           ; Name
        add edx,ebx                 ; RVA + base
        mov pNameOfModule,edx       ; Save it to local variable
        mov edx,[esi+1ch]           ; AddressOfFunctions RVA
        add edx,ebx                 ; RVA + base
        mov pAddressOfFunctions,edx ; Save it to local variable******************************
        mov edx,[esi+20h]       ; AddressOfNames RVA
        add edx,ebx             ; RVA + base
        mov pAddress0fNames,edx ; Save it to local variable**********************************
        mov edx,[esi+14h]       ;NumberofFunctions        
        mov NumberofFunctions,edx   ;Save it to local variable*******************************

    }

    printf("Name of Module:%s\n\tBase of Moudle=%p\n",
            (char *)pNameOfModule,pBaseOfKernel32);

    printf("Number of Functions in it is %d\n",NumberofFunctions);    
     for(int i=0;i<NumberofFunctions;i++)
        printf("Function:\n\tAddress=0x%p\n\tName=%s\n",
            (pBaseOfKernel32 + *((unsigned long *) (pAddressOfFunctions+i*4))),
            (char *)(pBaseOfKernel32 + *((unsigned long *) (pAddress0fNames+i*4)))) ;
}
void main(void)
{
    GetKernel32FuncAddr();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值