0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

黑客常用WinAPI函數(shù)有哪些_常用的7大API函數(shù)詳解

電子工程師 ? 作者:工程師a ? 2018-05-12 09:24 ? 次閱讀

為了對(duì)黑客常用的Windows API有個(gè)更全面的了解以及方便日后使用API方法的查詢(xún),特將這些常用的API按照7大分類(lèi)進(jìn)行整理如下,希望對(duì)大家的學(xué)習(xí)有所幫助。

一、進(jìn)程

創(chuàng)建進(jìn)程:

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);

遍歷進(jìn)程:

CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

Process32First(hsnap,&pe32);

Process32Next(hsnap,&pe32);

終止進(jìn)程:

ExitProcess(0);

TerminateProcess(hProc,0);

打開(kāi)進(jìn)程:

OpenProcess(PROCESS_ALL_ACCESS,0,pid);\

獲取進(jìn)程ID:

GetCurrentProcesssId();

獲取進(jìn)程可執(zhí)行文件路徑:

GetModuleFileName(NULL,buf,len);

GetProcessImageFileName(hproc,buf,len);

遍歷進(jìn)程模塊信息

CreateToolhelp32Snapshot(TH32CS_SNAPMODILE,pid);

Module32First(hsnap,&mdl32);

Module32Next(hsnap,&mdl2);

獲取指定模塊句柄:

GetModuleHandle(“kernel32.dll”);

獲取模塊內(nèi)函數(shù)地址:

GetProcessAddr(hmdl,”MessageBox”);

動(dòng)態(tài)加載DLL:

LoadLibrary(“user32.dll”);

卸載DLL:

FreeLibrary(hDll);

獲取進(jìn)程命令行參數(shù)

GetCommandLine();

任何進(jìn)程GetCommandLine函數(shù)地址后偏移一個(gè)字節(jié)后的4字節(jié)地址為命令行地址。

讀寫(xiě)遠(yuǎn)程進(jìn)程數(shù)據(jù):

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

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

申請(qǐng)內(nèi)存:

VirtualAlloc(0,size,MEM_COMMIT, PAGE_EXECUTE_READWRITE);

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

修改內(nèi)存屬性:

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

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

釋放內(nèi)存:

VirtualFree( addr, size, MEM_RELEASE);

VirtualFreeEx(hproc, addr, size, MEM_RELEASE);

獲取系統(tǒng)版本(Win NT/2K/XP<0x80000000):

getVersion();

讀寫(xiě)進(jìn)程優(yōu)先級(jí):

SetPriorityClass(hproc,Normal);

GetPriority(hproc);

SetProcessPriorityBoost(hproc,true);

GetProcessPriorityBoost(hproc,pBool);

二、線程

創(chuàng)建線程(CreateThread的線程函數(shù)調(diào)用了strtok、rand等需使用_endthread()釋放內(nèi)存):

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();

關(guān)閉線程句柄(減少內(nèi)核對(duì)象使用次數(shù),防止內(nèi)存泄漏):

CloseHandle(hthread);

掛起與激活線程(維護(hù)暫停次數(shù)):

SuspendThread(hthread);

ResumeThread(hthread);

獲取線程退出代碼:

GetExitCode(hthread,&code);

等待線程退出(線程受信狀態(tài)或超時(shí)):

WaitForSignleObject(htread,1000);

WaitForMultipleObjects(num,handles,true,INFINITE);

遍歷線程:

CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);

Thread32First(hsnap,&mdl32);

Thread32Next(hsnap,&mdl2);

獲取線程函數(shù)入口:

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

打開(kāi)線程:

OpenThread(THREAD_ALL_ACCESS,false,&tid);

獲取線程函數(shù)地址所屬模塊:

GetMappedFileName(hproc,addr,buf,256);

讀寫(xiě)線程優(yōu)先級(jí):

SetThreadPriority(hthread,Normal);

GetThreadPriority(hthread);

SetThreadPriorityBoost(hproc,true);

GetThreadPriorityBoost(hproc,pBool);

終止線程:

ExitThread(5);

TerminateThread(hthread,5);

線程同步臨界區(qū)對(duì)象:

InitializeCriticalSection(&cs);

EnterCriticalSection(&cs);

LeaveCriticalSection(&cs);

DeleteCriticalSection(&cs);

線程同步事件內(nèi)核對(duì)象:

OpenEvent(EVENT_ALL_ACCESS,false,name);

CreateEvent(NULL,false,true,NULL);

WaitForSingleObject(hevnt,INFINITE);

SetEvent(hevnt);

ResetEvent(hevnt);

線程同步互斥內(nèi)核對(duì)象:

CreateMutex(NULL,false,NULL);

WaitForSingleObject(hmutex,INFINITE);

ReleaseMutex(hmutex);

OpenMutex(MUTEX_ALL_ACCESS,false,name);

三、注冊(cè)表

創(chuàng)建鍵:

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

打開(kāi)鍵:

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

關(guān)閉鍵:

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);

創(chuàng)建值:

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);

四、文件

創(chuàng)建/打開(kāi)文件:

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

設(shè)置文件指針:

SetFilePointer(hFile,0,NULL,FILE_END);

讀寫(xiě)文件:

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

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

強(qiáng)制文件寫(xiě)入磁盤(pán),清空文件高速緩沖區(qū):

FlushFileuffers(hFile);

[解]鎖文件區(qū)域:

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

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

復(fù)制文件:

CopyFile(src,des,true);

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

移動(dòng)文件:

MoveFile(src,des);

MoveFileEx(src,des,false);

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

刪除文件:

DeleteFile(filename);

獲取文件類(lèi)型(FILE_TYPE_PIPE):

GetFileType(hFile);

獲取文件大?。?/p>

GetFileSize(hFile,&high);

獲取文件屬性(例如FILE_ATTRIBUTE_DIRECTORY進(jìn)行&運(yùn)算):

GetFileAttributes(hFile);

遍歷文件:

FindFirstFile(nameMode,&wfd);

FindNextFile(hFile,&wfd);

創(chuàng)建管道:

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

創(chuàng)建內(nèi)存映射文件:

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

加載內(nèi)存映射文件:

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

打開(kāi)內(nèi)存映射文件:

OpenFileMapping(FILE_AMP_ALL_ACCESS,false,”myMap”);

卸載內(nèi)存映射文件:

UnmapViewOfFile(baseAddr);

強(qiáng)制寫(xiě)入內(nèi)存映射文件到磁盤(pán):

FlushViewOfFile(baseAddr,len);

創(chuàng)建文件夾(只能創(chuàng)建一層):

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

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

刪除文件夾(只能刪除空文件夾):

RemoveDirectory(“C:\\a”);

檢測(cè)邏輯驅(qū)動(dòng)器

GetLogicalDrives();

GetLogicalDriveStrings(len,buf);

獲取驅(qū)動(dòng)器類(lèi)型(DRIVE_CDROM):

GetDriveType(“D:\\”);

五、網(wǎng)絡(luò)

打開(kāi)網(wǎng)絡(luò)資源枚舉過(guò)程(winnetwk.h、Mpr.lib):

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

枚舉網(wǎng)絡(luò)資源:

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

關(guān)閉網(wǎng)絡(luò)資源枚舉過(guò)程:

WNetCloseEnum(hnet);

打開(kāi)關(guān)閉WinSocket庫(kù):

WSAStartup(version,&wsa);

WSACleanup();

創(chuàng)建套接字:

socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

綁定套接字IP和端口

bind(sock,&addr,len);

監(jiān)聽(tīng)TCP連接:

listen(sock,10);

接收TCP連接請(qǐng)求:

accept(sock,&addr,&len);

客戶(hù)端連接:

connect(sock,&addr,len);

發(fā)送TCP數(shù)據(jù):

send(sock,buf,len,0);

接收TCP數(shù)據(jù):

recv(sock,buf,len,0);

發(fā)送UDP數(shù)據(jù):

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

接收UDP數(shù)據(jù):

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

六、服務(wù)

打開(kāi)SCM服務(wù)控制管理器:

OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);

創(chuàng)建服務(wù):

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

打開(kāi)服務(wù)對(duì)象:

OpenService(mgr," MyService ",SERVICE_START);

啟動(dòng)服務(wù):

StartService(serv,0,NULL);

查詢(xún)服務(wù)狀態(tài):

QueryServiceStatus(serv,&state);

關(guān)閉服務(wù)句柄:

CloseServiceHandle(hdl);

連接到SCM:

StartServiceCtrlDispatcher(DispatchTable);

注冊(cè)服務(wù)控制函數(shù):

RegisterServiceCtrlHandler("MyServicer",ServiceCtrl);

設(shè)置服務(wù)狀態(tài):

SetServiceStatus(hss,&ServiceStatus);

控制服務(wù):

ControlService(serv,SERVICE_CONTROL_STOP,&state);

刪除服務(wù):

DeleteService(serv);

遍歷服務(wù):

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

查詢(xún)服務(wù)配置:

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

七、消息

發(fā)送消息:

SendMessage(HWND_BROADCAST,WM_LBUTTONDOWN,0,0);

接收消息:

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

投遞消息:

PostMessage(HWND_BROADCAST,WM_LBUTTONDOWN,0,0);

獲取消息:

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

轉(zhuǎn)換消息:

TranslateMessage (&msg);

分發(fā)消息:

DispatchMessage (&msg);

等待消息:

WaitMessage();

發(fā)送退出消息:

PostQuitMessage(0);

安裝消息鉤子:

SetWindowsHookEx(WH_KEYBOARD,keyBoardProc,0,tid);

卸載消息鉤子:

UnhookWindowsHookEx(hhk);

以上是作者目前就相關(guān)技術(shù)所接觸的最常用的一批API函數(shù),這肯定不是最完整的,但是都是博主從一份份資料中挖掘出來(lái)的,也希望讀者能多多補(bǔ)充,相互進(jìn)步!

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1510

    瀏覽量

    62327
  • API函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    8086
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    常用SQL函數(shù)及其用法

    SQL(Structured Query Language)是一種用于管理和操作關(guān)系數(shù)據(jù)庫(kù)的編程語(yǔ)言。SQL 提供了豐富的函數(shù)庫(kù),用于數(shù)據(jù)檢索、數(shù)據(jù)更新、數(shù)據(jù)刪除以及數(shù)據(jù)聚合等操作。以下是一些常用
    的頭像 發(fā)表于 11-19 10:18 ?415次閱讀

    RNN的損失函數(shù)與優(yōu)化算法解析

    函數(shù)以下幾種: 交叉熵?fù)p失函數(shù) :交叉熵(Cross Entropy)是一種評(píng)估兩個(gè)概率分布之間差異的度量方法,即通過(guò)比較模型預(yù)測(cè)的概率分布和真實(shí)概率分布之間的差異,來(lái)評(píng)估模型訓(xùn)練的性能。在RNN中,交叉熵?fù)p失
    的頭像 發(fā)表于 11-15 10:16 ?582次閱讀

    詳解kubectl常用命令

    詳解kubectl常用命令
    的頭像 發(fā)表于 11-05 15:39 ?332次閱讀
    <b class='flag-5'>詳解</b>kubectl<b class='flag-5'>常用</b>命令

    Python常用函數(shù)大全

    在 Python 世界里,一些寶藏函數(shù)和模塊,它們可以讓你編程更輕松、代碼更高效。這篇文章將帶你一一認(rèn)識(shí)這些神器,讓你的開(kāi)發(fā)生活瞬間輕松不少!
    的頭像 發(fā)表于 10-27 17:20 ?327次閱讀

    RTOS中鉤子函數(shù)的用途及用法

    在很多操作系統(tǒng)中,都存在這樣一類(lèi)API函數(shù)接口:HOOK函數(shù)(也叫鉤子函數(shù))。
    的頭像 發(fā)表于 10-23 16:25 ?347次閱讀
    RTOS中鉤子<b class='flag-5'>函數(shù)</b>的用途及用法

    什么叫系統(tǒng)的頻率響應(yīng)函數(shù)?它和傳遞函數(shù)何關(guān)系

    工具。它是一個(gè)復(fù)數(shù)函數(shù),通常用H(jω)表示,其中ω是角頻率,j是虛數(shù)單位。頻率響應(yīng)函數(shù)可以提供系統(tǒng)在頻域內(nèi)的行為特征,包括系統(tǒng)的增益、相位以及共振頻率等信息。 頻率響應(yīng)函數(shù)與傳遞
    的頭像 發(fā)表于 10-18 09:29 ?2340次閱讀

    labview常用的基本函數(shù)

    電子發(fā)燒友網(wǎng)站提供《labview常用的基本函數(shù).pdf》資料免費(fèi)下載
    發(fā)表于 10-15 17:29 ?7次下載

    labview中常用的字符串函數(shù)哪些?

    在LabVIEW中,常用的字符串函數(shù)廣泛覆蓋了對(duì)字符串的各種操作,包括但不限于格式化、搜索、替換、連接、計(jì)算長(zhǎng)度等。以下是一些常用的字符串函數(shù)及其簡(jiǎn)要說(shuō)明: 字符串長(zhǎng)度(String
    的頭像 發(fā)表于 09-04 15:43 ?946次閱讀

    簡(jiǎn)述socket編程中的常用函數(shù)

    Socket編程是一種基于TCP/IP協(xié)議的網(wǎng)絡(luò)編程技術(shù),它允許應(yīng)用程序通過(guò)網(wǎng)絡(luò)進(jìn)行通信。在Socket編程中,許多常用函數(shù),它們用于創(chuàng)建、配置、連接、發(fā)送和接收數(shù)據(jù)等操作。以下是對(duì)這些
    的頭像 發(fā)表于 08-16 10:49 ?447次閱讀

    神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)哪些

    在神經(jīng)網(wǎng)絡(luò)中,激活函數(shù)是一個(gè)至關(guān)重要的組成部分,它決定了神經(jīng)元對(duì)于輸入信號(hào)的反應(yīng)方式,為神經(jīng)網(wǎng)絡(luò)引入了非線性因素,使得網(wǎng)絡(luò)能夠?qū)W習(xí)和處理復(fù)雜的模式。本文將詳細(xì)介紹神經(jīng)網(wǎng)絡(luò)中常用的激活函數(shù),包括其定義、特點(diǎn)、數(shù)學(xué)形式以及在神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-01 11:52 ?648次閱讀

    函數(shù)信號(hào)發(fā)生器怎么調(diào)頻率

    函數(shù)信號(hào)發(fā)生器是一種常用的電子測(cè)試設(shè)備,它能夠產(chǎn)生各種波形、頻率和幅度的信號(hào),廣泛應(yīng)用于科研、教學(xué)、生產(chǎn)和維修等領(lǐng)域。在使用函數(shù)信號(hào)發(fā)生器時(shí),調(diào)整頻率是其中一個(gè)非常重要的步驟。本文將詳細(xì)介紹
    的頭像 發(fā)表于 05-20 18:23 ?1722次閱讀

    MATLAB信號(hào)處理常用函數(shù)詳解

    MATLAB是一款功能強(qiáng)大的數(shù)學(xué)軟件,尤其在信號(hào)處理領(lǐng)域,它提供了眾多的函數(shù)和工具箱,使得信號(hào)的分析、處理、仿真變得簡(jiǎn)單而高效。本文將詳細(xì)介紹MATLAB在信號(hào)處理中常用函數(shù),并通過(guò)具體示例來(lái)闡述其應(yīng)用。
    的頭像 發(fā)表于 05-17 14:31 ?2570次閱讀

    回調(diào)函數(shù)(callback)是什么?回調(diào)函數(shù)的實(shí)現(xiàn)方法

    回調(diào)函數(shù)是一種特殊的函數(shù),它作為參數(shù)傳遞給另一個(gè)函數(shù),并在被調(diào)用函數(shù)執(zhí)行完畢后被調(diào)用?;卣{(diào)函數(shù)常用
    發(fā)表于 03-12 11:46 ?3120次閱讀

    傳遞函數(shù)的定義是什么 傳遞函數(shù)的拉氏反變換是什么響應(yīng)

    傳遞函數(shù)的定義: 傳遞函數(shù)是一種數(shù)學(xué)工具,用于描述線性時(shí)不變系統(tǒng)(LTI系統(tǒng))的輸入與輸出之間的關(guān)系,通常用H(s)表示。傳遞函數(shù)是Laplace變換的
    的頭像 發(fā)表于 02-01 10:53 ?4858次閱讀

    python中open函數(shù)的用法詳解

    python中open函數(shù)的用法詳解 Python中的open()函數(shù)用于打開(kāi)文件。它接受文件名和模式作為參數(shù),并返回一個(gè)文件對(duì)象。文件對(duì)象可用于讀取、寫(xiě)入和管理文件。 open()函數(shù)
    的頭像 發(fā)表于 01-30 15:31 ?2219次閱讀