X64dbg

**x64dbg** یک نرم افزار دیباگر منبع باز مبتنی بر ویندوز که برای تحلیل و تجزیه فایل های اجرایی exe و dll است. دو برنامه دیباگر x32 و x64 دارد.این نرم افزار یک اسمبلر داخلی هم دارد که می توان کد های اسمبلی را به اجرایی تبدیل کرد.رابط کاربری این برنامه گرافیکی است.این برنامه از رابط کاربری qt استفاده می کند.

لایسنس این نرم افزار :‌ GPL(GNU GENERAL PUBLIC LICENSE)

## ویژگی ها
منبع باز،
رابط کاربری بصری و آشنا و در عین حال جدید،
تجزیه کننده عبارت C مانند،
اشکال زدایی کامل فایل های DLL و EXE (TitanEngine)،
نوار کناری IDA مانند با فلش های پرش،
برجسته‌کننده نشانه دستورالعمل مشابه IDA (ثبت‌های برجسته و غیره)،
نقشه حافظه،
نمای نماد،
نمای نخ،
نمای کد منبع،
نمای نمودار،
نمای ثبت حساس به محتوا،
طرح رنگ کاملا قابل تنظیم،
تشخیص پویا ماژول ها و رشته ها،
بازساز واردات یکپارچه (Scylla)،
جداساز سریع (Zydis)،
پایگاه داده کاربر (JSON) برای نظرات، برچسب ها، نشانک ها و غیرهپ،
پشتیبانی از افزونه با API در حال رشد،
زبان برنامه‌نویسی قابل توسعه و دیباگ‌شدنی برای خودکارسازی،
تخلیه حافظه چند نوع داده،
پشتیبانی از نماد اصلی اشکال زدایی (PDB)،
نمای پشته پویا،
اسمبلر داخلی (XEDParse/asmjit)،
پچ قابل اجرا،
تجزیه و تحلیل.

رابط کاربری این نرم افزار دو بخش اصلی دارد:
۱-رابط گرافیکی ۲-رابط دستوری

## بخش رابط گرافیکی

### منوها (Menus)
این قسمت مجموعه ای از ابزار ها و دستورات در اختیار کاربر قرار می دهد که با آن می توان فرآیند اشکال زدایی را مدیریت کرد.

### نماها (Views)
این قسمت پنجره‌های گرافیکی مختلفی هستند که اطلاعات خاصی از اجرای برنامه را نمایش می‌دهند. این نماها به کاربر کمک می‌کنند تا از زوایای مختلف، رفتار و ساختار فایل اجرایی را بررسی کند.

### تنظیمات (Settings)
این قسمت شامل پنجره‌ای چندزبانه برای شخصی‌سازی رفتار نرم‌افزار است. تنظیمات در زبانه‌های مختلف دسته‌بندی شده‌اند و هر زبانه مربوط به بخشی خاص از دیباگر است.

### پنجره‌ها (Dialogs)
این قسمت شامل ابزارهای تحلیلی خاص است که به‌صورت پنجره‌های جداگانه اجرا می‌شوند.

## بخش رابط دستوری

### اهداف عمومی (General Purpose)
این دسته شامل مجموعه‌ای از دستورات پایه‌ای و عمومی است که در فرآیند اسکریپت‌نویسی و کنترل دیباگ کاربرد دارند. از جمله وظایف این گروه می‌توان به چاپ پیام‌های سفارشی در خروجی، کنترل جریان اجرای اسکریپت از طریق شرط‌ها و حلقه‌ها، مدیریت متغیرها، و تعامل با کاربر از طریق ورودی و خروجی اشاره کرد. این دستورات معمولاً در ابتدای اسکریپت‌ها برای تنظیم محیط، تعریف مقادیر اولیه، و ایجاد ساختار منطقی برنامه مورد استفاده قرار می‌گیرند و نقش زیربنایی در خودکارسازی عملیات دیباگ دارند.

---

### کنترل اشکال‌زدایی (Debug Control)
دستورات این بخش به‌طور خاص برای کنترل اجرای برنامه تحت دیباگ طراحی شده‌اند. این کنترل شامل شروع اجرای برنامه، توقف در نقاط خاص، اجرای مرحله‌به‌مرحله (Step Into / Step Over)، ادامه اجرای برنامه پس از توقف، و بازنشانی وضعیت دیباگ است. این گروه از دستورات به کاربر اجازه می‌دهد تا رفتار برنامه را در زمان اجرا به‌صورت دقیق و قابل‌کنترل بررسی کرده و نقاط بحرانی یا مشکوک را شناسایی نماید. همچنین امکان تعامل با موتور دیباگ و مدیریت وضعیت فعلی پردازش از طریق این دستورات فراهم می‌شود.

---

### کنترل نقاط توقف (Breakpoint Control)
این دسته شامل دستورات مربوط به تعریف، حذف، فعال‌سازی، غیرفعال‌سازی، و مدیریت نقاط توقف در آدرس‌های خاص از حافظه یا توابع مشخص است. نقاط توقف ابزاری کلیدی در اشکال‌زدایی هستند که به کاربر اجازه می‌دهند اجرای برنامه را در لحظه‌ای خاص متوقف کرده و وضعیت حافظه، ثبات‌ها، و جریان کنترل را بررسی نمایند. این دستورات همچنین امکان تعیین نوع نقطه توقف (ساده، سخت‌افزاری، حافظه‌ای) و اعمال تنظیمات خاص برای هر نقطه را فراهم می‌کنند.

---

### کنترل نقاط توقف شرطی (Conditional Breakpoint Control)
در این بخش، دستورات مربوط به تعریف نقاط توقف با شرط‌های منطقی یا مقایسه‌ای ارائه می‌شوند. این نوع نقاط توقف تنها زمانی فعال می‌شوند که شرط تعریف‌شده توسط کاربر برقرار باشد، مانند مقدار خاصی در یک ثبات یا حافظه. این قابلیت به‌ویژه در تحلیل رفتارهای پیچیده یا یافتن شرایط خاص در اجرای برنامه کاربرد دارد و موجب افزایش دقت و کارایی فرآیند دیباگ می‌شود. همچنین امکان استفاده از عبارات منطقی، مقایسه‌ای و ریاضی در تعریف این شرط‌ها وجود دارد.

---

### ردیابی اجرا (Tracing)
دستورات این گروه برای ثبت و بررسی مسیر اجرای برنامه به‌کار می‌روند. با استفاده از این دستورات، کاربر می‌تواند اجرای برنامه را به‌صورت مرحله‌به‌مرحله دنبال کرده و دستورالعمل‌هایی که اجرا شده‌اند را ثبت نماید. این فرآیند به‌ویژه در تحلیل رفتارهای مشکوک، بررسی حلقه‌های بی‌نهایت، و شناسایی توابع پنهان یا رمزنگاری‌شده مؤثر است. همچنین امکان ذخیره‌سازی مسیر اجرا برای تحلیل‌های بعدی و مقایسه با اجرای‌های دیگر فراهم می‌باشد.

---

### کنترل نخ‌ها (Thread Control)
این دسته شامل دستورات مربوط به مدیریت نخ‌های فعال در برنامه تحت دیباگ است. کاربر می‌تواند نخ خاصی را انتخاب کرده، اجرای آن را متوقف یا ادامه دهد، و اطلاعات مربوط به وضعیت فعلی نخ را مشاهده نماید. این قابلیت در برنامه‌های چندنخی (Multithreaded) اهمیت ویژه‌ای دارد، زیرا رفتار هر نخ ممکن است مستقل از نخ‌های دیگر باشد و خطاهای پیچیده‌ای را ایجاد کند. همچنین امکان بررسی پشته فراخوانی، رجیسترها، و حافظه مربوط به هر نخ به‌صورت جداگانه وجود دارد.

---

### عملیات حافظه (Memory Operations)
در این بخش، دستورات مربوط به خواندن، نوشتن، مقایسه، جستجو، و ویرایش حافظه برنامه ارائه می‌شوند. کاربر می‌تواند مقادیر خاصی را در آدرس‌های مشخص بررسی کرده، داده‌هایی را تغییر دهد، یا الگوهایی را در حافظه جستجو نماید. این دستورات برای تحلیل داده‌های ذخیره‌شده، شناسایی رشته‌های متنی، بررسی ساختارهای داده‌ای، و حتی تزریق کد در حافظه کاربرد دارند. همچنین امکان استفاده از انواع داده و قالب‌های نمایش مختلف برای بررسی دقیق‌تر فراهم است.

---

### کنترل سیستم‌عامل (Operating System Control)
این گروه شامل دستورات مرتبط با تعامل با سیستم‌عامل میزبان است. از جمله وظایف این دستورات می‌توان به دریافت اطلاعات پردازش‌ها، ماژول‌های بارگذاری‌شده، رشته‌های فعال، و منابع سیستمی اشاره کرد. این قابلیت‌ها به کاربر اجازه می‌دهند تا وضعیت کلی سیستم را در زمان اجرای برنامه بررسی کرده و وابستگی‌های خارجی یا رفتارهای مشکوک را شناسایی نمایند. همچنین امکان بررسی ساختارهای داخلی سیستم‌عامل مانند TEB، PEB، و لیست ماژول‌ها وجود دارد.

---

### کنترل دیده‌بانی (Watch Control)
دستورات این بخش برای ایجاد و مدیریت دیده‌بانی (Watchpoints) طراحی شده‌اند. دیده‌بانی‌ها ابزارهایی هستند که تغییرات در مقادیر حافظه یا ثبات‌ها را به‌صورت خودکار ثبت می‌کنند. این قابلیت به‌ویژه در بررسی رفتار متغیرهای حساس، شناسایی تغییرات ناخواسته، و تحلیل اثرات اجرای کد کاربرد دارد. کاربر می‌تواند دیده‌بانی‌هایی با شرایط خاص تعریف کرده و در صورت وقوع تغییر، اجرای برنامه را متوقف یا پیام خاصی نمایش دهد.

---

### متغیرها (Variables)
در این دسته، دستورات مربوط به تعریف، مقداردهی، و استفاده از متغیرهای محلی یا سراسری در اسکریپت‌ها ارائه می‌شوند. متغیرها ابزارهایی برای ذخیره‌سازی داده‌های موقت، نتایج محاسبات، یا مقادیر خوانده‌شده از حافظه هستند. کاربر می‌تواند متغیرهایی با انواع مختلف تعریف کرده و در طول اجرای اسکریپت از آن‌ها استفاده نماید. همچنین امکان انجام عملیات ریاضی، منطقی، و مقایسه‌ای بر روی متغیرها وجود دارد.

---

### جستجو (Searching)
این گروه شامل دستورات مربوط به جستجوی داده‌ها در حافظه، فایل اجرایی، یا ساختارهای داخلی برنامه است. کاربر می‌تواند رشته‌های متنی، مقادیر عددی، الگوهای باینری، یا ساختارهای خاص را جستجو کرده و موقعیت آن‌ها را شناسایی نماید. این قابلیت برای یافتن کلیدهای رمزنگاری، پیام‌های مخفی، یا داده‌های حساس بسیار کاربردی است. همچنین امکان استفاده از فیلترها و تنظیمات پیشرفته برای محدودسازی دامنه جستجو فراهم می‌باشد.

---

### پایگاه داده کاربر (User Database)
دستورات این بخش برای مدیریت داده‌های ذخیره‌شده توسط کاربر در پایگاه داده داخلی نرم‌افزار طراحی شده‌اند. این داده‌ها شامل یادداشت‌ها، برچسب‌ها، نشانک‌ها، و اطلاعات مرتبط با آدرس‌ها یا توابع خاص هستند. کاربر می‌تواند اطلاعات تحلیلی خود را در این پایگاه داده ذخیره کرده و در مراجعات بعدی از آن‌ها استفاده نماید. این قابلیت موجب افزایش بهره‌وری در پروژه‌های طولانی‌مدت و مستندسازی دقیق فرآیند دیباگ می‌شود.

---

### تحلیل (Analysis)
در این دسته، دستورات مربوط به تحلیل خودکار کد اجرایی، شناسایی توابع، بازسازی ساختار برنامه، و تشخیص مسیرهای منطقی ارائه می‌شوند. این تحلیل‌ها به‌صورت پویا یا ایستا انجام می‌شوند و به کاربر کمک می‌کنند تا ساختار کلی برنامه را بدون نیاز به بررسی دستی شناسایی نماید. همچنین امکان استفاده از الگوریتم‌های پیشرفته برای تشخیص توابع پنهان، ساختارهای رمزنگاری‌شده، و رفتارهای ضد دیباگ وجود دارد.

---

### انواع داده (Types)
این گروه شامل دستورات مربوط به تعریف و استفاده از انواع داده در اسکریپت‌ها و عملیات حافظه است. کاربر می‌تواند داده‌هایی با نوع DWORD، QWORD، BYTE، رشته‌های ANSI یا Unicode، و ساختارهای پیچیده تعریف کرده و در تحلیل حافظه یا مقایسه مقادیر از آن‌ها استفاده نماید. این قابلیت موجب افزایش دقت در بررسی داده‌ها و تطبیق بهتر با ساختارهای واقعی برنامه می‌شود.

---

### افزونه‌ها (Plugins)
دستورات این بخش برای تعامل با افزونه‌های نصب‌شده در نرم‌افزار طراحی شده‌اند. کاربر می‌تواند افزونه‌ای را بارگذاری کرده، دستورات خاص آن را اجرا نماید، یا اطلاعات خروجی آن را دریافت کند. افزونه‌ها ابزارهایی هستند که قابلیت‌های نرم‌افزار را گسترش داده و امکانات تخصصی مانند تحلیل بدافزار، رمزگشایی، یا بررسی شبکه را فراهم می‌کنند. همچنین امکان توسعه افزونه‌های سفارشی توسط کاربر وجود دارد.

---

### دستورات اسکریپت (Script Commands)
در این دسته، مجموعه‌ای از دستورات سطح بالا برای نوشتن اسکریپت‌های خودکارسازی ارائه می‌شود. این دستورات به کاربر اجازه می‌دهند تا منطق پیچیده‌ای را در قالب اسکریپت پیاده‌سازی کند، از جمله تعریف حلقه‌ها (مانند `for` و `while`)، شرط‌های منطقی (`if`, `else`)، توابع سفارشی، و ساختارهای کنترلی. این قابلیت‌ها برای ساخت ابزارهای تحلیلی، اجرای خودکار مراحل دیباگ، و ایجاد رفتارهای هوشمند در تعامل با برنامه تحت بررسی بسیار کاربردی هستند. همچنین امکان استفاده از متغیرها، آرایه‌ها، و توابع داخلی برای پردازش داده‌ها و کنترل جریان اجرای اسکریپت فراهم است. این دسته از دستورات، پایه‌گذار قدرت واقعی زبان اسکریپت‌نویسی x64dbg در پروژه‌های مهندسی معکوس و تحلیل امنیتی محسوب می‌شود.

---

### رابط گرافیکی (GUI)
دستورات این بخش برای کنترل و تعامل با رابط گرافیکی نرم‌افزار طراحی شده‌اند. کاربر می‌تواند با استفاده از این دستورات، پیام‌های سفارشی در پنجره‌های خاص نمایش دهد، رنگ‌ها و فونت‌ها را تغییر دهد، پنجره‌های مختلف را باز یا بسته کند، و حتی رفتار بصری نرم‌افزار را در پاسخ به رویدادهای خاص تنظیم نماید. این قابلیت‌ها به‌ویژه در ساخت اسکریپت‌های آموزشی، ابزارهای تعاملی، یا افزونه‌های سفارشی که نیاز به ارتباط مستقیم با کاربر دارند، بسیار مؤثر هستند. همچنین امکان کنترل موقعیت، اندازه، و محتوای پنجره‌ها برای ایجاد تجربه کاربری بهینه فراهم است.

---

### متفرقه (Miscellaneous)
این دسته شامل مجموعه‌ای از دستورات متفرقه است که در هیچ‌یک از گروه‌های قبلی جای نمی‌گیرند، اما نقش مهمی در تکمیل قابلیت‌های اسکریپت‌نویسی ایفا می‌کنند. از جمله این دستورات می‌توان به ابزارهای خاص برای مدیریت فایل‌ها، تعامل با محیط سیستم‌عامل، بررسی وضعیت دیباگر، و اجرای عملیات خاص اشاره کرد. این دستورات معمولاً در شرایط خاص یا برای اهداف پیشرفته مورد استفاده قرار می‌گیرند و انعطاف‌پذیری بیشتری را در طراحی اسکریپت‌ها فراهم می‌سازند. همچنین برخی از این دستورات برای توسعه‌دهندگان افزونه‌ها و ابزارهای جانبی کاربرد دارند و امکان ارتباط با اجزای داخلی نرم‌افزار را فراهم می‌کنند.

## منابع
https://x64dbg.com/

رده:نرم‌افزارهای ۲۰۱۴ (میلادی)
رده:اشکال‌یاب (برنامه‌نویسی)
رده:نرم‌افزارهای آزاد نوشته‌شده با سی++
رده:نرم‌افزارهای ویندوز
رده:نرم‌افزارهایی که از پروانه جی‌پی‌ال استفاده می‌کنند
رده:نرم‌افزارهای آزاد منحصر به ویندوز