windows中重要的API略解

  • Post author:
  • Post category:其他


——该篇主要记录常用的API基本调用,做整理作用


Shellcode编写必用

动态载入DLL所需要的三个函数

1、LoadLibraryA()

用途:载入指定的DLL

    HMODULE WINAPI LoadLibraryA(
        _In_ LPCSTR lpLibFileName
        );
    WINBASEAPI _Ret_maybenull_

参数:lpLibFileName

通过名称指定要装载的DLL

输出:


返回装载 DLL 库模块的实例句柄



出错将返回一个错误代码





2、GetProcAddress(,)

用途:


返回指定的模块中,指定的过程或函数的入口地址。

    WINBASEAPI FARPROC WINAPI GetProcAddress(
        _In_ HMODULE hModule,
        _In_ LPCSTR lpProcName
    );





参数:hModule



被调用函数的 DLL 句柄,这个值由 LoadLibrary 返回

lpProcName

需要查找入口地址的过程名或字符串指针

输出:


返回 DLL 中由参数 ProcName 指定的过程或函数的入口地址



否则返回 nil(/x00) 。

3、FreeLibrary()   Tips:在编写shellcode时可以不使用

用途:

将指定的 DLL 文件从内存中卸载 1 次。

    WINBASEAPI BOOL WINAPI FreeLibrary(
        _In_ HMODULE hLibModule
        );





参数:hLibModule

欲卸载的dll库的句柄

输出:

使 DLL 的引用计数减 1,如果计数减为 0 则卸载该 DLL。

文件操作所需要的六个函数

1、CreateFileA()

用途:创建物理文件操作的句柄      Tips:不是创建文件,仅创建对象

    HANDLE CreateFile(
      LPCTSTR lpFileName, //指向文件名的指针
      DWORD dwDesiredAccess, //访问模式(写/读)
      DWORD dwShareMode, //共享模式
      LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针
      DWORD dwCreationDisposition, //如何创建
      DWORD dwFlagsAndAttributes, //文件属性
      HANDLE hTemplateFile //用于复制文件句柄
      );

参数:lpFileName

要操作的文件名

输出:返回一个可以操作的句柄

2、GetFileSize()

用途:获取指定文件的大小(长度)

    WINBASEAPI DWORD WINAPI GetFileSize(
        _In_ HANDLE hFile,
        _Out_opt_ LPDWORD lpFileSizeHigh
        );

参数:hFile

待获取大小的文件句柄

lpFileSizeHigh

指向一个 DWORD 变量的指针,该变量用于接收文件大小高位(第32-63位)部分的值。

若不需获取这部分的值,该参数可以为 NULL 。

输出:返回文件大小的低位,若指定高位也输出高位到指定指针

3、CreateFileMappingA()

用途:创建文件映射内核对象          TipS:约等于把文件从磁盘搬到内存

    HANDLE WINAPI CreateFileMappingA(
        _In_     HANDLE hFile,
        _In_opt_ LPSECURITY_ATTRIBUTES lpFileMappingAttributes,安全设置
        _In_     DWORD flProtect,//保护设置
        _In_     DWORD dwMaximumSizeHigh,//高位文件大小
        _In_     DWORD dwMaximumSizeLow,//低位文件大小
        _In_opt_ LPCSTR lpName//共享内存名称
        );

参数:hFile

要操作的物理文件的句柄

dwMaximumSizeLow

由GetFileSize得到的低位文件大小

输出:返回文件映像文件句柄      Tips:文件映像文件约等于文件在内存里的拷贝

4、MapViewOfFile()

用途:将文件映像文件映射到本进程的地址空间中

    LPVOID WINAPI MapViewOfFile(
        _In_ HANDLE hFileMappingObject,
        _In_ DWORD dwDesiredAccess,//映射对象的文件数据的访问方式
        _In_ DWORD dwFileOffsetHigh,//文件映射起始偏移的高32位.
        _In_ DWORD dwFileOffsetLow,//文件映射起始偏移的低32位.(64KB对齐不是必须的)
        _In_ SIZE_T dwNumberOfBytesToMap//指定映射文件的字节数,可以使用0
        );

参数:hFileMappingObject

CreateFileMappingA返回的映像文件句柄

输出:返回映射视图文件的开始地址值        Tips:约等于找到文件在内存的起始位置

5、UnmapViewOfFile()

用途:停止当前程序的一个内存映射

    BOOL WINAPI UnmapViewOfFile(
        _In_ LPCVOID lpBaseAddress
        );

参数:映射文件开始地址

输出:非零表示从当前进程地址空间中移除映射        Tips:约等于把文件移出自己的地址空间

6、CloseHandle()

用途:关闭句柄

    BOOL WINAPI CloseHandle(
        _In_ HANDLE hObject
        );

参数:hObject

欲关闭的句柄

输出:关闭返回TURE

遍历查找文件的三个函数

1、FindFirstFileA()

用途:根据文件名查找文件

    HANDLE WINAPI FindFirstFileA(
        _In_ LPCSTR lpFileName,
        _Out_ LPWIN32_FIND_DATAA lpFindFileData
        );

参数:lpFileName

文件名,接受通配符*和?

lpFindData

一个WIN32_FIND_DATA的结构,该结构说明了遍历到文件或者子目录的的属性

输出:返回找到的第一个有效句柄

否则返回INVALID_HANDLE_VALUE

2、FindNextFileA()

用途:遍历查找文件

    BOOL WINAPI FindNextFileA(
        _In_ HANDLE hFindFile,
        _Out_ LPWIN32_FIND_DATAA lpFindFileData
        );

参数:hFindFile

FindFirstFileA返回的句柄

输出:将找到的句柄保存在hFindFile中

返回值0表示失败,1表示成功

3、FindClose()

用途:关闭FindFirstFile创建的搜索句柄    Tips:必须和FindFirstFile成对出现

    BOOL WINAPI FindClose(
        _Inout_ HANDLE hFindFile
        );

参数:hFindFile

FindFirstFile创建的句柄

输出:成功返回非零值



版权声明:本文为qq_40026795原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。