# Malware में उपयोग किए जाने वाले सामान्य API {{#include ../banners/hacktricks-training.md}} ## सामान्य ### नेटवर्किंग | कच्चे सॉकेट | WinAPI सॉकेट | | ------------- | -------------- | | socket() | WSAStratup() | | bind() | bind() | | listen() | listen() | | accept() | accept() | | connect() | connect() | | read()/recv() | recv() | | write() | send() | | shutdown() | WSACleanup() | ### स्थिरता | रजिस्ट्री | फ़ाइल | सेवा | | ---------------- | ------------- | ---------------------------- | | RegCreateKeyEx() | GetTempPath() | OpenSCManager | | RegOpenKeyEx() | CopyFile() | CreateService() | | RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() | | RegDeleteKeyEx() | WriteFile() | | | RegGetValue() | ReadFile() | | ### एन्क्रिप्शन | नाम | | --------------------- | | WinCrypt | | CryptAcquireContext() | | CryptGenKey() | | CryptDeriveKey() | | CryptDecrypt() | | CryptReleaseContext() | ### एंटी-विश्लेषण/वीएम | फ़ंक्शन नाम | असेंबली निर्देश | | --------------------------------------------------------- | --------------------- | | IsDebuggerPresent() | CPUID() | | GetSystemInfo() | IN() | | GlobalMemoryStatusEx() | | | GetVersion() | | | CreateToolhelp32Snapshot \[जांचें कि कोई प्रक्रिया चल रही है] | | | CreateFileW/A \[जांचें कि कोई फ़ाइल मौजूद है] | | ### छिपाव | नाम | | | ------------------------ | -------------------------------------------------------------------------- | | VirtualAlloc | मेमोरी आवंटित करें (पैकर) | | VirtualProtect | मेमोरी अनुमति बदलें (पैकर एक अनुभाग को निष्पादन अनुमति दे रहा है) | | ReadProcessMemory | बाहरी प्रक्रियाओं में इंजेक्शन | | WriteProcessMemoryA/W | बाहरी प्रक्रियाओं में इंजेक्शन | | NtWriteVirtualMemory | | | CreateRemoteThread | DLL/प्रक्रिया इंजेक्शन... | | NtUnmapViewOfSection | | | QueueUserAPC | | | CreateProcessInternalA/W | | ### निष्पादन | फ़ंक्शन नाम | | ---------------- | | CreateProcessA/W | | ShellExecute | | WinExec | | ResumeThread | | NtResumeThread | ### विविध - GetAsyncKeyState() -- की लॉगिंग - SetWindowsHookEx -- की लॉगिंग - GetForeGroundWindow -- चल रहे विंडो का नाम प्राप्त करें (या ब्राउज़र से वेबसाइट) - LoadLibrary() -- पुस्तकालय आयात करें - GetProcAddress() -- पुस्तकालय आयात करें - CreateToolhelp32Snapshot() -- चल रही प्रक्रियाओं की सूची - GetDC() -- स्क्रीनशॉट - BitBlt() -- स्क्रीनशॉट - InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- इंटरनेट तक पहुँचें - FindResource(), LoadResource(), LockResource() -- निष्पादन योग्य के संसाधनों तक पहुँचें ## मैलवेयर तकनीकें ### DLL इंजेक्शन एक मनमाना DLL को दूसरे प्रक्रिया के अंदर निष्पादित करें 1. दुर्भावनापूर्ण DLL इंजेक्ट करने के लिए प्रक्रिया का पता लगाएं: CreateToolhelp32Snapshot, Process32First, Process32Next 2. प्रक्रिया खोलें: GetModuleHandle, GetProcAddress, OpenProcess 3. प्रक्रिया के अंदर DLL का पथ लिखें: VirtualAllocEx, WriteProcessMemory 4. प्रक्रिया में एक थ्रेड बनाएं जो दुर्भावनापूर्ण DLL लोड करेगा: CreateRemoteThread, LoadLibrary उपयोग करने के लिए अन्य फ़ंक्शन: NTCreateThreadEx, RtlCreateUserThread ### रिफ्लेक्टिव DLL इंजेक्शन सामान्य Windows API कॉल किए बिना एक दुर्भावनापूर्ण DLL लोड करें।\ DLL एक प्रक्रिया के अंदर मैप किया गया है, यह आयात पते को हल करेगा, पुनर्स्थापनाओं को ठीक करेगा और DllMain फ़ंक्शन को कॉल करेगा। ### थ्रेड हाईजैकिंग एक प्रक्रिया से एक थ्रेड खोजें और इसे एक दुर्भावनापूर्ण DLL लोड करने के लिए बनाएं 1. एक लक्षित थ्रेड खोजें: CreateToolhelp32Snapshot, Thread32First, Thread32Next 2. थ्रेड खोलें: OpenThread 3. थ्रेड को निलंबित करें: SuspendThread 4. पीड़ित प्रक्रिया के अंदर दुर्भावनापूर्ण DLL का पथ लिखें: VirtualAllocEx, WriteProcessMemory 5. पुस्तकालय लोड करते समय थ्रेड को फिर से शुरू करें: ResumeThread ### PE इंजेक्शन पोर्टेबल निष्पादन इंजेक्शन: निष्पादन योग्य को पीड़ित प्रक्रिया की मेमोरी में लिखा जाएगा और वहीं से निष्पादित किया जाएगा। ### प्रक्रिया खोखलीकरण मैलवेयर प्रक्रिया की मेमोरी से वैध कोड को अनमैप करेगा और एक दुर्भावनापूर्ण बाइनरी लोड करेगा 1. एक नई प्रक्रिया बनाएं: CreateProcess 2. मेमोरी को अनमैप करें: ZwUnmapViewOfSection, NtUnmapViewOfSection 3. प्रक्रिया की मेमोरी में दुर्भावनापूर्ण बाइनरी लिखें: VirtualAllocEc, WriteProcessMemory 4. एंट्रीपॉइंट सेट करें और निष्पादित करें: SetThreadContext, ResumeThread ## हुकिंग - **SSDT** (**सिस्टम सेवा वर्णन तालिका**) कर्नेल फ़ंक्शंस (ntoskrnl.exe) या GUI ड्राइवर (win32k.sys) की ओर इशारा करता है ताकि उपयोगकर्ता प्रक्रियाएँ इन फ़ंक्शंस को कॉल कर सकें। - एक रूटकिट इन प्वाइंटर्स को उन पते पर संशोधित कर सकता है जिन्हें वह नियंत्रित करता है। - **IRP** (**I/O अनुरोध पैकेट**) एक घटक से दूसरे घटक में डेटा के टुकड़े भेजते हैं। कर्नेल में लगभग सब कुछ IRPs का उपयोग करता है और प्रत्येक डिवाइस ऑब्जेक्ट की अपनी फ़ंक्शन तालिका होती है जिसे हुक किया जा सकता है: DKOM (डायरेक्ट कर्नेल ऑब्जेक्ट मैनिपुलेशन) - **IAT** (**आयात पता तालिका**) निर्भरताओं को हल करने के लिए उपयोगी है। इस तालिका को हुक करना संभव है ताकि उस कोड को हाईजैक किया जा सके जिसे कॉल किया जाएगा। - **EAT** (**निर्यात पता तालिका**) हुक। ये हुक **यूजरलैंड** से किए जा सकते हैं। लक्ष्य DLLs द्वारा निर्यातित फ़ंक्शंस को हुक करना है। - **इनलाइन हुक**: इस प्रकार को प्राप्त करना कठिन है। इसमें फ़ंक्शंस के कोड को संशोधित करना शामिल है। शायद इसके शुरुआत में एक जंप डालकर। {{#include ../banners/hacktricks-training.md}}