`

黑客常用WinAPI函数整理

 
阅读更多

转自博客园 http://www.cnblogs.com/fanzhidongyzby/archive/2012/09/01/2667038.html

之前的博客写了很多关于Windows编程的内容,在Windows环境下的黑客必须熟练掌握底层API编程。为了使读者对黑客常用的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,&para,0,&tid);

_beginthread(startAddr,0,0);

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

CreateRemoteThread(hproc,0,0,func,&para,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,&para,false, COPY_FILE_FAIL_IF_EXISTS);

移动文件:

MoveFile(src,des);

MoveFileEx(src,des,false);

MoveFileWithProgress(src,des,fun,&para, 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函数,这肯定不是最完整的,但是都是博主从一份份资料中挖掘出来的,也希望读者能多多补充,相互进步!

分享到:
评论

相关推荐

    黑客风—代码雨.7z

    本项目名为"黑客风—代码雨.7z",它巧妙地利用了C/C++的基础知识以及WinAPI函数,创造了一个具有黑客风格的特效——代码雨。这个项目不仅展示了编程的艺术性,也提供了一个学习和实践C/C++及Windows编程的好机会。 ...

    DLL远程线程注入源码

    VB使用COM组件和WinAPI函数,同样可以调用`CreateRemoteThread`等函数。不过,VB的语法较为直观,对于初学者来说可能更易理解。 需要注意的是,远程线程注入技术如果被滥用,可能会造成安全风险,例如恶意软件通过...

    ph-malhide:进程黑客 2 隐藏在外部应用程序中

    4. **WinAPI滥用**: 恶意软件可能会滥用WinAPI函数来绕过安全措施,如使用`CreateRemoteThread`创建远程线程在目标进程中执行代码,或使用`VirtualProtect`改变内存保护模式以执行未授权的操作。 5. **C语言编程**:...

    远程线程注入

    这通常通过API调用如`CreateRemoteThread`或者使用WinAPI函数来实现。 1. **创建远程线程**: 在Windows中,`CreateRemoteThread` API是最常见的创建远程线程的方法。它接受目标进程的句柄、线程入口点的地址、...

    简易入侵范例,VB远程注入DLL等操作.rar

    在VB中,可以使用WinAPI函数,如`CreateRemoteThread`和`VirtualAllocEx`来实现这一过程。首先,攻击者需要将DLL文件加载到目标进程的内存空间,然后创建一个新线程,使该DLL的导出函数得以执行。这可能导致未经授权...

    远程键盘记录 VB源代码

    2. **钩子技术**:VB可以通过WinAPI函数(如SetWindowsHookEx)设置键盘钩子,这样可以在键盘事件发生时接收通知。钩子函数会在每次按键事件发生时被调用,从而捕获输入信息。 3. **网络通信**:为了将记录的键盘...

    隐藏进程(源代码)

    1. **进程创建与隐藏**:源代码可能包含了使用CreateProcess或CreateRemoteThread等API创建新进程的方法,并利用WinAPI函数来隐藏进程的属性,如隐藏窗口、禁止在任务管理器中显示等。 2. **API Hooking**:为了...

    Delphi中编制软件版权保护控件

    在Delphi中实现这些功能,我们需要熟悉Delphi的API调用,如WinAPI函数,以及可能用到的第三方库。例如,我们可以利用System.Classes和System.SysUtils单元中的函数来处理文件和网络操作,而System.Win.ComObj单元则...

    连环注入与监视新进程注入源码

    这通常是通过钩子(Hook)技术实现的,例如设置WinAPI函数的钩子,特别是那些与进程创建相关的API,如CreateProcess、CreateThread等。一旦检测到新进程的创建,攻击者就可以选择性地向这些进程中注入自定义代码,以...

    记录键盘并发送KeyRecord

    在Windows系统中,可以使用WinAPI函数如`SetWindowsHookEx`来设置键盘钩子,而在Unix/Linux系统中,可能需要利用`Xlib`或`XCB`库来监听键盘事件。这些技术允许程序在用户按下或释放键盘键时接收到通知。 2. 数据...

    代码注入_package.rar

    - **应用场景**:开发者可能会用到代码注入进行调试,而黑客可能利用此技术执行恶意行为,如键盘记录、控制目标进程等。 - **技术实现**:通常通过WriteProcessMemory函数写入内存,CreateRemoteThread函数执行...

    全能鼠标键盘记录器

    在Windows系统中,通常会使用WinAPI函数,而在其他操作系统上可能需要使用不同的方法。 9. **反监控措施**:对于担心被记录的用户,可以采取一些措施,如使用虚拟键盘输入敏感信息,或使用隐私保护软件阻止键盘记录...

    book_delphi_haker

    5. **低级编程技巧**:了解PASM(Pascal Assembler)和WinAPI,可以让你直接与操作系统交互,实现更底层的功能,如内存操作、系统调用等。 6. **调试和性能优化**:Delphi提供了一流的调试工具,如GDB和FastMM内存...

    溢出后不使用工具添加一个服务教程

    在黑客攻击中,溢出是常见的一种利用手段,通过精心构造的输入数据使得程序的控制流转移,进而执行攻击者指定的代码。在这个过程中,不使用工具手动操作,是对技术掌握的高级体现。 首先,我们需要理解缓冲区溢出的...

    mallware

    WinAPI是Windows操作系统提供给开发者用于创建和管理应用程序的函数集合,恶意软件可以滥用这些函数来执行恶意操作,如控制系统、窃取数据或者如描述中所述,更改计算机的内存设置。 "重新制作以使其成为ud"可能...

    易语言模块大全(374个)

    黑客入侵模块 V1.00.ec 寻找磁盘文件模块 1.0.ec 线程类.ec 超级列表框补助.ec sql操作模块.ec 置交替色.ec 查杀程序.ec QQ通讯协议模块.ec 分割无逢文本模块.ec 通用加解密.ec 常用API.ec 外挂作坊模块(新年礼品)....

    易语言模块914个

    BoyChong专用常用模块2.ec BPL专用更新模块.ec cards.ec coolp.ec Cool皮肤模块.ec copy_dir.ec CPU占用率检测模块.ec cs.ec DES加密模块 1.0.ec DIY热键框模块.ec DLL注入模块.ec DOS命令模块.ec EC....

Global site tag (gtag.js) - Google Analytics