Basit bir Runtime Crypter Yapımı ve Mantığını Anlamak...

Trsz_kwT

Özel Üye
Katılım
2 Ara 2017
Mesajlar
467
Tepkime puanı
0
Puanları
0
Crypter çoğunuzun bildiği gibi istenilen bir dosya yada metni şifreleme, kodlama yada simetrik karıştırma programıdır.

Çoğunlukla crypter programları esnek ve güncellenebilir olsun diye STUB kullanılarak kodlanır ve encrypt edilir.

Bu nedenle crypter denilen yazılımlar 3 ana gruba ayrılır.


  1. Stublu Scantime Crypter,
  2. Runtime Crypter,
  3. Dropper Crypter...
Scantime Crypter: 
Payloadı yada gizlenen server RATı, stub denilen bir Hex yığını (.bin) yada Exe dosyasıyla maskelenir. Bu tür crypterlar FUD dosyası çalışmıyor iken kolay kolay yakalanmazlar. Çünkü stub, bu imza kontrolünü yanıltır. İlave olarak artık bu tür crypterlara Memory Fill, Cpu Overflow yada Regedit yamalarıyla tarama engelide konularak antivirüsün direkt FUD dosyasını tarayamaması sağlanmaktadır da...


Runtime Crypter:
Bu tür crypterlar daha yeni bir kodlamaya sahip olup, esnekliği ve güncelliği dezavantajlarıdır. Bu tür crypterlar, gizlenen payloadı o an çalışırken RAMde [font=Arial, Tahoma, Helvetica, sans-serif]Inverse operation code çalıştırarak servera çalışır hale getirirler. Bu mantıkta stub ve temp pek kullanılmaz. En büyük avantajı yakalanması zordur. Base64, Xor, RC4, RC2, Dep gibi şifreleyicilerin değişik kombinasyonlarıyla üretilmesindendir. [/font]
[font=Arial, Tahoma, Helvetica, sans-serif]Bu tür crypterlar; [/font]
[font=Arial, Tahoma, Helvetica, sans-serif]Runtime Taramasından kaçmak için,[/font]
[font=Arial, Tahoma, Helvetica, sans-serif]ntdll.dll modülü içindeki [font=inherit, serif]LdrUnloadDLL[/font][/font] foksiyonunu unload yaparak 
yada 
BootTime taramasından kaçmak için;

kernel32 yani Windows Kernelindaki [font=inherit, serif]PsSetCreateThreadNotifyRoutine[/font][font=inherit, serif][font=inherit, serif] ve [size=small][font=inherit, serif]PsSetLoadImageNotifyRoutine[/font][/size][/font][/font] Apilerini pasif seviyeye çekerek monitoring olayından ve antivirüs taramasından kaçarlar...

Bu Boottime ve Runtime bypasslarıyla ilgili ileride daha ayrıntılı bir yazı hazırlamayı düşünüyorum...


Dropper Crypter:
Son zamanda gizleme algoritmalarının özgünlüğünün azalması ve stubların yakalanıyor olmasından dolayı tercih edilmektedir. Çünkü Antivirüs Cloud ağları son 10 yılda milyonlarcaalgoritmayı ve mantığı imzaya döktüler. Bu nedenle FUD file ne kadar az kod içerir (kısaca API) ve crypt hesaplamaları olmazsa yakalanması zorlaşıyor. Daha önceleri Worm, Adware ve RATlarda kullanılan dropper yöntemi bu nedenle son zamanlarda crypterlarda da kullanılmaya başladı. Amaç; stubla maskelenen bir payloadı yada kodlanmış byte-hex yığınını HDD yada RAM de çözmek yerine bypass sonrası netten download ederek çalıştırmaktır. Avantajı boyutu, kodlama kolaylığı iken dezavantajı ise firewalların 3.part exe downloadını hemen engelliyor olmalarıdır. Tabi bu tür crypterlarda Windows Firewalla güvenli eklenmesi, drop yapılan serverın Exe değilde başka türlerde indirilmesi yakalanmayı zorlaştırır. Mesela; com, vbs, bat-cmd ile hex dump, mp3-mp4-pdf embed vb. gibi...



Gelelim yapacağımız basit runtime crypter kodlamasına:
 Bugünkü örneğimizi C#.NET te yapacağız.... C dili, bilmeyen arkadaşlar online converterlarla VB.NETe çevirebilirler...



Programın enCrypt algoritması basit bir Xor işlemi üzerine kurulmuştur.


Kod:
 private static byte[] kodlaBytes(byte[] hamBytes, String sifre)
        {
            byte[] sifreBytes = Encoding.Unicode.GetBytes(sifre);

            for (int i = 0; i < hamBytes.Length; i++)
            {
                hamBytes[i] ^= sifreBytes[i % 16]; // Girilen şifrenin ilk 16 bytenı alıp 
                                              // server dosyasının tüm ham bytelarına 
                                              // sırayla XOR işlemi yapar...
                                              // Bu işlem söz konusu baytın tüm 
                                              // bitlerine uygulanır. 
                                              // Mesela ilk ham byte değerimiz 144 olsun.
                                              // Şifreninde 8.byte (53) denk gelmiş olsun. 
                //  144  --->  10010000     ^     53   --->  00110101
                //  sonuç;  10100101  --->  165 çıkacaktır...  
            }

            return hamBytes;
        }
 



Cryterımızın ana kodlaması:


Kod:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace Simple_Runtime_Crypter
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        { 

        }

        private void button1_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog();
        }

        private void button2_Click(object sender, EventArgs e)
        {

            string text = String.Empty;

            for (byte i = 0; i < 40; i++) { 
                text += Char.ConvertFromUtf32(new Random(Guid.NewGuid().GetHashCode()).Next(32,127));
            }

            textBox2.Text = text;

        }

        private static byte[] kodlaBytes(byte[] hamBytes, String sifre)
        {
            byte[] sifreBytes = Encoding.Unicode.GetBytes(sifre);

            for (int i = 0; i < hamBytes.Length; i++)
            {
                hamBytes[i] ^= sifreBytes[i % 16]; // Girilen şifrenin ilk 16 bytenı alıp 
                                              // server dosyasının tüm ham bytelarına 
                                              // sırayla XOR işlemi yapar...
                                              // Bu işlem söz konusu baytın tüm 
                                              // bitlerine uygulanır. 
                                              // Mesela ilk ham byte değerimiz 144 olsun.
                                              // Şifreninde 8.byte (53) denk gelmiş olsun. 
                //  144  --->  10010000     ^     53   --->  00110101
                //  sonuç;  10100101  --->  165 çıkacaktır...  
            }

            return hamBytes;
        }


        private void button3_Click(object sender, EventArgs e)
        {

            byte[] hamBytes = File.ReadAllBytes(openFileDialog1.FileName);

            byte[] kodlanmisBytes = kodlaBytes(hamBytes, textBox2.Text);

            saveFileDialog1.ShowDialog();

            File.WriteAllBytes(saveFileDialog1.FileName, kodlanmisBytes);

        }


    }
}




Ayrıca decrypt yapacak FUD program kodları ise;
 

mersin escort bodrum escort alanya escort kayseri escort konya escort marmaris escort bodrum escort tto dermodicos vozol puff
Üst
Copyright® Ajanlar.org 2012