hacktricks/reversing/common-api-used-in-malware.md

10 KiB

मैलवेयर में उपयोग किए जाने वाले सामान्य API

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

सामान्य

नेटवर्किंग

रॉ सॉकेट्स 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

पीई इंजेक्शन

पोर्टेबल निष्पादन इंजेक्शन: एक्जीक्यूटेबल को पीड़ित प्रक्रिया की मेमोरी में लिखा जाएगा और वहां से निष्पादित किया जाएगा।

प्रक्रिया होलोइंग

मैलवेयर वास्तविक कोड को प्रक्रिया की मेमोरी से अनमैप करेगा और एक दुरुपयोगी बाइनरी लोड करेगा

  1. एक नई प्रक्रिया बनाएं: CreateProcess
  2. मेमोरी को अनमैप करें: ZwUnmapViewOfSection, NtUnmapViewOfSection
  3. प्रक्रिया मेमोरी में दुरुपयोगी बाइनरी लिखें: VirtualAllocEc, WriteProcessMemory
  4. प्रवेश बिंदु सेट करें और निष्पादित करें: SetThreadContext, ResumeThread

हुकिंग

  • SSDT (System Service Descriptor Table) कर्नेल फ़ंक्शनों (ntoskrnl.exe) या GUI ड्राइवर (win32k.sys) को इंगित करता है ताकि उपयोगकर्ता प्रक्रियाएँ इन फ़ंक्शनों को कॉल कर सकें।
  • एक रूटकिट इन पॉइंटर को उसके नियंत्रण में अद्यतन कर सकता है
  • IRP (I/O Request Packets) एक घटक से दूसरे घटक तक डेटा टुकड़े भेजते हैं। कर्नेल में लगभग सभी चीजें IRPs का उपयोग करती हैं और प्रत्येक डिवाइस ऑब्ज