仕上げ共通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
------------転載を終え、共通のWinAPIの機能
おすすめ
転載: www.cnblogs.com/bedfly/p/12154064.html
おすすめ
ランキング