zoukankan      html  css  js  c++  java
  • KERNEL32.dll的ExportTable以及如何查找导出的函数

    我的上一篇博客Analysis of notepad process loading涉及的程序是没有ExportTable的,所以这一篇呢,就分析一下DLL里的ExportTable,以KERNEL32.dll为例。
    首先在Hex Edit里打开KERNEL32.dll:
    KERNEL32.dll

    可以看出,KERNEL32.dll还是符合PE文件格式滴~

    ① ExportTable(RVA):00 0B 4D E0,SizeofExportTable:00 00 AA CC
    ② FileAignment、SectionAlignment都为10 00,嗯,好爽哦,都不用进行RVA和RAW之间的映射换算了~
    ③ 转到Export Directory处:( 注意不是Descriptor哦,ExportTable和ImportTable对应的数据结构可不一样
    Export Directory

    typedef struct _IMAGE_EXPORT_DIRECTORY {
        DWORD   Characteristics;
        DWORD   TimeDateStamp;
        WORD    MajorVersion;
        WORD    MinorVersion;
        DWORD   Name;
        DWORD   Base;
        DWORD   NumberOfFunctions;
        DWORD   NumberOfNames;
        DWORD   AddressOfFunctions;     // RVA from base of image
        DWORD   AddressOfNames;         // RVA from base of image
        DWORD   AddressOfNameOrdinals;  // RVA from base of image
    } IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
    

    关于Export Directory结构(这只是个示意图哈):
    Export Directory

    可知AddressOfNameOrdinals为00 0B 78 A8;AddressOfFunctions为00 0B 4E 08,也就是紧接着该Directory后面;AddressOfNames为00 0B 63 58:
    00 0B 63 58

    我们看看00 0B 83 5D处:
    00 0B 83 5D
    可知,函数AcquireSRWLockExclusive()的索引为0,函数AcquireSRWLockShared()的索引为1,......
    凭借这个索引查找AddressOfNameOrdinals地址处的对应值:
    Ordinal 数组
    可知,AcquireSRWLockExclusive()对应00 02,AcquireSRWLockShared()对应00 03,......

    转到AddressOfFunctions 00 0B 4E 08处:
    00 0B 4E 08

    (嗯,这里就没验证分析得正不正确了。因为要找到一个被某程序调用的且索引排名靠前的函数有点麻烦啊。。就只好等到之后写程序来验证了。。)


    关于GetProcAddress()操作原理:

    利用AddressOfNames成员转到“函数名称数组”
    “函数名称数组”中存储着字符串地址。通过比较strcmp字符串,查找指定函数名称,记录下相应name_index
    利用AddressOfNameOrdinals成员,转到orinal数组,在orinal数组中通过name_index查找相应orinal值
    利用AddressOfFunctions成员转到“函数地址数组”(EAT),由orinal作索引得到指定函数的起始地址
    
    Those who seek some sort of a higher purpose or 'universal goal', who don't know what to live for, who moan that they must 'find themselves'. You hear it all around us. That seems to be theofficial bromide of our century. Every book you open. Every drooling self-confession. It seems to be the noble thing to confess. I'd think it would be the most shameful one.
  • 相关阅读:
    nodejs 文件路径问题
    nodejs
    return , return true , return false的区别
    严防个人极端案事件 中央政法委要求健全危机干预机制
    《资本论》:什么是“原始积累”?农民的土地因何被社会剥夺
    程序员自我修炼(四)—— 代码重构
    中国各民族人口总数排名
    农村人可以去别的村买宅基地吗?这样合不合法?看完你就知道了!
    如果所在的农村拆迁了,可以在另外一个村申请宅基地吗?
    哈姆扎·本·拉登为什么反对美国?
  • 原文地址:https://www.cnblogs.com/spenghui/p/7941092.html
Copyright © 2011-2022 走看看