0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

黑客常用WinAPI函数有哪些_常用的7大API函数详解

电子工程师 作者:工程师a 2018-05-12 09:24 次阅读

为了对黑客常用的Windows API有个更全面的了解以及方便日后使用API方法的查询,特将这些常用的API按照7大分类进行整理如下,希望对大家的学习有所帮助。

一、进程

创建进程:

CreateProcess("C:\\windows\\notepad.exe",0,0,0,0,0,0,0,&si,&pi);

WinExec("notepad",SW_SHOW);

ShellExecute(0,"open","notepad","c:\\a.txt","",SW_SHOW);

ShellExecuteEx(&sei);

遍历进程:

CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

Process32First(hsnap,&pe32);

Process32Next(hsnap,&pe32);

终止进程:

ExitProcess(0);

TerminateProcess(hProc,0);

打开进程:

OpenProcess(PROCESS_ALL_ACCESS,0,pid);\

获取进程ID:

GetCurrentProcesssId();

获取进程可执行文件路径:

GetModuleFileName(NULL,buf,len);

GetProcessImageFileName(hproc,buf,len);

遍历进程模块信息

CreateToolhelp32Snapshot(TH32CS_SNAPMODILE,pid);

Module32First(hsnap,&mdl32);

Module32Next(hsnap,&mdl2);

获取指定模块句柄:

GetModuleHandle(“kernel32.dll”);

获取模块内函数地址:

GetProcessAddr(hmdl,”MessageBox”);

动态加载DLL:

LoadLibrary(“user32.dll”);

卸载DLL:

FreeLibrary(hDll);

获取进程命令行参数

GetCommandLine();

任何进程GetCommandLine函数地址后偏移一个字节后的4字节地址为命令行地址。

读写远程进程数据:

ReadProcessMemory(hproc,baseAddr,buf,len,&size);

WriteProcessMemory(hproc,baseAddr,buf,len,&size);

申请内存:

VirtualAlloc(0,size,MEM_COMMIT, PAGE_EXECUTE_READWRITE);

VirtualAllocEx(hproc,0,size,MEM_COMMIT, PAGE_EXECUTE_READWRITE);

修改内存属性:

VirtualProtect(addr,size,PAGE_EXECUTE_READWRITE,&oldAddr);

VirtualProtectEx(hproc,addr,size,PAGE_EXECUTE_READWRITE,&oldAddr);

释放内存:

VirtualFree( addr, size, MEM_RELEASE);

VirtualFreeEx(hproc, addr, size, MEM_RELEASE);

获取系统版本(Win NT/2K/XP<0x80000000):

getVersion();

读写进程优先级:

SetPriorityClass(hproc,Normal);

GetPriority(hproc);

SetProcessPriorityBoost(hproc,true);

GetProcessPriorityBoost(hproc,pBool);

二、线程

创建线程(CreateThread的线程函数调用了strtok、rand等需使用_endthread()释放内存):

CreateThread(0,0,startAddr,¶,0,&tid);

_beginthread(startAddr,0,0);

_beginthreadex(0,0,startAddr,0,0,&tid);

CreateRemoteThread(hproc,0,0,func,¶,0,&tid);

获取线程ID:

GetCurrentThreadId();

关闭线程句柄(减少内核对象使用次数,防止内存泄漏):

CloseHandle(hthread);

挂起与激活线程(维护暂停次数):

SuspendThread(hthread);

ResumeThread(hthread);

获取线程退出代码:

GetExitCode(hthread,&code);

等待线程退出(线程受信状态或超时):

WaitForSignleObject(htread,1000);

WaitForMultipleObjects(num,handles,true,INFINITE);

遍历线程:

CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);

Thread32First(hsnap,&mdl32);

Thread32Next(hsnap,&mdl2);

获取线程函数入口:

ZwQueryInfomationThread(hthread,ThreadQuerySetWin32StartAddress,&buf,4,NULL);

打开线程:

OpenThread(THREAD_ALL_ACCESS,false,&tid);

获取线程函数地址所属模块:

GetMappedFileName(hproc,addr,buf,256);

读写线程优先级:

SetThreadPriority(hthread,Normal);

GetThreadPriority(hthread);

SetThreadPriorityBoost(hproc,true);

GetThreadPriorityBoost(hproc,pBool);

终止线程:

ExitThread(5);

TerminateThread(hthread,5);

线程同步临界区对象:

InitializeCriticalSection(&cs);

EnterCriticalSection(&cs);

LeaveCriticalSection(&cs);

DeleteCriticalSection(&cs);

线程同步事件内核对象:

OpenEvent(EVENT_ALL_ACCESS,false,name);

CreateEvent(NULL,false,true,NULL);

WaitForSingleObject(hevnt,INFINITE);

SetEvent(hevnt);

ResetEvent(hevnt);

线程同步互斥内核对象:

CreateMutex(NULL,false,NULL);

WaitForSingleObject(hmutex,INFINITE);

ReleaseMutex(hmutex);

OpenMutex(MUTEX_ALL_ACCESS,false,name);

三、注册表

创建键:

RegCreateKeyEx(HKEY_CURRENT_USER,”TestNewKey”,0,0,REG_OPTION_VOLATILE,KEY_ALL_ACCESS,0,&subkey,&state);

打开键:

RegCreateKeyEx(HKEY_CURRENT_USER,”Control Panel”,0,KEY_ALL_ACCESS,&subkey);

关闭键:

RegCloseKey(hkey);

遍历键:

RegEnumKeyEx(hsubkey,index,keyname,&nameSize,0,0,0,&time);

FileTimeToSystemTime(&time,&systime);

RegQueryInfo(hsubkey,0,0,0,&count,0,0,0,0,0,0,0);

删除键:

RegDeleteKeyEx(hmainkey,subkeyName);

创建值:

RegSetValueEx(hsubkey,”test”,0,REG_WORD,(BYTE*)&value,4);

遍历值:

RegEnumValue(hsubkey,index,name,&nameSize,0,&type,valuebuf,valueLen);

RegQueryValueEx(hsubkey,name,0,type,buf,&size);

删除值:

RegDeleteValue(hsubkey,valuename);

四、文件

创建/打开文件:

CreateFile(“a.txt”,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

设置文件指针:

SetFilePointer(hFile,0,NULL,FILE_END);

读写文件:

ReadFile(hFile,buf,len,&size,0);

WriteFile(hFile,buf,len,&size,0);

强制文件写入磁盘,清空文件高速缓冲区:

FlushFileuffers(hFile);

[解]锁文件区域:

LockFile(hFile,0,0,100,0);

UnlockFile(hFile,0,0,100,0);

复制文件:

CopyFile(src,des,true);

CopyFileEx(src,des,func,¶,false, COPY_FILE_FAIL_IF_EXISTS);

移动文件:

MoveFile(src,des);

MoveFileEx(src,des,false);

MoveFileWithProgress(src,des,fun,¶, MOVEFILE_COPY_ALLOWED);

删除文件:

DeleteFile(filename);

获取文件类型(FILE_TYPE_PIPE):

GetFileType(hFile);

获取文件大小:

GetFileSize(hFile,&high);

获取文件属性(例如FILE_ATTRIBUTE_DIRECTORY进行&运算):

GetFileAttributes(hFile);

遍历文件:

FindFirstFile(nameMode,&wfd);

FindNextFile(hFile,&wfd);

创建管道:

CreatePipe(&hRead,&hWrite,&sa,0);

创建内存映射文件:

CreateFile(“d:\\a.txt”,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,”myMap”);

加载内存映射文件:

MapViewOfFile(hmap,FILE_MAP_ALL_ACCESS,0,0,0);

打开内存映射文件:

OpenFileMapping(FILE_AMP_ALL_ACCESS,false,”myMap”);

卸载内存映射文件:

UnmapViewOfFile(baseAddr);

强制写入内存映射文件到磁盘:

FlushViewOfFile(baseAddr,len);

创建文件夹(只能创建一层):

CreateDirectory(“D:\\a”,NULL);

CreateDirectory(“C:\\a”,”D:\\b”,NULL);

删除文件夹(只能删除空文件夹):

RemoveDirectory(“C:\\a”);

检测逻辑驱动器

GetLogicalDrives();

GetLogicalDriveStrings(len,buf);

获取驱动器类型(DRIVE_CDROM):

GetDriveType(“D:\\”);

五、网络

打开网络资源枚举过程(winnetwk.h、Mpr.lib):

WNetOpenEnum(RESOURCE_GLOBAL,RESOURCETYPE_ANY,0,NULL,hnet);

枚举网络资源:

WNetEnumResource(hnet,&count,pNetRsc,&size);

关闭网络资源枚举过程:

WNetCloseEnum(hnet);

打开关闭WinSocket库:

WSAStartup(version,&wsa);

WSACleanup();

创建套接字:

socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

绑定套接字IP和端口

bind(sock,&addr,len);

监听TCP连接:

listen(sock,10);

接收TCP连接请求:

accept(sock,&addr,&len);

客户端连接:

connect(sock,&addr,len);

发送TCP数据:

send(sock,buf,len,0);

接收TCP数据:

recv(sock,buf,len,0);

发送UDP数据:

sendto(sock,buf,len,0,&addr,len);

接收UDP数据:

recvfrom(sock,buf,len,0,&addr,&len);

六、服务

打开SCM服务控制管理器:

OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);

创建服务:

CreateService(mgr,"MyService"," MyService",SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_IGNORE,path,NULL,NULL,NULL,NULL,NULL);

打开服务对象:

OpenService(mgr," MyService ",SERVICE_START);

启动服务:

StartService(serv,0,NULL);

查询服务状态:

QueryServiceStatus(serv,&state);

关闭服务句柄:

CloseServiceHandle(hdl);

连接到SCM:

StartServiceCtrlDispatcher(DispatchTable);

注册服务控制函数:

RegisterServiceCtrlHandler("MyServicer",ServiceCtrl);

设置服务状态:

SetServiceStatus(hss,&ServiceStatus);

控制服务:

ControlService(serv,SERVICE_CONTROL_STOP,&state);

删除服务:

DeleteService(serv);

遍历服务:

EnumServicesStatus(hscm,SERVICE_WIN32|SERVICE_DRIVER,SERVICE_STATE_ALL,&srvSts,len,&size,&count,NULL);

查询服务配置:

QueryServiceConfig(hserv,&srvcfg,size,&size);

七、消息

发送消息:

SendMessage(HWND_BROADCAST,WM_LBUTTONDOWN,0,0);

接收消息:

GetMessage(&msg,NULL,0,0);

投递消息:

PostMessage(HWND_BROADCAST,WM_LBUTTONDOWN,0,0);

获取消息:

PeekMessage(&msg,NULL,0,0);

转换消息:

TranslateMessage (&msg);

分发消息:

DispatchMessage (&msg);

等待消息:

WaitMessage();

发送退出消息:

PostQuitMessage(0);

安装消息钩子:

SetWindowsHookEx(WH_KEYBOARD,keyBoardProc,0,tid);

卸载消息钩子:

UnhookWindowsHookEx(hhk);

以上是作者目前就相关技术所接触的最常用的一批API函数,这肯定不是最完整的,但是都是博主从一份份资料中挖掘出来的,也希望读者能多多补充,相互进步!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1484

    浏览量

    61806
  • API函数
    +关注

    关注

    0

    文章

    15

    浏览量

    8047
收藏 人收藏

    评论

    相关推荐

    常用SQL函数及其用法

    SQL(Structured Query Language)是一种用于管理和操作关系数据库的编程语言。SQL 提供了丰富的函数库,用于数据检索、数据更新、数据删除以及数据聚合等操作。以下是一些常用
    的头像 发表于 11-19 10:18 110次阅读

    详解kubectl常用命令

    详解kubectl常用命令
    的头像 发表于 11-05 15:39 116次阅读
    <b class='flag-5'>详解</b>kubectl<b class='flag-5'>常用</b>命令

    Python常用函数大全

    在 Python 世界里,一些宝藏函数和模块,它们可以让你编程更轻松、代码更高效。这篇文章将带你一一认识这些神器,让你的开发生活瞬间轻松不少!
    的头像 发表于 10-27 17:20 168次阅读

    RTOS中钩子函数的用途及用法

    在很多操作系统中,都存在这样一类API函数接口:HOOK函数(也叫钩子函数)。
    的头像 发表于 10-23 16:25 167次阅读
    RTOS中钩子<b class='flag-5'>函数</b>的用途及用法

    什么叫系统的频率响应函数?它和传递函数何关系

    工具。它是一个复数函数,通常用H(jω)表示,其中ω是角频率,j是虚数单位。频率响应函数可以提供系统在频域内的行为特征,包括系统的增益、相位以及共振频率等信息。 频率响应函数与传递
    的头像 发表于 10-18 09:29 843次阅读

    labview常用的基本函数

    电子发烧友网站提供《labview常用的基本函数.pdf》资料免费下载
    发表于 10-15 17:29 7次下载

    labview中常用的字符串函数哪些?

    在LabVIEW中,常用的字符串函数广泛覆盖了对字符串的各种操作,包括但不限于格式化、搜索、替换、连接、计算长度等。以下是一些常用的字符串函数及其简要说明: 字符串长度(String
    的头像 发表于 09-04 15:43 514次阅读

    简述socket编程中的常用函数

    Socket编程是一种基于TCP/IP协议的网络编程技术,它允许应用程序通过网络进行通信。在Socket编程中,许多常用函数,它们用于创建、配置、连接、发送和接收数据等操作。以下是对这些
    的头像 发表于 08-16 10:49 291次阅读

    MATLAB信号处理常用函数详解

    MATLAB是一款功能强大的数学软件,尤其在信号处理领域,它提供了众多的函数和工具箱,使得信号的分析、处理、仿真变得简单而高效。本文将详细介绍MATLAB在信号处理中常用函数,并通过具体示例来阐述其应用。
    的头像 发表于 05-17 14:31 1706次阅读

    回调函数(callback)是什么?回调函数的实现方法

    回调函数是一种特殊的函数,它作为参数传递给另一个函数,并在被调用函数执行完毕后被调用。回调函数常用
    发表于 03-12 11:46 2705次阅读

    python中open函数的用法详解

    python中open函数的用法详解 Python中的open()函数用于打开文件。它接受文件名和模式作为参数,并返回一个文件对象。文件对象可用于读取、写入和管理文件。 open()函数
    的头像 发表于 01-30 15:31 1931次阅读

    函数指针的五大作用

    1,回调函数机制函数指针常用于实现回调函数。通过将函数指针作为参数传递给另一个函数,可以在特定事
    的头像 发表于 12-06 08:00 1835次阅读
    <b class='flag-5'>函数</b>指针的五大作用

    vlookup函数的使用方法

    VLOOKUP函数是Excel电子表格中一种非常常用和有用的函数。它允许用户根据一个特定的查找值,在一个给定的表格中查找匹配的值,并返回这些匹配值所在列的对应数据。这个函数
    的头像 发表于 11-30 17:13 3073次阅读

    sumif函数的使用技巧

    SUMIF函数是Excel中非常常用函数之一,它可以根据指定的条件对给定的范围内的数值进行求和操作。在日常工作和数据处理中,我们经常需要根据某些条件来统计和汇总数据,SUMIF函数
    的头像 发表于 11-30 16:30 1243次阅读

    HAL库常用函数汇总

    1,系统函数HAL_Delay原型:voidHAL_Delay(uint32_tDelay);作用:利用滴答定时器生成的系统延迟函数参数:Delay:延迟时间,单位是ms返回值:无示例代码
    的头像 发表于 11-29 08:00 3036次阅读
    HAL库<b class='flag-5'>常用</b><b class='flag-5'>函数</b>汇总