مضى على الشبكة و يوم من العطاء.

صنع debugger/disassembler

ITACHI_10HITACHI_10H is verified member.

مشرف سابق
>:: v1p ::<

السمعة:

السلام عليكم اخواني






مند مدة و أنا أفكر بصنع debugger/disassembler و جاءتني فكرة لمادا لا أجمع بعض أعضاء المنتدى و نبني debugger باسم المنتدىsh3llDebugger (اسم مستعار فقط)و يتم تطويره مع الوقت
الفكرة ليست سهلة و سيكون المشروع كبيرا حتى في بداياته .الكثير من الأكواد to maintain
المتطلبات :
1- لا يهم ادا كنت لا تفقه شيء حول الهندسة العكسية او أشياء مثل هاته المشاريع فقط الرغبة في الابتكار
2-أن تكون لديك معرفة مسبقة بأي لغة من لغات البرمجة وبناءا على دلك سيتم اعطاءك task ( فلو مثلا كنتpython developer قد يتم اعطاءك مهمة صناعة plugins لتقوم ب automation لشيء ما مثل قراءة الpatterns)
هدا كل شيء على ما أضن .

حبيت أخرج عن المألوف و بين قوسين الhype الموجودة في العالم الان الكل يريد تطوير مالوير أو طرق تخطي (ادا لم يحتوي هدا المالوير على zero-day فهو مجرد child-play لنكن واقعيين) في حين مشاريع مثل هدا المشروع هي من تستطيع وضع المنتدى و المطورين العرب عامة على الخارطة العالمية .خصوصا ادا بدأ الناس يستعملون المشروع . و الفائدة التي ستخرج بها في نهاية الأمر أكبر . ولما لا العمل على مشاريع أكبر و أكبر
هاته فقط فكرة يمكن مثلا تغييرها ليس شرط ان يتم صنع منقح يمكن operating system يمكن متصفح دون العمل ب نواة chromium وصناعةarchitecture خاصة من الصفر.

اراءكم تهمنا و السلام عليكم و رحمة الله
 
وعليكم السلام ورحمة الله وبركاته
فكرة أكثر وأكثر من رائعة اخي واسأل الله عز وجل التوفيق والسداد بها
انا أول المشاركين معك بإذن الله
وإن شاء الله نحاول نفتح Github للمشروع ونشوف الشباب ونبدأ فيه بإذن الله
انا مهتم بال C++ والبايثون
 
وعليكم السلام ورحمة الله وبركاته
فكرة أكثر وأكثر من رائعة اخي واسأل الله عز وجل التوفيق والسداد بها
انا أول المشاركين معك بإذن الله
وإن شاء الله نحاول نفتح Github للمشروع ونشوف الشباب ونبدأ فيه بإذن الله
انا مهتم بال C++ والبايثون
الله يخليك أخي ستورم
اهتمامك على عيني و على راسي و أي شخص يتشرف انه يشتغل معاك
وان شاء الله سيتم الترتيب لفتح مجموعة ديسكورد للتواصل بشكل سريع و مباشر
 
  • Love
التفاعلات: STORM
وعليكم السلام ورحمه الله ، الباين مشروع جبار وفكرة قوية جدا ،
لا اعرف اذا استطيع مساعدتكم فيها قبل اسبوع يمكن بدأت تعلم بايثون عن طريق اخر كتاب شاركه ابو البراء ، تعلمت ولله الحمد اعداد بيئة للعمل على بايثون وبعدها هلو ورد والقليل من العمليات الحسابية 😅، أسف على الأطالة وأسأل الله التوفيق لكم والسداد .
 
اذا لم تكن مبرمج محترف جدا جدا في لغة C
لن نبني هذي الامور ..

هذي الامور تحتاط سرعه وتعامل مباشر

تذكر أن تطوير أدوات التصحيح على ويندوز يتطلب فهمًا عميقًا لـ Windows API وهيكل العمليات والذاكرة في نظام ويندوز.


ساكون اول المشجعين لكم وساضع سورس كود كا البدء قي قراءة وفهم بناءه السورس واجهة مستخدم عربي ، انجليزي


debugger and disassembler in a single C file using Win32 API with bilingual support (English/Arabic):



C:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <tlhelp32.h>
#include <dbghelp.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <capstone/capstone.h>

// ========================
// Configuration Constants
// ========================
#define MAX_BREAKPOINTS 256
#define MAX_MODULES 128
#define MAX_THREADS 64
#define MEMORY_VIEW_SIZE 4096
#define DISASM_VIEW_SIZE 1024

// ========================
// Language Support
// ========================
typedef enum { LANG_EN, LANG_AR } AppLanguage;

typedef struct {
    const char* english;
    const char* arabic;
} BilingualString;

// Menu strings
static const BilingualString STR_FILE = {"File", "ملف"};
static const BilingualString STR_DEBUG = {"Debug", "تصحيح"};
static const BilingualString STR_VIEW = {"View", "عرض"};
static const BilingualString STR_LANGUAGE = {"Language", "لغة"};
static const BilingualString STR_HELP = {"Help", "مساعدة"};

// Menu items
static const BilingualString STR_OPEN_PROCESS = {"Open Process", "فتح عملية"};
static const BilingualString STR_ATTACH_PROCESS = {"Attach to Process", "الارتباط بعملية"};
static const BilingualString STR_EXIT = {"Exit", "خروج"};
static const BilingualString STR_START_DEBUG = {"Start Debugging", "بدء التصحيح"};
static const BilingualString STR_STOP_DEBUG = {"Stop Debugging", "إيقاف التصحيح"};
static const BilingualString STR_STEP_INTO = {"Step Into", "التنفيذ خطوة بخطوة"};
static const BilingualString STR_STEP_OVER = {"Step Over", "تجاوز الاستدعاء"};
static const BilingualString STR_CONTINUE = {"Continue", "متابعة التنفيذ"};

// Status messages
static const BilingualString STR_STATUS_READY = {"Ready", "جاهز"};
static const BilingualString STR_STATUS_DEBUGGING = {"Debugging", "جاري التصحيح"};
static const BilingualString STR_STATUS_BREAK = {"Break", "توقف"};

// ========================
// Core Data Structures
// ========================
typedef struct {
    DWORD address;
    BYTE original_byte;
    BOOL enabled;
} Breakpoint;

typedef struct {
    char name[MAX_PATH];
    DWORD base;
    DWORD size;
} ModuleInfo;

typedef struct {
    // Debugging state
    HANDLE hProcess;
    DWORD processId;
    BOOL isDebugging;
    BOOL isRunning;
 
    // Breakpoints
    Breakpoint breakpoints[MAX_BREAKPOINTS];
    int bpCount;
 
    // Modules
    ModuleInfo modules[MAX_MODULES];
    int moduleCount;
 
    // Threads
    DWORD threadIds[MAX_THREADS];
    int threadCount;
 
    // Current context
    CONTEXT context;
 
    // Disassembler
    csh capstoneHandle;
 
    // Memory view
    BYTE memoryView[MEMORY_VIEW_SIZE];
    DWORD memoryBase;
 
    // Disassembly view
    char disasmView[DISASM_VIEW_SIZE][128];
    DWORD disasmBase;
    int disasmCount;
} DebuggerContext;

// ========================
// UI Data Structures
// ========================
typedef struct {
    HWND hMainWnd;
    HWND hTabControl;
    HWND hDisassemblyView;
    HWND hRegisterView;
    HWND hMemoryView;
    HWND hCallStackView;
    HWND hStatusBar;
 
    HFONT hArabicFont;
    HFONT hEnglishFont;
 
    DebuggerContext* debugger;
    AppLanguage currentLang;
} UIManager;

// ========================
// Debug Engine Functions
// ========================
BOOL Debugger_Initialize(DebuggerContext* ctx) {
    memset(ctx, 0, sizeof(DebuggerContext));
 
    if (cs_open(CS_ARCH_X86, CS_MODE_32, &ctx->capstoneHandle) != CS_ERR_OK) {
        return FALSE;
    }
 
    cs_option(ctx->capstoneHandle, CS_OPT_DETAIL, CS_OPT_ON);
    return TRUE;
}

BOOL Debugger_StartProcess(DebuggerContext* ctx, const wchar_t* path) {
    STARTUPINFOW si = { sizeof(si) };
    PROCESS_INFORMATION pi;
 
    if (!CreateProcessW(path, NULL, NULL, NULL, FALSE,
                      DEBUG_ONLY_THIS_PROCESS, NULL, NULL, &si, &pi)) {
        return FALSE;
    }
 
    ctx->hProcess = pi.hProcess;
    ctx->processId = pi.dwProcessId;
    ctx->isDebugging = TRUE;
    ctx->isRunning = FALSE;
 
    CloseHandle(pi.hThread);
    return TRUE;
}

BOOL Debugger_ReadMemory(DebuggerContext* ctx, LPVOID address, LPVOID buffer, SIZE_T size) {
    SIZE_T bytesRead;
    return ReadProcessMemory(ctx->hProcess, address, buffer, size, &bytesRead);
}

BOOL Debugger_SetBreakpoint(DebuggerContext* ctx, DWORD address) {
    if (ctx->bpCount >= MAX_BREAKPOINTS) return FALSE;
 
    BYTE int3 = 0xCC;
    BYTE original;
    DWORD oldProtect;
 
    if (!Debugger_ReadMemory(ctx, (LPVOID)address, &original, 1)) {
        return FALSE;
    }
 
    if (!VirtualProtectEx(ctx->hProcess, (LPVOID)address, 1,
                         PAGE_EXECUTE_READWRITE, &oldProtect)) {
        return FALSE;
    }
 
    SIZE_T bytesWritten;
    if (!WriteProcessMemory(ctx->hProcess, (LPVOID)address, &int3, 1, &bytesWritten)) {
        VirtualProtectEx(ctx->hProcess, (LPVOID)address, 1, oldProtect, &oldProtect);
        return FALSE;
    }
 
    VirtualProtectEx(ctx->hProcess, (LPVOID)address, 1, oldProtect, &oldProtect);
    FlushInstructionCache(ctx->hProcess, (LPVOID)address, 1);
 
    ctx->breakpoints[ctx->bpCount].address = address;
    ctx->breakpoints[ctx->bpCount].original_byte = original;
    ctx->breakpoints[ctx->bpCount].enabled = TRUE;
    ctx->bpCount++;
 
    return TRUE;
}

// ========================
// UI Functions
// ========================
void UI_UpdateDisassembly(UIManager* ui) {
    DebuggerContext* ctx = ui->debugger;
 
    if (!ctx->isDebugging) return;
 
    // Read memory for disassembly
    if (!Debugger_ReadMemory(ctx, (LPVOID)ctx->disasmBase, ctx->memoryView, MEMORY_VIEW_SIZE)) {
        return;
    }
 
    // Disassemble
    cs_insn* insn;
    size_t count = cs_disasm(ctx->capstoneHandle, ctx->memoryView, MEMORY_VIEW_SIZE,
                            ctx->disasmBase, 0, &insn);
 
    ctx->disasmCount = count > DISASM_VIEW_SIZE ? DISASM_VIEW_SIZE : count;
 
    for (int i = 0; i < ctx->disasmCount; i++) {
        sprintf(ctx->disasmView[i], "0x%08x: %-8s %s",
                (DWORD)insn[i].address, insn[i].mnemonic, insn[i].op_str);
    }
 
    if (count > 0) {
        cs_free(insn, count);
    }
}

void UI_UpdateLanguage(UIManager* ui, AppLanguage lang) {
    ui->currentLang = lang;
 
    // Update menu items
    HMENU hMenu = GetMenu(ui->hMainWnd);
 
    MENUITEMINFOW mii = { sizeof(mii) };
    mii.fMask = MIIM_STRING;
 
    // File menu
    mii.dwTypeData = (LPWSTR)(lang == LANG_AR ? STR_FILE.arabic : STR_FILE.english);
    SetMenuItemInfoW(hMenu, 0, TRUE, &mii);
 
    // Update all other UI elements...
 
    // Set RTL for Arabic
    if (lang == LANG_AR) {
        SetWindowLong(ui->hMainWnd, GWL_EXSTYLE,
                     GetWindowLong(ui->hMainWnd, GWL_EXSTYLE) | WS_EX_LAYOUTRTL);
    } else {
        SetWindowLong(ui->hMainWnd, GWL_EXSTYLE,
                     GetWindowLong(ui->hMainWnd, GWL_EXSTYLE) & ~WS_EX_LAYOUTRTL);
    }
 
    // Redraw window
    InvalidateRect(ui->hMainWnd, NULL, TRUE);
}

// ========================
// Main Window Procedure
// ========================
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    static UIManager ui;
    static DebuggerContext debugger;
 
    switch (msg) {
        case WM_CREATE: {
            // Initialize debugger
            Debugger_Initialize(&debugger);
            ui.debugger = &debugger;
            ui.currentLang = LANG_EN;
        
            // Create UI elements
            ui.hStatusBar = CreateWindowEx(0, STATUSCLASSNAME, NULL,
                                         WS_CHILD | WS_VISIBLE,
                                         0, 0, 0, 0, hWnd, NULL,
                                         GetModuleHandle(NULL), NULL);
        
            // Set initial language
            UI_UpdateLanguage(&ui, LANG_EN);
            break;
        }
    
        case WM_COMMAND: {
            int wmId = LOWORD(wParam);
        
            switch (wmId) {
                case IDM_FILE_OPEN: {
                    // Open process dialog
                    break;
                }
            
                case IDM_LANG_ENGLISH:
                    UI_UpdateLanguage(&ui, LANG_EN);
                    break;
                
                case IDM_LANG_ARABIC:
                    UI_UpdateLanguage(&ui, LANG_AR);
                    break;
            }
            break;
        }
    
        case WM_SIZE: {
            // Resize UI elements
            break;
        }
    
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
    }
 
    return DefWindowProc(hWnd, msg, wParam, lParam);
}

// ========================
// Entry Point
// ========================
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                  LPSTR lpCmdLine, int nCmdShow) {
    // Register window class
    WNDCLASSEX wc = { sizeof(WNDCLASSEX) };
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszClassName = L"AdvancedDebugger";
 
    if (!RegisterClassEx(&wc)) {
        MessageBox(NULL, L"Window Registration Failed!", L"Error", MB_ICONERROR);
        return 0;
    }
 
    // Create main window
    HWND hWnd = CreateWindowEx(0, L"AdvancedDebugger", L"Advanced Debugger",
                             WS_OVERLAPPEDWINDOW,
                             CW_USEDEFAULT, CW_USEDEFAULT, 1024, 768,
                             NULL, NULL, hInstance, NULL);
 
    if (!hWnd) {
        MessageBox(NULL, L"Window Creation Failed!", L"Error", MB_ICONERROR);
        return 0;
    }
 
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
 
    // Main message loop
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return (int)msg.wParam;
}

How to Build:

1. Install requirements:
- MinGW-w64 or Visual Studio
- Capstone library

2. Compile with:
Bash:
gcc debugger.c -o debugger.exe -lcapstone -lpsapi -ldbghelp

3. Run:
Bash:
debugger.exe


 
السلام عليكم اخواني






مند مدة و أنا أفكر بصنع debugger/disassembler و جاءتني فكرة لمادا لا أجمع بعض أعضاء المنتدى و نبني debugger باسم المنتدىsh3llDebugger (اسم مستعار فقط)و يتم تطويره مع الوقت
الفكرة ليست سهلة و سيكون المشروع كبيرا حتى في بداياته .الكثير من الأكواد to maintain
المتطلبات :
1- لا يهم ادا كنت لا تفقه شيء حول الهندسة العكسية او أشياء مثل هاته المشاريع فقط الرغبة في الابتكار
2-أن تكون لديك معرفة مسبقة بأي لغة من لغات البرمجة وبناءا على دلك سيتم اعطاءك task ( فلو مثلا كنتpython developer قد يتم اعطاءك مهمة صناعة plugins لتقوم ب automation لشيء ما مثل قراءة الpatterns)
هدا كل شيء على ما أضن .

حبيت أخرج عن المألوف و بين قوسين الhype الموجودة في العالم الان الكل يريد تطوير مالوير أو طرق تخطي (ادا لم يحتوي هدا المالوير على zero-day فهو مجرد child-play لنكن واقعيين) في حين مشاريع مثل هدا المشروع هي من تستطيع وضع المنتدى و المطورين العرب عامة على الخارطة العالمية .خصوصا ادا بدأ الناس يستعملون المشروع . و الفائدة التي ستخرج بها في نهاية الأمر أكبر . ولما لا العمل على مشاريع أكبر و أكبر
هاته فقط فكرة يمكن مثلا تغييرها ليس شرط ان يتم صنع منقح يمكن operating system يمكن متصفح دون العمل ب نواة chromium وصناعةarchitecture خاصة من الصفر.

اراءكم تهمنا و السلام عليكم و رحمة الله
و عليكم السلام و رحمة الله
أنا للاسف معرفتي حاليا لا تتجاوز أساسيات python و ++C.

فإن وجودي سيضيف لهذا المشروع الفائدة فانا معكم ان شاء الله.
 
السلام عليكم اخواني






مند مدة و أنا أفكر بصنع debugger/disassembler و جاءتني فكرة لمادا لا أجمع بعض أعضاء المنتدى و نبني debugger باسم المنتدىsh3llDebugger (اسم مستعار فقط)و يتم تطويره مع الوقت
الفكرة ليست سهلة و سيكون المشروع كبيرا حتى في بداياته .الكثير من الأكواد to maintain
المتطلبات :
1- لا يهم ادا كنت لا تفقه شيء حول الهندسة العكسية او أشياء مثل هاته المشاريع فقط الرغبة في الابتكار
2-أن تكون لديك معرفة مسبقة بأي لغة من لغات البرمجة وبناءا على دلك سيتم اعطاءك task ( فلو مثلا كنتpython developer قد يتم اعطاءك مهمة صناعة plugins لتقوم ب automation لشيء ما مثل قراءة الpatterns)
هدا كل شيء على ما أضن .

حبيت أخرج عن المألوف و بين قوسين الhype الموجودة في العالم الان الكل يريد تطوير مالوير أو طرق تخطي (ادا لم يحتوي هدا المالوير على zero-day فهو مجرد child-play لنكن واقعيين) في حين مشاريع مثل هدا المشروع هي من تستطيع وضع المنتدى و المطورين العرب عامة على الخارطة العالمية .خصوصا ادا بدأ الناس يستعملون المشروع . و الفائدة التي ستخرج بها في نهاية الأمر أكبر . ولما لا العمل على مشاريع أكبر و أكبر
هاته فقط فكرة يمكن مثلا تغييرها ليس شرط ان يتم صنع منقح يمكن operating system يمكن متصفح دون العمل ب نواة chromium وصناعةarchitecture خاصة من الصفر.

اراءكم تهمنا و السلام عليكم و رحمة الله
ما شاء الله تبارك الله
الي الشرف انه اكون معكم !
 
وعليكم السلام ورحمه الله ، الباين مشروع جبار وفكرة قوية جدا ،
لا اعرف اذا استطيع مساعدتكم فيها قبل اسبوع يمكن بدأت تعلم بايثون عن طريق اخر كتاب شاركه ابو البراء ، تعلمت ولله الحمد اعداد بيئة للعمل على بايثون وبعدها هلو ورد والقليل من العمليات الحسابية 😅، أسف على الأطالة وأسأل الله التوفيق لكم والسداد .
كل زيادة فيها خير. سنحتاجك باذن الله. أي فكرة كما كانت اذا جاءت من عقل منور ستفيدنا باذن الله
اذا لم تكن مبرمج محترف جدا جدا في لغة C
لن نبني هذي الامور ..

هذي الامور تحتاط سرعه وتعامل مباشر

تذكر أن تطوير أدوات التصحيح على ويندوز يتطلب فهمًا عميقًا لـ Windows API وهيكل العمليات والذاكرة في نظام ويندوز.


ساكون اول المشجعين لكم وساضع سورس كود كا البدء قي قراءة وفهم بناءه السورس واجهة مستخدم عربي ، انجليزي


debugger and disassembler in a single C file using Win32 API with bilingual support (English/Arabic):



C:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <tlhelp32.h>
#include <dbghelp.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <capstone/capstone.h>

// ========================
// Configuration Constants
// ========================
#define MAX_BREAKPOINTS 256
#define MAX_MODULES 128
#define MAX_THREADS 64
#define MEMORY_VIEW_SIZE 4096
#define DISASM_VIEW_SIZE 1024

// ========================
// Language Support
// ========================
typedef enum { LANG_EN, LANG_AR } AppLanguage;

typedef struct {
    const char* english;
    const char* arabic;
} BilingualString;

// Menu strings
static const BilingualString STR_FILE = {"File", "ملف"};
static const BilingualString STR_DEBUG = {"Debug", "تصحيح"};
static const BilingualString STR_VIEW = {"View", "عرض"};
static const BilingualString STR_LANGUAGE = {"Language", "لغة"};
static const BilingualString STR_HELP = {"Help", "مساعدة"};

// Menu items
static const BilingualString STR_OPEN_PROCESS = {"Open Process", "فتح عملية"};
static const BilingualString STR_ATTACH_PROCESS = {"Attach to Process", "الارتباط بعملية"};
static const BilingualString STR_EXIT = {"Exit", "خروج"};
static const BilingualString STR_START_DEBUG = {"Start Debugging", "بدء التصحيح"};
static const BilingualString STR_STOP_DEBUG = {"Stop Debugging", "إيقاف التصحيح"};
static const BilingualString STR_STEP_INTO = {"Step Into", "التنفيذ خطوة بخطوة"};
static const BilingualString STR_STEP_OVER = {"Step Over", "تجاوز الاستدعاء"};
static const BilingualString STR_CONTINUE = {"Continue", "متابعة التنفيذ"};

// Status messages
static const BilingualString STR_STATUS_READY = {"Ready", "جاهز"};
static const BilingualString STR_STATUS_DEBUGGING = {"Debugging", "جاري التصحيح"};
static const BilingualString STR_STATUS_BREAK = {"Break", "توقف"};

// ========================
// Core Data Structures
// ========================
typedef struct {
    DWORD address;
    BYTE original_byte;
    BOOL enabled;
} Breakpoint;

typedef struct {
    char name[MAX_PATH];
    DWORD base;
    DWORD size;
} ModuleInfo;

typedef struct {
    // Debugging state
    HANDLE hProcess;
    DWORD processId;
    BOOL isDebugging;
    BOOL isRunning;
 
    // Breakpoints
    Breakpoint breakpoints[MAX_BREAKPOINTS];
    int bpCount;
 
    // Modules
    ModuleInfo modules[MAX_MODULES];
    int moduleCount;
 
    // Threads
    DWORD threadIds[MAX_THREADS];
    int threadCount;
 
    // Current context
    CONTEXT context;
 
    // Disassembler
    csh capstoneHandle;
 
    // Memory view
    BYTE memoryView[MEMORY_VIEW_SIZE];
    DWORD memoryBase;
 
    // Disassembly view
    char disasmView[DISASM_VIEW_SIZE][128];
    DWORD disasmBase;
    int disasmCount;
} DebuggerContext;

// ========================
// UI Data Structures
// ========================
typedef struct {
    HWND hMainWnd;
    HWND hTabControl;
    HWND hDisassemblyView;
    HWND hRegisterView;
    HWND hMemoryView;
    HWND hCallStackView;
    HWND hStatusBar;
 
    HFONT hArabicFont;
    HFONT hEnglishFont;
 
    DebuggerContext* debugger;
    AppLanguage currentLang;
} UIManager;

// ========================
// Debug Engine Functions
// ========================
BOOL Debugger_Initialize(DebuggerContext* ctx) {
    memset(ctx, 0, sizeof(DebuggerContext));
 
    if (cs_open(CS_ARCH_X86, CS_MODE_32, &ctx->capstoneHandle) != CS_ERR_OK) {
        return FALSE;
    }
 
    cs_option(ctx->capstoneHandle, CS_OPT_DETAIL, CS_OPT_ON);
    return TRUE;
}

BOOL Debugger_StartProcess(DebuggerContext* ctx, const wchar_t* path) {
    STARTUPINFOW si = { sizeof(si) };
    PROCESS_INFORMATION pi;
 
    if (!CreateProcessW(path, NULL, NULL, NULL, FALSE,
                      DEBUG_ONLY_THIS_PROCESS, NULL, NULL, &si, &pi)) {
        return FALSE;
    }
 
    ctx->hProcess = pi.hProcess;
    ctx->processId = pi.dwProcessId;
    ctx->isDebugging = TRUE;
    ctx->isRunning = FALSE;
 
    CloseHandle(pi.hThread);
    return TRUE;
}

BOOL Debugger_ReadMemory(DebuggerContext* ctx, LPVOID address, LPVOID buffer, SIZE_T size) {
    SIZE_T bytesRead;
    return ReadProcessMemory(ctx->hProcess, address, buffer, size, &bytesRead);
}

BOOL Debugger_SetBreakpoint(DebuggerContext* ctx, DWORD address) {
    if (ctx->bpCount >= MAX_BREAKPOINTS) return FALSE;
 
    BYTE int3 = 0xCC;
    BYTE original;
    DWORD oldProtect;
 
    if (!Debugger_ReadMemory(ctx, (LPVOID)address, &original, 1)) {
        return FALSE;
    }
 
    if (!VirtualProtectEx(ctx->hProcess, (LPVOID)address, 1,
                         PAGE_EXECUTE_READWRITE, &oldProtect)) {
        return FALSE;
    }
 
    SIZE_T bytesWritten;
    if (!WriteProcessMemory(ctx->hProcess, (LPVOID)address, &int3, 1, &bytesWritten)) {
        VirtualProtectEx(ctx->hProcess, (LPVOID)address, 1, oldProtect, &oldProtect);
        return FALSE;
    }
 
    VirtualProtectEx(ctx->hProcess, (LPVOID)address, 1, oldProtect, &oldProtect);
    FlushInstructionCache(ctx->hProcess, (LPVOID)address, 1);
 
    ctx->breakpoints[ctx->bpCount].address = address;
    ctx->breakpoints[ctx->bpCount].original_byte = original;
    ctx->breakpoints[ctx->bpCount].enabled = TRUE;
    ctx->bpCount++;
 
    return TRUE;
}

// ========================
// UI Functions
// ========================
void UI_UpdateDisassembly(UIManager* ui) {
    DebuggerContext* ctx = ui->debugger;
 
    if (!ctx->isDebugging) return;
 
    // Read memory for disassembly
    if (!Debugger_ReadMemory(ctx, (LPVOID)ctx->disasmBase, ctx->memoryView, MEMORY_VIEW_SIZE)) {
        return;
    }
 
    // Disassemble
    cs_insn* insn;
    size_t count = cs_disasm(ctx->capstoneHandle, ctx->memoryView, MEMORY_VIEW_SIZE,
                            ctx->disasmBase, 0, &insn);
 
    ctx->disasmCount = count > DISASM_VIEW_SIZE ? DISASM_VIEW_SIZE : count;
 
    for (int i = 0; i < ctx->disasmCount; i++) {
        sprintf(ctx->disasmView[i], "0x%08x: %-8s %s",
                (DWORD)insn[i].address, insn[i].mnemonic, insn[i].op_str);
    }
 
    if (count > 0) {
        cs_free(insn, count);
    }
}

void UI_UpdateLanguage(UIManager* ui, AppLanguage lang) {
    ui->currentLang = lang;
 
    // Update menu items
    HMENU hMenu = GetMenu(ui->hMainWnd);
 
    MENUITEMINFOW mii = { sizeof(mii) };
    mii.fMask = MIIM_STRING;
 
    // File menu
    mii.dwTypeData = (LPWSTR)(lang == LANG_AR ? STR_FILE.arabic : STR_FILE.english);
    SetMenuItemInfoW(hMenu, 0, TRUE, &mii);
 
    // Update all other UI elements...
 
    // Set RTL for Arabic
    if (lang == LANG_AR) {
        SetWindowLong(ui->hMainWnd, GWL_EXSTYLE,
                     GetWindowLong(ui->hMainWnd, GWL_EXSTYLE) | WS_EX_LAYOUTRTL);
    } else {
        SetWindowLong(ui->hMainWnd, GWL_EXSTYLE,
                     GetWindowLong(ui->hMainWnd, GWL_EXSTYLE) & ~WS_EX_LAYOUTRTL);
    }
 
    // Redraw window
    InvalidateRect(ui->hMainWnd, NULL, TRUE);
}

// ========================
// Main Window Procedure
// ========================
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    static UIManager ui;
    static DebuggerContext debugger;
 
    switch (msg) {
        case WM_CREATE: {
            // Initialize debugger
            Debugger_Initialize(&debugger);
            ui.debugger = &debugger;
            ui.currentLang = LANG_EN;
       
            // Create UI elements
            ui.hStatusBar = CreateWindowEx(0, STATUSCLASSNAME, NULL,
                                         WS_CHILD | WS_VISIBLE,
                                         0, 0, 0, 0, hWnd, NULL,
                                         GetModuleHandle(NULL), NULL);
       
            // Set initial language
            UI_UpdateLanguage(&ui, LANG_EN);
            break;
        }
   
        case WM_COMMAND: {
            int wmId = LOWORD(wParam);
       
            switch (wmId) {
                case IDM_FILE_OPEN: {
                    // Open process dialog
                    break;
                }
           
                case IDM_LANG_ENGLISH:
                    UI_UpdateLanguage(&ui, LANG_EN);
                    break;
               
                case IDM_LANG_ARABIC:
                    UI_UpdateLanguage(&ui, LANG_AR);
                    break;
            }
            break;
        }
   
        case WM_SIZE: {
            // Resize UI elements
            break;
        }
   
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
    }
 
    return DefWindowProc(hWnd, msg, wParam, lParam);
}

// ========================
// Entry Point
// ========================
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                  LPSTR lpCmdLine, int nCmdShow) {
    // Register window class
    WNDCLASSEX wc = { sizeof(WNDCLASSEX) };
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszClassName = L"AdvancedDebugger";
 
    if (!RegisterClassEx(&wc)) {
        MessageBox(NULL, L"Window Registration Failed!", L"Error", MB_ICONERROR);
        return 0;
    }
 
    // Create main window
    HWND hWnd = CreateWindowEx(0, L"AdvancedDebugger", L"Advanced Debugger",
                             WS_OVERLAPPEDWINDOW,
                             CW_USEDEFAULT, CW_USEDEFAULT, 1024, 768,
                             NULL, NULL, hInstance, NULL);
 
    if (!hWnd) {
        MessageBox(NULL, L"Window Creation Failed!", L"Error", MB_ICONERROR);
        return 0;
    }
 
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
 
    // Main message loop
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return (int)msg.wParam;
}

How to Build:

1. Install requirements:
- MinGW-w64 or Visual Studio
- Capstone library

2. Compile with:
Bash:
gcc debugger.c -o debugger.exe -lcapstone -lpsapi -ldbghelp

3. Run:
Bash:
debugger.exe


تسلملي اهي هلى البادرة الطيبة. أي مساعدة بأي شكل من الأشكال ستكون دفعة جيدة للفكرة
و عليكم السلام و رحمة الله
أنا للاسف معرفتي حاليا لا تتجاوز أساسيات python و ++C.

فإن وجودي سيضيف لهذا المشروع الفائدة فانا معكم ان شاء الله.
بالطبع أخي و نحن نتشرف بوجودك معنا كما أن الاساسيات هي أهم شيء
ما شاء الله تبارك الله
الي الشرف انه اكون معكم !
كل الشرف لينا انك تساعدينا بخبرتك وجودك في اي مشروع يعد فوز عظيم
 
لن أتردد في المساعدة المادية او الدعم النفسي 🥲
خبرتي في مجال البرمجة محدودة جدا
 

آخر المشاركات

عودة
أعلى