الفريق العربي للهندسة العكسية

نسخة كاملة : anti-debug using job objects
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
طريقة جميلة كمحاولة منع التنقيح عن طريق خيار Attach.
الطريقة المعتمدة هي انشاء job object للعملية الحالية و اعطائها ذاكرة محدودة...

رابط المقالة:
https://secret.club/2021/01/20/diet-process.html

اوامر المثال كاملة:
#include <ntdll.h>
#include <stdio.h>

int main() {
    HANDLE job = nullptr;
    NtCreateJobObject(&job,
                      MAXIMUM_ALLOWED,
                      nullptr);

    NtAssignProcessToJobObject(job,
                               NtCurrentProcess());

    JOBOBJECT_EXTENDED_LIMIT_INFORMATION limits;
    limits.ProcessMemoryLimit  = 0x1000;
    limits.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_PROCESS_MEMORY;

    NtSetInformationJobObject(job,
                              JobObjectExtendedLimitInformation,
                              &limits,
                              sizeof(limits));
    printf("Try to Attach me !\n");
    getchar();
    return 0;
}

المرفقات تحتوي على الملفات التنفيذية للنواتين 32 بت و 64 بت للتجربة...
حقا طريقة جميلة.
وبالطبع يمكننا تفاديها بالوقوف عند دالة NtSetInformationJobObject والتعديل على المدخل أو بالأحرى ما يؤشر إليه المؤشر (pointer).
في المثال المرفق (32 بت) بتعديل البايت رقم 0x26A من 01 إلى 00 (وهي جزء من قيمة limits.BasicLimitInformation.LimitFlags) يمكننا تفادي هذه الطريقة.