از 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., 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:
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.
@Engineer_Computer
مثال : سوال
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.
@Engineer_Computer
🔥1
جلوگیری از شناسایی 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 تشخیص میدهد یا نه.
🔹 Share & Support Us 🔹
📱 Channel : @Engineer_Computer
بدافزار ها را معمولا در یک 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 تشخیص میدهد یا نه.
Please open Telegram to view this post
VIEW IN TELEGRAM
تکنیک 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 مقدار دلخواه شما را برمیگرداند.
🔹 Share & Support Us 🔹
📱 Channel : @Engineer_Computer
تکنیک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 مقدار دلخواه شما را برمیگرداند.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔴پاک کردن رد پا +🟢 راهکار
هکر به روشهای مختلفی اقدام به پاک کردن ردپا میکند. اما هکرهای خلاق مواظب ردپای خود در حافظه هم هستند پس میروند دنبال اینکه اونو پاک کنند .
تابع 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 برای بررسی تغییرات مشکوک در حافظه استفاده کرد.
🔹 راهکار: مانیتورینگ تغییرات رجیستری و حافظه برای شناسایی پاک شدن دادهها.
🔹 Share & Support Us 🔹
📱 Channel : @Engineer_Computer
هکر به روشهای مختلفی اقدام به پاک کردن ردپا میکند. اما هکرهای خلاق مواظب ردپای خود در حافظه هم هستند پس میروند دنبال اینکه اونو پاک کنند .
تابع 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 برای بررسی تغییرات مشکوک در حافظه استفاده کرد.
🔹 راهکار: مانیتورینگ تغییرات رجیستری و حافظه برای شناسایی پاک شدن دادهها.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1🔥1🤩1