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

  • 相关阅读:
    sql学习笔记
    正则表达式30分钟入门教程(转) 收藏
    学习Javascript闭包(Closure)
    Bug等级规范
    下载1G的东西用1M网速理论上要用多长时间?
    C#多线程学习(四) 多线程的自动管理(线程池)
    JS调用WebServers
    北京软件公司排名
    Js调用WebServices
    C#多线程学习(三) 生产者和消费者
  • 原文地址:https://www.cnblogs.com/mayingkun/p/5408663.html
Copyright © 2011-2022 走看看