——该篇主要记录常用的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创建的句柄
输出:成功返回非零值