zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    ZZNU 正约数之和 2094
    ZZNUOJ 2022 摩斯密码
    POJ
    NYOJ 1277Decimal integer conversion (第九届河南省省赛)
    hrbust 2080链表 【贪心】
    hdu-5707-Combine String
    POJ 2442-Sequence(优先队列)
    Reversion Count
    python 07篇 内置函数和匿名函数
    python 06篇 常用模块
  • 原文地址:https://www.cnblogs.com/mayingkun/p/5408663.html
Copyright © 2011-2022 走看看