• kernel32.dll!API调用流程分析


    用IDA, OD分析kernel32.dll的API调用流程,知其所以然。


    1.用CreateFileW,CreateFileA函数来分析


    CreateFileA 整个流程:

    kernel32.dll!CreateFileA流程
    kernel32.dll!Basep8BitStringToDynamicUnicodeString
    kernel32.dll!CreateFileWImplementation ; 实际就是 kernel32.dll导出表 CreateFil 地址
    kernel32.dll!RtlFreeUnicodeString


    每个流程的包含流程:
    A. kernel32.dll!CreateFileWImplementation流程
    ds:RtlInitUnicodeStringEx
    BaseIsThisAConsoleName
    API-MS-Win-Core-File-L1-1-0.CreateFileW ; 实际就是 kernel32.dll导入表 CreateFileW 地址


    B. API-MS-Win-Core-File-L1-1-0.CreateFileW流程
    ntdll.SbSelectProcedure
    ntdll.dll!zwCreateFile
    调用完成, CreateFileA返回.....

    C. ntdll.dll!zwCreateFile流程
    ntdll.dll!ntCreateFile
    ntdll.dll!KiFastSystemCall
    sysenter ;sysenter指令切入内核

     /*-------------------------------------------------------------------------------------------------*/

    CreateFileW整个流程:
    kernel32.dll!CreateFileWImplementation ; 实际就是 kernel32.dll导出表 CreateFil 地址

     /*----------------------------------------------------------------------------------------------------------*/

    流程描述:
    1. 调用 CreateFileA后 会转换成UNICODE版本, 然后直接调用CreateFileW(就是导出表的CreateFileW地址)
    2. 然后在调用 CreateFileW(就是导入表CreateFileW地址, API-MS-Win-Core-File-L1-1.dll理解为转换调用下)
    3. 导入表的CreateFileW才是函数的实现, 继续调用a,b,c

    a. xxx初始api, ntdll.dll!zwCreateFile, ntdll.dll!ntCreateFile
    b. ntdll.dll!KiFastSystemCall
    c. sysenter指令切入内核
    ....................
    内核函数调用
    ....................
    ......................
    省略xxxxxxxxx


    总结一下心得:
    1. 如果API为A版本. 先转换为W版本, W版本不用转换, CreateFileA和CreateFileW的流程都一样, 前者比后者多了一个unicode转换。
    2. 通过 导出表的相应API地址 调用API, 经过若干个初始化功能函数调用
    3. 通过 导入表的相应API地址 在调用API, 经过ntdll.dll!zwAPI 到ntdll.dll!ntAPI 的若干个调用后, 通过汇编指令
    sysenter切入内核
    4. 内核函数调用, 省略xxxxxxxxx

  • 相关阅读:
    巴洛克式和哥特式的区别
    推荐阅读书籍,是时候再行动起来了。
    AtCoder ABC 159F Knapsack for All Segments
    AtCoder ABC 159E Dividing Chocolate
    AtCoder ABC 158F Removing Robots
    AtCoder ABC 158E Divisible Substring
    AtCoder ABC 157F Yakiniku Optimization Problem
    AtCoder ABC 157E Simple String Queries
    AtCoder ABC 157D Friend Suggestions
    AtCoder ABC 156F Modularness
  • 原文地址:https://www.cnblogs.com/mayingkun/p/5408663.html
Copyright © 2020-2023  润新知