PYTHONWITHMEDEV Telegram 433
تکنیک‌های ضد دیباگ و ضد مهندسی معکوس در نرم‌افزارها


حالا که ساختار فایل‌های اجرایی (PE, ELF, Mach-O) رو شناختید باید بدونید که چطور توسعه‌دهنده‌ها از مهندسی معکوس جلوگیری می‌کنن توی این بخش میریم سراغ مکانیزم‌های ضد دیباگ و ضد مهندسی معکوس که توی نرم‌افزارهای مختلف استفاده میشن



1 چرا نرم‌افزارها از ضد دیباگ استفاده می‌کنن؟

تکنیک‌های ضد دیباگ (Anti-Debugging) و ضد مهندسی معکوس (Anti-Reversing)

معمولا برای این کارها استفاده میشن:

جلوگیری از کرک شدن نرم‌افزار
سخت‌تر کردن تحلیل بدافزارها
محافظت از الگوریتم‌های حساس و لایسنس نرم‌افزار
جلوگیری از دستکاری و مهندسی معکوس

برنامه‌هایی مثل بازی‌ها نرم‌افزارهای امنیتی DRM و بدافزارها از این تکنیک‌ها زیاد استفاده می‌کنن


2 روش‌های تشخیص دیباگر در ویندوز (Anti-Debugging در PE)

ویندوز یه سری API داره که برنامه‌ها با استفاده از اون‌ها می‌تونن بفهمن که آیا تحت دیباگ هستن یا نه

📌 مهم‌ترین روش‌ها :

IsDebuggerPresent()

این تابع از kernel32.dll چک می‌کنه که برنامه داره تحت دیباگ اجرا میشه یا نه


#include <windows.h>
#include <iostream>

int main() {
if (IsDebuggerPresent()) {
std::cout << "Debugger detected!" << std::endl;
return 1;
}
std::cout << "No debugger detected." << std::endl;
return 0;
}

🔹 چطور بایپسش کنیم؟
🔹 مقدار PEB->BeingDebugged رو توی دیباگر تغییر بدیم.




CheckRemoteDebuggerPresent()

این API چک می‌کنه که یه دیباگر خارجی مثل x64dbg به پروسه وصل شده یا نه

BOOL IsDebuggerAttached() {
BOOL isDebugger = FALSE;
CheckRemoteDebuggerPresent(GetCurrentProcess(), &isDebugger);
return isDebugger;
}

برای بایپس کردن این تابع می‌تونیم مقدار برگشتی رو تغییر بدیم



NtQueryInformationProcess()

این تابع از ntdll.dll اطلاعاتی در مورد پروسه می‌گیره، از جمله اینکه آیا دیباگ میشه یا نه

#include <windows.h>
#include <winternl.h>
#include <iostream>

typedef NTSTATUS(WINAPI* pNtQueryInformationProcess)(HANDLE, ULONG, PVOID, ULONG, PULONG);

int main() {
pNtQueryInformationProcess NtQIP = (pNtQueryInformationProcess)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtQueryInformationProcess");

DWORD isDebuggerPresent = 0;
NtQIP(GetCurrentProcess(), 0x07, &isDebuggerPresent, sizeof(DWORD), NULL);

if (isDebuggerPresent) {
std::cout << "Debugger detected!" << std::endl;
return 1;
}

std::cout << "No debugger detected." << std::endl;
return 0;


این روش رو می‌تونیم با تغییر مقدار ProcessDebugPort در رجیسترها دور بزنیم.



3 روش‌های ضد دیباگ در لینوکس (ELF Anti-Debugging)

توی لینوکس، برنامه‌ها می‌تونن با استفاده از ptrace() تشخیص بدن که تحت دیباگ هستن

استفاده از ptrace() برای جلوگیری از دیباگ


#include <sys/ptrace.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void anti_debug() {
if (ptrace(PTRACE_TRACEME, 0, 0, 0) == -1) {
printf("Debugger detected!\n");
exit(1);
}
}

int main() {
anti_debug();
printf("Program is running normally.\n");
return 0;
}

برای بایپس این روش، می‌تونیم با gdb مقدار برگشتی ptrace() رو تغییر بدیم


4 روش‌های ضد دیباگ در macOS (Mach-O Anti-Debugging)

توی macOS، روش‌های مشابه لینوکس استفاده میشه ولی از sysctl() هم میشه برای تشخیص دیباگر استفاده کرد:

#include <sys/types.h>
#include <sys/sysctl.h>
#include <stdio.h>

int is_debugger_attached() {
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()};
struct kinfo_proc info;
size_t size = sizeof(info);

sysctl(mib, 4, &info, &size, NULL, 0);

return (info.kp_proc.p_flag & P_TRACED) != 0;
}

int main() {
if (is_debugger_attached()) {
printf("Debugger detected!\n");
return 1;
}

printf("No debugger detected.\n");
return 0;
}

برای بایپس، می‌تونیم مقدار p_flag رو تغییر بدیم



5 تکنیک‌های پیشرفته ضد مهندسی معکوس

بعضی برنامه‌ها از روش‌های پیچیده‌تری برای جلوگیری از تحلیل شدن استفاده می‌کنن

مهم‌ترین تکنیک‌ها:

بدافزارهای حرفه‌ای مثل Zeus و TrickBot از این تکنیک‌ها استفاده می‌کنن



6 ابزارهای دور زدن ضد دیباگ

🔹 Windows: ScyllaHide, x64dbg, Cheat Engine

🔹 Linux: GDB, ptrace hooks, Frida

🔹 macOS: LLDB, Hopper, Frida



tgoop.com/pythonwithmedev/433
Create:
Last Update:

تکنیک‌های ضد دیباگ و ضد مهندسی معکوس در نرم‌افزارها


حالا که ساختار فایل‌های اجرایی (PE, ELF, Mach-O) رو شناختید باید بدونید که چطور توسعه‌دهنده‌ها از مهندسی معکوس جلوگیری می‌کنن توی این بخش میریم سراغ مکانیزم‌های ضد دیباگ و ضد مهندسی معکوس که توی نرم‌افزارهای مختلف استفاده میشن



1 چرا نرم‌افزارها از ضد دیباگ استفاده می‌کنن؟

تکنیک‌های ضد دیباگ (Anti-Debugging) و ضد مهندسی معکوس (Anti-Reversing)

معمولا برای این کارها استفاده میشن:

جلوگیری از کرک شدن نرم‌افزار
سخت‌تر کردن تحلیل بدافزارها
محافظت از الگوریتم‌های حساس و لایسنس نرم‌افزار
جلوگیری از دستکاری و مهندسی معکوس

برنامه‌هایی مثل بازی‌ها نرم‌افزارهای امنیتی DRM و بدافزارها از این تکنیک‌ها زیاد استفاده می‌کنن


2 روش‌های تشخیص دیباگر در ویندوز (Anti-Debugging در PE)

ویندوز یه سری API داره که برنامه‌ها با استفاده از اون‌ها می‌تونن بفهمن که آیا تحت دیباگ هستن یا نه

📌 مهم‌ترین روش‌ها :

IsDebuggerPresent()

این تابع از kernel32.dll چک می‌کنه که برنامه داره تحت دیباگ اجرا میشه یا نه


#include <windows.h>
#include <iostream>

int main() {
if (IsDebuggerPresent()) {
std::cout << "Debugger detected!" << std::endl;
return 1;
}
std::cout << "No debugger detected." << std::endl;
return 0;
}

🔹 چطور بایپسش کنیم؟
🔹 مقدار PEB->BeingDebugged رو توی دیباگر تغییر بدیم.




CheckRemoteDebuggerPresent()

این API چک می‌کنه که یه دیباگر خارجی مثل x64dbg به پروسه وصل شده یا نه

BOOL IsDebuggerAttached() {
BOOL isDebugger = FALSE;
CheckRemoteDebuggerPresent(GetCurrentProcess(), &isDebugger);
return isDebugger;
}

برای بایپس کردن این تابع می‌تونیم مقدار برگشتی رو تغییر بدیم



NtQueryInformationProcess()

این تابع از ntdll.dll اطلاعاتی در مورد پروسه می‌گیره، از جمله اینکه آیا دیباگ میشه یا نه

#include <windows.h>
#include <winternl.h>
#include <iostream>

typedef NTSTATUS(WINAPI* pNtQueryInformationProcess)(HANDLE, ULONG, PVOID, ULONG, PULONG);

int main() {
pNtQueryInformationProcess NtQIP = (pNtQueryInformationProcess)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtQueryInformationProcess");

DWORD isDebuggerPresent = 0;
NtQIP(GetCurrentProcess(), 0x07, &isDebuggerPresent, sizeof(DWORD), NULL);

if (isDebuggerPresent) {
std::cout << "Debugger detected!" << std::endl;
return 1;
}

std::cout << "No debugger detected." << std::endl;
return 0;


این روش رو می‌تونیم با تغییر مقدار ProcessDebugPort در رجیسترها دور بزنیم.



3 روش‌های ضد دیباگ در لینوکس (ELF Anti-Debugging)

توی لینوکس، برنامه‌ها می‌تونن با استفاده از ptrace() تشخیص بدن که تحت دیباگ هستن

استفاده از ptrace() برای جلوگیری از دیباگ


#include <sys/ptrace.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void anti_debug() {
if (ptrace(PTRACE_TRACEME, 0, 0, 0) == -1) {
printf("Debugger detected!\n");
exit(1);
}
}

int main() {
anti_debug();
printf("Program is running normally.\n");
return 0;
}

برای بایپس این روش، می‌تونیم با gdb مقدار برگشتی ptrace() رو تغییر بدیم


4 روش‌های ضد دیباگ در macOS (Mach-O Anti-Debugging)

توی macOS، روش‌های مشابه لینوکس استفاده میشه ولی از sysctl() هم میشه برای تشخیص دیباگر استفاده کرد:

#include <sys/types.h>
#include <sys/sysctl.h>
#include <stdio.h>

int is_debugger_attached() {
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()};
struct kinfo_proc info;
size_t size = sizeof(info);

sysctl(mib, 4, &info, &size, NULL, 0);

return (info.kp_proc.p_flag & P_TRACED) != 0;
}

int main() {
if (is_debugger_attached()) {
printf("Debugger detected!\n");
return 1;
}

printf("No debugger detected.\n");
return 0;
}

برای بایپس، می‌تونیم مقدار p_flag رو تغییر بدیم



5 تکنیک‌های پیشرفته ضد مهندسی معکوس

بعضی برنامه‌ها از روش‌های پیچیده‌تری برای جلوگیری از تحلیل شدن استفاده می‌کنن

مهم‌ترین تکنیک‌ها:

بدافزارهای حرفه‌ای مثل Zeus و TrickBot از این تکنیک‌ها استفاده می‌کنن



6 ابزارهای دور زدن ضد دیباگ

🔹 Windows: ScyllaHide, x64dbg, Cheat Engine

🔹 Linux: GDB, ptrace hooks, Frida

🔹 macOS: LLDB, Hopper, Frida

BY 🧑‍💻Cyber.vision🧑‍💻


Share with your friend now:
tgoop.com/pythonwithmedev/433

View MORE
Open in Telegram


Telegram News

Date: |

During the meeting with TSE Minister Edson Fachin, Perekopsky also mentioned the TSE channel on the platform as one of the firm's key success stories. Launched as part of the company's commitments to tackle the spread of fake news in Brazil, the verified channel has attracted more than 184,000 members in less than a month. Ng was convicted in April for conspiracy to incite a riot, public nuisance, arson, criminal damage, manufacturing of explosives, administering poison and wounding with intent to do grievous bodily harm between October 2019 and June 2020. Hui said the messages, which included urging the disruption of airport operations, were attempts to incite followers to make use of poisonous, corrosive or flammable substances to vandalize police vehicles, and also called on others to make weapons to harm police. Read now As five out of seven counts were serious, Hui sentenced Ng to six years and six months in jail.
from us


Telegram 🧑‍💻Cyber.vision🧑‍💻
FROM American