Bypassing Anti Viruses by C# Programming v2.0
by Damon Mohammadbagher  
© 2023 , Language: Persian Edition

as Pentester in this book i want to share some of codes for bypassing AVs which

originally made by myself or made by others.

 
 

Table of Contents

 
 
  Chapter 1 -

Encryption & Decryption for Payloads

  • 1.1 Simple Method for Execute Native Code in Memory via API Programming
    • در این بخش اول از فصل 1 شما با روش استفاده از توابع API در ویندوز بصورت مقدماتی آشنا می شوید که چگونه می توانید در سی شارپ توابع API را Call کنید و روش معرفی توابع در Csharp و همچنین موارد Cast کردن Argument های توابع ویندوز از محیط Unmanaged به محیط Managed در سی شارپ.
  • 1.2 Encryption and Decryption for payloads via RC4
    • در بخش 2 از فصل 1 ما بر روی روش Encryption برای Payload های Meterpreter , CobaltStrike صحبت می کنیم و روش RC4 را بررسی می کنیم
  • 1.3 Encryption and Decryption for Payload of Suspended Thread via XOR
    • در این بخش 3 از فصل 1 ما بر روی روش Xor کار می کنیم برای Encryption و این روش XOR در بیشتر فصل های کتاب از آن استفاده می شود و همچنین با توابع VirtualAllocExNuma , VirtualAlloc2 آشنا می شویم که می توان بجای VirtualAlloc استفاده کرد در این بخش یک نمونه مثال زده می شود که چگونه می توان یک Thread را در حالت Suspend ایجاد  کرد سپس موارد داخل آن را Encrypt/Decrypt کرد بخش بخش سپس دوباره آن Thread را Resume کرد .در این بخش همچنین با تابع VirtualProtectEx آشنا می شویم.
Chapter 2 -

Executing Native Codes in Local Process

  • 2.1 Local Thread Injection Classic Method and Indirect/Direct Technique D
    • در این بخش 1 از فصل 2 ما تکنیکی جدید را در سی شارپ بررسی می کنیم بنام Technique D و در این روش شما به عنوان Pentester, RedTeamer با موردی جدید آشنا می شوید برای Bypass کردن آنتی ویروسهایی مانند Kaspersky , Defender . این روش را می توان بصورت Direct اجرا کرد In-memory اما تکنیک جدید دیگری را با آن آشنا خواهید شد که بصورت غیره مستقیم کد In-memory اجرا می شود و Indirect Technique D نام گذاری شده توسط من . در ایجا شما با هر دو نوع Direct/Indirect Technique D آشنا می شوید. در این فصل شما با روشهای جدید آشنا می شوید که بدون استفاده از توابع ویندوز می توان کدی در Csharp نوشت که نتیجه یکسان داشته باشد.
  • 2.2 QueueUserAPC API Methods and Indirect/Direct Technique D
    • در این بخش 2 از فصل 2 روش اجرای کد توسط تابع QueueUserAPC را بررسی می کنیم و نتیجه استفاده از آن را بر روی Technique D مرور می کنیم که چگونه آنتی ویروس هایی مانند Kaspersky , Defender توسط این روش Bypass می شوند
  • 2.3 QueueUserAPC Classic Method
    • در این بخش 3 از فصل 2 روش استفاده از API Monitor را برای کار در زمان Research کردن را بررسی می کنیم همچنین از این ابزار برای بررسی تکنیک Classic مربوط به QueueUserAPC استفاده می کنیم و با تابع جدید NtQueueApcThread آشنا می شویم.
Chapter 3 -

Executing Native Codes in Local Process (Part2)

  • 3.1 Simple Method for Execute Native Code in Memory + JMP Method1
    • در این بخش اول فصل 3 یک Trick خیلی ساده را با هم کار می کنیم که به Jump معروف می باشد و یا همان پرش
      از بخشی از کد در Memory به بخشی دیگر
      در Memory این کار می تواند موجب گیج شدن برخی آنتی ویروس ها شود و برای دور زدن
      آنها می تواند مفید باشد
      مانند Defender.
  • 3.2 Simple Method for Execute Native Code in Memory + Delegate Method + JMP Method1
    • در این بخش 2 از فصل 3  ما همان روش بخش قبلی را استفاده می کنیم اما با تکنیکی دیگر برای اجرا Jump کد خود و بجای CreateThread از روش Technique D کمک می گیریم برای اجرای غیره مستقیم کدهای Jump خود.
  • 3.3 Simple Method for Execute Native Code in Memory + Delegate Method + JMP Method1-Part2
    • در این بخش 3 از فصل 3 که در ادامه بخش قبلی می باشد روشی جدید را برای Write کردن در Memory را بررسی می کنیم و استفاده از Marshal.writebyte را بجای Marshal.copy بررسی می کنیم.
  • 3.4 Indirect Call C# Methods in Memory via Reflection.Emit Jump Method
    • در این بخش چهارم از فصل سوم ما روش جدیدی را کار خواهیم کرد برای Jump کردن به آدرس شروع یک C# Method بدون استفاده
      کردن از کدهای Asm بر روی Source Code در نتیجه بصورت غیره مستقیم یک C# Method بر روی حافظه اجرا می شود یا In-memory اجرا
      می شود بدون آنکه ما در کد آن C# Method را Call کنیم. در نتیجه این روش جدید Indirect Call C# Methods in-memory نام دارد .
      در این روش جدید ما از بایتهای اسمبلی برای
      Jumpاستفاده نمی کنیم بلکه بجای آن ازامکان Reflection.Emit که یک Class در csharp می باشد استفاده می کنیم و در آخر Bypass کردن آنتی ویروس Defender را خواهیم داشت.
  • 3.5 Running C# Managed Codes in Memory via CreateThread API
    • در این بخش پنجم از فصل سوم یک تکنیک برای اجرای کد Managed توسط CreateThread API را بررسی می کنیم .
      تا اینجا همانطور که در فصلهای قبلی مشاهده کردید ما از تابع CreateThread استفاده می کردیم برای اجرای کدهای Native یا Unmanaged Code که همان  کدهای Shell ما بیشتر می بود یا برای اجرای یک Jump Method اما شما می توانید از CreateThread برای اجرای کدهای Managed نیز استفاده کنید. این Managed Code شما می تواند یک FunctionPointer باشد که اشاره می کند به یک C# Delegate و
    •  یا یک C# Method .
Chapter 4 -

Executing Native Codes in Local Process (Part3)

  • 4.1 New Approach with New APIs to Execute Payloads in Memory + Async Method and Bypassing Kaspersky
    • در این فصل 4 که ادامه فصل 2 و 3 می باشد ما مواردی دیگر را برای اجرای کد Native بر روی Local Process را بررسی می کنیم
      اما در فصل 4 رویکرد ما در کد برای اجرا با کدهای فصلهای 2 و 3 متفاوت می باشد به همین دلیل مطالب این فصل از فصلهای 2 و 3 جدا شده منظور از رویکرد متفاوت در اینجا استفاده از روش های جدید برای اجرای کد می باشد و سعی بر اینکه کد ها جدید تر باشد
      برای مثال وقتی شما می خواهید مقداری همانند یک Byte Array را در حافظه قرار دهید در کدها ما از VirtualAlloc استفاده می کردیم
      این رویکردی می باشد که در همه کدها تقریبا وجود داشت و شما آن را نیز در کد های Public هم مشاهده می کردید که
      معمولا تمامی Red Teamer ها و Pentester ها از توابعی همانند آن استفاده می کردند و این موجب شده بود تا تمامی آنتی ویروس ها
      بر روی این توابع حساس شوند توابعی همانند VirtualAlloc یا WriteProcessMemory و یا CreateThread و ...
      رویکرد جدید در اینجا یعنی انجام دادن همان کارهایی که این کد ها و توابع برای ما انجام می دادند بدون استفاده از آنها
      و استفاده کردن از توابع جدید که کاری مشابه آنها را انجام می دهند و یا استفاده از تکنیک هایی که موجب می شود
      شما نتیجه مشابه بگیرید اما کد شما متفاوت باشد در نتیجه رفتار کد متفاوت می شود و Signature کد همینطور و شما
      با این رویکرد جدید می توانید آنتی ویروس ها را Bypass کنید
  • 4.2 Indirect Invoke C# Delegate + JMP Method2
    • در این فصل 4 که بخش 2 روشی جدید را برای Jump کردن را با کمک روش Technique D اجرا می کنیم و شما مشاهده
      خواهید کرد که چگونه Kaspersky v21 و Windows Defender با این روش Bypass می شوند .
      در این تکنیک جدید من از VirtualAlloc استفاده کرده ام اما بعد تست کد با آن این تابع را به Marshal.AllocHGlobal تغییر می دهیم
      در نتیجه ما 2 ورژن از این کد خواهیم داشت یکی با VirtualAlloc و دیگری با رویکرد جدید ما با توابعی جدید که کار یکسان را انجام
      می دهند.
  • 4.3 Chunking CobaltStrike Payloads + Jump Method and Bypassing Kaspersky
    • در این بخش 3 از فصل چهارم تکنیکی را بررسی می کنیم برای Chunk کردن Payload ها یا جدا کردن Payload ها را بررسی می کنیم.
      با کمک این روش جداکردن Payload در Memory شما مشاهده خواهید کرد که چگونه Kaspersky دورزده می شود .
Chapter 5 - Executing Native Code in Remote Process
  • 5.1 Remote Thread Injection Classic
    • در این فصل 5 ما بر روی Remote Thread Injection کار خواهیم کرد در این بخش 1 ما اول باید
      روش Classic این تکنیک را یاد بگیریم که بسیار مهم می باشد حتی اگر کد قدیمی باشد و الان دیگر ممکن می باشد
      بر روی برخی آنتی ویروس ها کارایی نداشته باشد اما به عنوان Pentester /Red-Blue Teamer شما باید این روش
      را یاد بگیربد بدلیل اینکه کاربردی می باشد با اینکه ممکن می باشد کد قدیمی باشد و بیشتر AV ها آن را شناسایی کنند.
  • 5.2 Remote Thread Injection + Delegate Method and bypassing Defender
    • در بخش 2 از فصل پنجم ما در مورد روش استفاده از Function Pointer و Delegate در Csharp را بررسی می کنیم
      توسط این روش بدون Import کردن توابعی مثل VirtualAllocEx /WriteProcessMemory / CreateRemoteThread شما می توانید
      در کد از آنها استفاده کنید و این کمک می کند به شما برای Bypass کردن آنتی ویروس ها همانند Windows Defender
  • 5.3 Remote Thread Injection + Jump Method and Bypassing Kaspersky + Defender
    • در بخش 3 از فصل پنجم از روش Classic استفاده می کنیم تا یک New Thread ایجاد کنیم
      اما Paylaod درون این New Thread ما یک Jump کد می باشد به یک آدرس A دیگر در حافظه که
      در آن آدرس A ما یک Jump code دیگر داریم که اشاره می کند به آدرس B که همان CobaltStrike Paylaod ما می باشد
      در نتیجه مشاهده می کنید که توسط این تکنیک ما بصورت Indirect کد مربوط به CobaltStrike Payload را اجرا می کنیم
      در نتیجه ما از CreateRemoteThread استفاده کرده ایم در کد اما به دلیل اینکه در کد ما این تابع قرار می باشد یک Jump code
      را اجرا کند و نه یک Payload برای CobaltStrike را در نتیجه توسط آنتی ویروس کد شناسایی نمی شود
Chapter 6 -

[X technique] via Extension Methods in C#

  • 6.1 X Technique, Changing Codes via Extension Method
    • در فصل 6 روشی را معرفی می کنم که توسط آن شما می توانید کد سی شارپ خود را تغییر بدهید تا دارای یک Signature جدید
      بشود و به شما کمک می کند در Bypass کردن آنتی ویروس ها مخصوصا در زمانی که کد شما را بر روی Harddisk شناسایی می کنند
      من نام این روش را که برای اولین بار در نسخه 1.0 همین کتاب معرفی شده X Technique نام گذاری کرده ام . در واقع من توسط این روش جدید سعی کرده ام با کمک Extension ها در Csharp کد هایی که معمولا بر روی هاردیسک شناسایی می شوند را جوری تغییر بدهم که Signature کد تغییر کند و رفتار کد کمی تغییر کند اما نتیجه کد یکسان باشد با زمان قبل از تغییر کد در نتیجه این روش یکجور پیچیده کردن کد می توان نام برد اما شاید پیچیده برای آنتی ویروس ها و نه برای برنامه نویسان در نتیجه شما به عنوان برنامه نویس کد می توانید آن را متوجه شوید .
Chapter 7 - Sliver C2 and your Csharp Codes
  • 7.1 When Sliver C2 Payloads is Good to Use , When is not  
    • در فصل 7 من فقط در مورد روشهای استفاده از Sliver-C2 صحبت می کنم و نه Csharp codes.در این کتاب از فصل 1 تا 6 من از Sliver_C2 استفاده نکرده ام که باید بگم این C2 Server بسیار مفید و تکنیکی می باشد و از نظر من بهتر از CobaltStrike می باشد به یک دلیل ساده و آن اینکه Open-source و FREE می باشد.
  • 7.2 Sliver-C2 Beacon with mTLS Payloads
    • در این بخش 2 من روشی ساده برای ایجاد Beacon توسط mTLS را بر روی Sliver-C2 مثال می زنم و روش استفاده
      از آن با کمک کد سی شارپ
  • 7.3 Sliver-C2 Beacon with Https Payloads
    • در این بخش 3 استفاده از Beacon را برای ترافیک HTTP/S بر روی Sliver-c2 توسط Csharp را بررسی می کنیم
  • 7.4 Using Resource for Hardcoding Big Sliver-C2 Payloads

    یکی از مواردی که Sliver-C2 payload را با CobaltStrike Paylaod متفاوت می کند Size آنها می باشد
    در این بخش 4 از فصل 7 من یک روش ساده و بسیار مفید را برای شما شرح می دهم تا بتوانید Payload های Sliver-c2
    براحتی در کد استفاده کنید به عنوان Resource و البته در این روش حجم Exe شما بزرگ می شود بدلیل اینکه Payload شما
    بعنوان Resource در فایل Exe بصورت HardCode شده می باشد و شما می توانید برای جلوگیری کردن از شناسایی Payload در
    فایل Exe آن را با Xor بصورت Encrypt کنید و سپس Hardcode کنید که این روش Xor کردن فایلهای Bin را در بخش بعدی شرح خواهم داد
    اما در این بخش روش ایجاد Resource و اضافه کردن فایل Bin را با هم بررسی می کنیم .

  • 7.5 C# Code for Encrypting Sliver-C2 Bin Files
    • در ادامه بخش 4 در این بخش پنجم روشی ساده برای Encrypt کردن Bin فایلهای Sliver-c2 را بررسی می کنیم
      که توسط Xor انجام می شود و یک Key و این مورد بشما کمک می کند اگر خواستید فایل Bin را بر روی Harddisk قرار دهید
      و یا اینکه بر روی Exe فایل بعنوان یک Resource بصورت HardCode داشته باشید در حالت Encrypt شده باشد تا امکان شناسایی آن بسیار
      کم شود و ریسک کار پایین باشد
      .
  • 7.6 Beacon Connections and Active Connections in Sliver-C2
    • در این بخش 6 از فصل هفتم انواع Conecction های Sliver-C2 را بررسی می کنیم که نوع اول Beacon Mode می باشد
      و نوع دوم Connection هایی می باشد که دیگر مانند Beacon Mode نمی باشند یعنی دارای یک Network Connection در حالت ثابت می باشند
  • 7.7 Bypassing ETW and Execute .NET Assembly Codes
    • در این بخش 7 از فصل هفتم یک روش ساده برای اجرای کدهای Dotnet در دررون Sliver Process را بررسی می کنیم
      شما با چیزی مانند این روش در فصل Chapter 3.4 آشنا شده اید در اینجا ما همان روش را در Sliver-C2 توسط دستورات آن
      بررسی می کنیم اما موردی که اینجا بیشتر بر روی آن تمرکز می کنیم روشی می باشد برای از کار انداختن ETW بر روی
      Sliver Process یا همان Process هایی که Payload مربوط به Sliver-c2 بر روی آنها اجرا شده .
Chapter 8 -

Native CallBack Functions by C#

  • 8.1 Native CallBack Functions by Csharp
    • در فصل 8 ما با Callback Functions آشنا می شویم و روش کار با آنها بر روی Csharp.
      در فصل های گذشته ما با مواردی همچون CreateThread / CreateRemoteThread / FunctionPointers آشنا شدیم برای اجرای
      کدها و بایتهای خود در Memory در این فصل تکنیکهای جدیدی را برای اجرای Byte های خود در Memory را بررسی
      می کنیم که همانند توابع قبلی به ما کمک می کند برای انجام این کار .
Chapter 9 -

Compiling and Running Managed Codes In-Memory by C#

  • 9.1 Running C# Managed Codes In-Memory by Csharp
    • در فصل 9 مواردی بر روی Csharp را بررسی می کنیم که بیشتر به NameSpace System.Reflection بر می گردد و برای مواردی همچون  Compiling C# Codes in-memory  کاربرد دارند و همچنین اجرای کدها و Exe های Dotnet که در اصطلاح به آنها Assembly گفته می شود در  Dotnet و دلیل استفاده از این روشها و تکنیکها در Dotnet برای Red-teaming این می باشد که کدهای شما در Memory اجرا می شوند بصورت Dynamic بدون آنکه شناسایی بشوند بر روی Harddisk و این بسیار مهم می باشد در Bypass کردن برخی آنتی ویروسها. در این بخش اول از  فصل 9 من یک نمونه کد بسیار ساده و بسیار مهم را معرفی می کنم که بسیار کاربرد دارد در Red-teaming و همچنین در نوشتن کدهای مانند C2 Server و یک نمونه مثال را با هم بررسی می کنیم که چگونه از این کد می توان در C2 Server هایی که با Dotnet و Csharp نوشته شده اند  استفاده کرد.
  • 9.2 Running C# Managed Codes In-Memory by C# , Part2
    • در فصل 9 بخش 2 ادامه موارد فصل 9.1 را بررسی می کنیم و در اینجا چند Trick ساده اما کاربردی برای Encrypt کردن
      Exe فایل هایی که می خواهیم آنها را توسط تکنیکی که در InMemoryRun وجود داشت اجرا کنیم بررسی می کنیم و همچنین
      روش گرفتن Exe فایلها از طریق شبکه و ترافیک Web بجای خواندن Exe فایلها از روی Harddisk.
  • 9.3 Compiling C# Source Codes In-Memory by Csharp
    • در فصل 9 بخش 3 روشی را بررسی می کنیم که بسیار قدیمی می باشد اما بسیار کاربردی در Red Teaming.
      در این روش شما می توانید بجای اجرای Exe فایل در Memory یک C# Source Code را در In-Memory اول
      آن را Compile کنید سپس اجرا کنید . در نتیجه در این روش ما فقط یک Text فایل داریم یا یک سری Text به عنوان
      کد برای اجرا در Memory . درنتیجه شناسایی آنها در Memory بسیار سخت می باشد برای آنتی ویروس ها .
Chapter 10 -

Detecting Memory Allocation in-memory via ETW Events (Blue team)

  • 10.1 ETW and VirtualMemAlloc Events
    • در فصل 10 در بخش اول بر روی ETW Event Trace for Windows کار می کنیم که بسیار مهم می باشد برای Detection
      مخصوصا برای تیم آبی دراین فصل 10 هدف من بیشتر بر روی Detection می باشد برای افراد Blue team و به عنوان Pentester
      و یا Red teamer شما باید بدانید یکی از هدفهای کار ما کمک به افراد تیم آبی می باشد برای بهتر شدن کار تیم آبی و کمک به آنها
      در شناسایی خطرات در شبکه و این کمک کردن به تیم آبی در واقع فلسفه وجود تیم قرمز می باشد. در این فصل من بیشتر تمرکز می کنم بر روی مواردی همچون برنامه نویسی برای افراد تیم آبی و نوشتن کد برای Detect کردن برخی از کدهای که در همین کتاب آنها را بررسی کردیم .
      در این فصل روش استفاده از دو ابزار ETWProcessMon v1.1 و VirtualMemAllocMon v1.1 را بررسی می کنیم و آشنا می شوید با رویکرد استفاده از ETW Events  در این دو ابزار قدم به قدم برای Detect کردن Jump Byte ها در حافظه و همچنین چگونگی استفاده از این دو ابزار و استفاده از  ETW VirtualMemAlloc Events برای شناسایی بایتهای مربوط به Payload های CobaltStrike , Sliver-c2 وشناسایی برخی از بایتهای مرتبط به Payload های این دو C2 Server در Memory و ...
  • 10.2 ETW and VirtualMemAlloc Events , Part2
    • در فصل 10 در بخش دوم که ادامه بخش یک می باشد بر روی کدهای سی شارپ ابزار ETWProcessMon v1.1 بیشتر تمرکز می کنیم و هدف این می باشد که شما با Background کد بیشتر آشنا شوید.
  • 10.3 ETW and VirtualMemAlloc Events , Part3
    • در فصل 10 در بخش سوم  که ادامه بخشهای 1 و 2  می باشد بر روی کدهای سی شارپ ابزار VirtualMemAllocMon v1.1 بیشتر تمرکز می کنیم و هدف این می باشد که شما با Background کد در این Memory Scanner که با ETW Events کار می کند بیشتر آشنا شوید.
Chapter 11 -

Detecting Threats in-memory via other ETW Events (Blue team)

  • 11.1 ETW ImageLoads and TCPIP Events for Detecting Threats In-Memory
    • در فصل 11 در بخش 1 روش های دیگر استفاده از ETW برای Detection را بررسی می کنیم در بخش یک فصل 11 تکنیکی بسیار ساده اما کاربردی را برای شناسایی Process هایی که توسط Sliver-c2 آلوده شده اند و یا Payload مربوط به Sliver-c2 به آنها Inject شده را بررسی می کنیم و آن روش استفاده ازETW Event های ImageLoads و TCPIP Send می باشد برای شناسایی Process های آلوده. در اینجا کد ETWProcessMon v1.2 را که جدید می باشد بررسی می کنیم.
  • 11.2 Detecting Remote Thread Injection and Monitoring Windows Events Log by Csharp
    • در فصل 11 در بخش 2 روش استفاده از ETW ThreadStart Events را برای Detect کردن Remote Thread Injection را بررسی می کنیم و تمرکز ما بر روی کد جدید ETWProcessMon v1.3 می باشد و همچنین روش ذخیره کردن ETW Events را بر روی Windows Event logs را کار خواهیم کرد که می تواند بسیار به افراد تیم آبی کمک کند در استفاده از ETW Events برای انتقال ETW Event Records به دیگر ابزار های دفاعی خود در بخش SOC و ... و یک نمونه مثال از چگونگی Monitor کردن Windows Event Logs توسط Csharp را بررسی می کنیم و ...

 

 
 
 
 
 
 
 

eBook: Bypassing Anti viruses by C# Programming v2.0

Last Updated: 2023 Jul 14