------------転載を終え、共通のWinAPIの機能

仕上げ共通WinAPIの機能
あなたが2019年9月4日午後八時06分55秒読取回数101コレクションに掲載され、元のプレイ涙
立ち上げた

ブログは、Windowsプログラミングについて多くのことを書いたの前には、Windows環境でのハッカーは、基礎となるAPIのプログラミングに精通している必要があります。次の7つの大分類に従って整理するために、WindowsのAPIのためにハッカーによって使用される将来の使用のAPIのクエリ方法、特に一般的に使用されるAPIを読者により包括的な理解を与えると容易にするために、我々は助け学習したいです。

まず、プロセス

のプロセスを作成するには:

のCreateProcess( "C:\\ Windowsの\\ notepad.exeを"、0,0,0,0,0,0,0、およびSiの、&​​PI);

WINEXEC( "メモ帳"、SW_SHOW);

のShellExecute (0、 "開く"、 "メモ帳"、 "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)。



GetCurrentProcesssId();

処理実行パスを取得:

GetModuleFileNameは(NULL、BUF、LEN);

GetProcessImageFileName(hproc、BUF、LEN);

トラバーサルプロセスモジュール情報:

CreateToolhelp32Snapshot(TH32CS_SNAPMODILE、PID);

Module32First(hSnap、&mdl32);

Module32Next( )hsnap、&MDL2、

ハンドルモジュールを取得:

のGetModuleHandle( "Kernel32.dllの");

取得モジュール機能アドレス:

GetProcessAddr(hmdl、 "メッセージボックス");

動的にDLLをロード:

のLoadLibrary( "User32.dllの");

アンロードDLL:

FreeLibraryを(hDll);

プロセスコマンドラインパラメータを取得する:

GetCommandLine();

任意のコマンドラインプロセスGetCommandLine関数アドレスのアドレスのバイトアドレスのオフセット4バイト。

リモートデータの読み書きプロセス:

ReadProcessMemory(hproc、BASEADDR、BUF、lenの、&サイズ);

WriteProcessMemory(hproc、BASEADDR、BUF、lenの、およびサイズ)、

アプリケーションメモリ:

VirtualAllocの(0、サイズ、MEM_COMMIT、PAGE_EXECUTE_READWRITE);

VirtualAllocEx(hproc、0、サイズ、MEM_COMMIT、PAGE_EXECUTE_READWRITE)、

変更メモリ属性:

VirtualProtect(ADDR、サイズ、PAGE_EXECUTE_READWRITE ,,&oldAddr);

VirtualProtectEx(hproc、ADDR、サイズ、PAGE_EXECUTE_READWRITE ,,&oldAddr );

メモリの解放:

VirtualFree(ADDR、サイズ、MEM_RELEASE);

VirtualFreeEx(hproc、ADDR、サイズ、MEM_RELEASE);

取得システムのバージョン(勝利NT / 2000 / XP <は0x80000000):

GETVERSION();

読み取りと書き込みプロセスの優先度:

SetPriorityClass (hproc、ノーマル);

getPriority(hproc);

SetProcessPriorityBoost(trueにhproc、);

GetProcessPriorityBoost(hproc、pBool);

第二に、スレッドが

(のCreateThreadスレッド機能がメモリを解放する)(使用_endthreadする必要があるなど、ランド、はstrtokを呼び出して)スレッドを作成します:

の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、&コード);

待機しているスレッドが終了(スレッドが状態またはタイムアウトを信頼できる):

WaitForSignleObject(htread、1000);

たWaitForMultipleObjects(NUM、trueに、INFINITEのハンドル);

横断スレッド:

CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD、0);

Thread32First(hSnap、&mdl32);

Thread32Next( hsnap、&MDL2);

取得スレッドエントリ関数:

ZwQueryInfomationThread(hThread、ThreadQuerySetWin32StartAddress、&BUF ,. 4、NULL);

オープンスレッド:

OpenThread(falseにTHREAD_ALL_ACCESS、&TID)に、

取得スレッド関数のアドレスはモジュールに属します:

GetMappedFileName(hproc、ADDR、BUF、256);

読み取りスレッドの優先度:

SetThreadPriority(hThread、ノーマル);

GetThreadPriority(hThread);

SetThreadPriorityBoost(真のhproc);

GetThreadPriorityBoost(hproc、pBool)、

スレッドを終了:

ExitThread(5);

のTerminateThread(hThread ,. 5);

スレッド同期クリティカルセクションオブジェクト:

InitializeCriticalSection(&CS);

EnterCriticalSection(&CS);

LeaveCriticalSection(&CS);

DeleteCriticalSection( &CS);

スレッド同期イベントのカーネルオブジェクト:

OpenEvent(EVENT_ALL_ACCESS、偽、名);

のCreateEvent(NULL、FALSE、TRUEに、NULL);

のWaitForSingleObject(hevnt、INFINITE);

SetEvent(hevnt);

ResetEvent(hevnt)。

スレッド同期ミューテックスカーネルオブジェクト:

CreateMutex(NULL、偽、NULL);

のWaitForSingleObject(hMutex、INFINITE);

ReleaseMutex(hMutex);

OpenMutex(MUTEX_ALL_ACCESS、偽、名);

第三に、レジストリは、

キーを作成します。

RegCreateKeyEx(HKEY_CURRENT_USER、「TestNewKey "0,0、REG_OPTION_VOLATILE、KEY_ALL_ACCESS、 0、&サブキー、&状態);

オープンキー:

RegCreateKeyEx(HKEY_CURRENT_USER、"コントロールパネル」、0、KEY_ALL_ACCESS、&サブキー);

閉じるキー:

RegCloseKey(HKEY);

トラバーサルキー:

RegEnumKeyEx(hsubkey 、インデックス、キー名、&​​nameSize、0,0,0、および時間);

FileTimeToSystemTime(&時刻、&​​SYSTIME);

RegQueryInfo(hsubkey、0,0,0、&COUNT、0,0,0,0,0,0,0)。

削除キー:

RegDeleteKeyEx(hmainkey、subkeyName);

値を作成します。

RegSetValueEx(hsubkey、 "テスト"、0、REG_WORD、(BYTE *)&値、4)。

トラバーサル値:

RegEnumValue(hsubkey、インデックス、名前、&​​nameSize、0、&タイプの、valuebuf、valueLen);

RegQueryValueExの(タイプのhsubkey、名前、0、bufが、&サイズ);

の値を削除します。

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の、&サイズ、0);

のWriteFile(のhFile、BUF、lenの、&サイズ、0);

ディスクに書き込まれた力のファイル、ファイルを消去するバッファ・キャッシュ:

FlushFileuffers(のhFile);

[溶液]ロックファイル領域:

ロックファイル(のhFile 、0,0,100,0);

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

ファイルをコピー:

;)trueに、CopyFileメソッド(SRC、DESを

デCopyFileEx(SRC、FUNC、&パラ、偽、COPY_FILE_FAIL_IF_EXISTS)。

移動ファイル:

のMoveFile(SRC、DES);

MoveFileEx(SRC、DES、偽);

MoveFileWithProgress(SRC、DES、楽しみ、&パラ、MOVEFILE_COPY_ALLOWED);

ファイル削除:

DeleteFileを(ファイル名);

取得ファイルの種類(FILE_TYPE_PIPE):

GetFileType(のhFile ;)

ファイルのサイズを取得:

GetFileSize(のhFile、&ハイを);

ため&計算例えば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);

メモリマップドファイルを開きます。

(FILE_AMP_ALL_ACCESS、偽、 "MYMAP OpenFileMapping ");

アンロードメモリマップファイルは:

UnmapViewOfFile(BASEADDR);

必須書き込みメモリマップファイルをディスクに:

FlushViewOfFile(BASEADDR、LEN);

フォルダを作成します(あなたは一つだけを作成することができます):

CreateDirectory( "D:\\ A"、NULL);

CreateDirectory( "C:\\ A"、 "D:\\ B"、NULL);

削除フォルダ(削除することができる唯一の空のフォルダ):

RemoveDirectory(「C:\ \ ");

検出器論理ドライブ:

GetLogicalDrives();

GetLogicalDriveStrings(LEN、BUF);

駆動タイプ(DRIVE_CDROM)用:

GetDriveType(" D:\\「);

5、ネットワーク

オープンネットワーク資源列挙過程(winnetwk.h 、Mpr.lib):

WNetOpenEnum(RESOURCE_GLOBAL、RESOURCETYPE_ANY、0、NULL、hNETを);

列挙ネットワークリソース:

WNetEnumResourceポーター(hNET、およびCOUNT、pNetRsc、&サイズ)、

閉じたネットワーク資源の列挙プロセス:

WNetCloseEnumポーター(hNET);

オープンクローズWinSocketライブラリー:

WSAStartupの(バージョン、およびWSA);

WSACleanup();

ソケットを作成:

ソケット(AF_INET、SOCK_STREAM、IPPROTO_TCP);

バインドIPソケットとポート:

バインド(私たちの靴下、&​​addrは、LEN);

TCP接続をリスニング:

聞く(私たちの靴下、10);

TCP接続要求を受信することは:

)(私たちの靴下、&​​ADDRを受け入れ、&​​lenは、

クライアント接続:

接続(私たちの靴下、&​​addrは、LEN);

TCPを送信します。

送信(私たちの靴下、bufが、lenは、0);

受信したTCPデータ:

RECV(靴下、bufが、lenは、 0);

UDPデータを送信する:

のsendto(私たちの靴下、bufが、lenは、0、&addrは、LEN);

UDPを受け取る:

のrecvfrom(私たちの靴下、bufが、lenは、0、&addrは、&​​LEN);

6サービス

オープンサービス制御マネージャ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、パス、NULL、NULL、NULL、NULL、NULL);

オープンサービス対象:

のOpenService(MGR、 "MYSERVICE"、SERVICE_START);

サービスを開始:

をStartService(Servの、0、NULL);

クエリサービスの状態:

QueryServiceStatus(Servの、&状態);

閉じるサービス・ハンドル:

CloseServiceHandle(HDL);

SCMに接続されている:

StartServiceCtrlDispatcher(DispatchTable);

登録サービス制御機能:

RegisterServiceCtrlHandler( "MyServicer"、 ServiceCtrl)、

設定されたサービスのステータス:

SetServiceStatus(HSS、&ServiceStatus);

コントロールサービス:

のControlService(Servの、SERVICE_CONTROL_STOP、&状態)、

サービス削除する:

DeleteService(Servの)

トラバーサルサービス:

EnumServicesStatus(hscm、SERVICE_WIN32 | SERVICE_DRIVER、 SERVICE_STATE_ALL、&srvSts、lenを、&サイズ&カウント、NULL);

クエリサービスの設定:

QueryServiceConfig(hserv、&srvcfg、サイズ、およびサイズ);

VIIメッセージ

メッセージを送信するために:

の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関数で、これは確かに最も完全ではありませんが、ブロガーは、情報のコピーから発掘されている、だけでなく、相互の進歩の多くを追加することを読者に願っています!
----------------
免責事項:この記事はCSDNブロガー「涙であなたは「元の記事を果たし、CC 4.0 BY-SAの著作権契約書に従って、再現し、元のソースとのリンクを添付してくださいこの文。
オリジナルリンクします。https://blog.csdn.net/H888001/article/details/100546290

おすすめ

転載: www.cnblogs.com/bedfly/p/12154064.html