<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on 0xGently</title><link>https://0xgently.github.io/posts/</link><description>Recent content in Posts on 0xGently</description><generator>Hugo</generator><language>tr-TR</language><copyright>Content is licensed under CC BY 4.0. © 0xGently</copyright><lastBuildDate>Tue, 27 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://0xgently.github.io/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Custom GetProcAddress</title><link>https://0xgently.github.io/posts/custom_getprocaddress/</link><pubDate>Tue, 27 Oct 2026 00:00:00 +0000</pubDate><guid>https://0xgently.github.io/posts/custom_getprocaddress/</guid><description>&lt;h2 id="giriş"&gt;Giriş&lt;/h2&gt;
&lt;p&gt;Windows sistemlerinde C veya C++ ile geliştirme yaparken, bir DLL içindeki fonksiyonu çağırmak için genellikle &lt;code&gt;GetProcAddress&lt;/code&gt; kullanırız. Süreç temelde basittir: &lt;code&gt;LoadLibrary&lt;/code&gt; ile DLL belleğe alınır, ardından &lt;code&gt;GetProcAddress&lt;/code&gt;&amp;lsquo;e DLL&amp;rsquo;in handle değeri ve aranan fonksiyonun adı verilir. Peki bu işlem arka planda tam olarak nasıl işliyor? İşletim sistemi, verdiğimiz string değerini büyük bir bellek bloğu içinde nasıl bulup bize adresini dönüyor? Bu yazıda, standart Windows API&amp;rsquo;lerini kullanmak yerine bir PE dosyasının bellek yapısını çözümleyerek kendi &lt;code&gt;GetProcAddress&lt;/code&gt; fonksiyonumuzu yazıyoruz.&lt;/p&gt;</description></item><item><title>Custom GetModuleHandle</title><link>https://0xgently.github.io/posts/custom_getmodulehandle/</link><pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate><guid>https://0xgently.github.io/posts/custom_getmodulehandle/</guid><description>&lt;h2 id="giriş"&gt;Giriş&lt;/h2&gt;
&lt;p&gt;Windows API&amp;rsquo;lerinin arka planda tam olarak nasıl çalıştığını incelemek Zararlı yazarken bize çok sayıda yeni teknik ve taktik kazandırır. Bu yazıda, en sık kullanılan API&amp;rsquo;lerden biri olan &lt;code&gt;GetModuleHandle&lt;/code&gt; fonksiyonunu, hiçbir Windows API&amp;rsquo;si çağırmadan sıfırdan nasıl implemente edebileceğimizi inceleyeceğiz. Tabiki bunu yapma sebeplerimizden en büyüğü sürekli kullanmış olduğumuz bu fonksiyonu IAT(Import Address Table) içerisinden gizlemek.&lt;/p&gt;
&lt;p&gt;Bildiğiniz gibi &lt;code&gt;GetModuleHandle&lt;/code&gt;, verdiğiniz bir DLL ismine karşılık o modülün bellekte yüklü olduğu base adresini döner. Yaptığı işlem aslında gayet nettir: OS loader tarafından her process için tutulan ve yüklü modülleri barındıran bir listeyi taramak. Bu liste, Process Environment Block (PEB) yapısının içinde yer alır. Bu yazının odak noktası da PEB&amp;rsquo;e manuel olarak ulaşıp bu listeyi nasıl parse edeceğimizi adım adım göstermek olacak.&lt;/p&gt;</description></item><item><title>Local APC Injection</title><link>https://0xgently.github.io/posts/apc_%C4%B1nj/</link><pubDate>Wed, 21 Oct 2026 00:00:00 +0000</pubDate><guid>https://0xgently.github.io/posts/apc_%C4%B1nj/</guid><description>&lt;h1 id="apc-injection"&gt;Apc Injection&lt;/h1&gt;
&lt;p&gt;Günümüzde birtakım zararlılar yazma konusunda payload&amp;rsquo;umuzu çalıştırmak için kullandığımız birçok teknik var. Bu yazıda, işletim sisteminin doğal işleyişini kendi lehimize kullandığımız, en temel ve etkili yöntemlerden biri olan &lt;strong&gt;APC Injection&lt;/strong&gt; tekniğine odaklanacağız. İşin bellek ayırma gibi her enjeksiyonda tekrarlanan standart kısımlarıyla vakit kaybetmeden doğrudan tekniğe odaklanacağız.&lt;/p&gt;
&lt;h2 id="apc-nedir--asynchronous-procedure-call"&gt;APC Nedir ? (Asynchronous Procedure Call)&lt;/h2&gt;
&lt;p&gt;En basit haliyle APC, belirli bir thread bağlamında asenkron olarak çalıştırılmak üzere sıraya alınmış bir fonksiyondur. Windows işletim sisteminde çalışan her thread&amp;rsquo;in kendine ait bir APC kuyruğu bulunur.&lt;/p&gt;</description></item><item><title> Process Enumeration-1</title><link>https://0xgently.github.io/posts/createtoolhelp32snapshot/</link><pubDate>Sat, 17 Oct 2026 00:00:00 +0000</pubDate><guid>https://0xgently.github.io/posts/createtoolhelp32snapshot/</guid><description>&lt;p&gt;Bu yazımızda &lt;strong&gt;&lt;code&gt;CreateToolhelp32Snapshot&lt;/code&gt;&lt;/strong&gt; fonksiyonunu kullanarak nasıl process&amp;rsquo;ler veya
thread&amp;rsquo;ler hakkında bilgi toplarız onu anlatacağım.&lt;/p&gt;
&lt;p&gt;Geliştirdiğimiz araçlarda veya yazdığımız zararlılarda hedef aldığımız bir &lt;strong&gt;process&lt;/strong&gt;&amp;rsquo;e müdahale etmek istiyorsak, öncelikle sistemde o &lt;strong&gt;process&lt;/strong&gt;&amp;lsquo;in nerede durduğunu tam olarak tespit etmemiz gerekiyor.
Operasyonumuzu iki temel aşamaya böleceğiz.
İlk olarak, elimizdeki düz bir metinden (örneğin &lt;code&gt;notepad.exe&lt;/code&gt; gibi bir &lt;strong&gt;process&lt;/strong&gt; isminden) yola çıkarak sistemdeki tüm &lt;strong&gt;process&lt;/strong&gt;&amp;rsquo;leri tarayacak ve hedefimizin benzersiz kimlik numarasını, yani &lt;strong&gt;PID&lt;/strong&gt;&amp;lsquo;sini çekeceğiz. İkinci aşamada ise elde ettiğimiz bu &lt;strong&gt;PID&lt;/strong&gt; üzerinden hedef &lt;strong&gt;process&lt;/strong&gt;&amp;lsquo;in içerisine girip, üzerinde manipülasyon yapabileceğimiz ya da ele geçirebileceğimiz geçerli bir &lt;strong&gt;thread&lt;/strong&gt; yakalayacağız.&lt;/p&gt;</description></item><item><title>Thread Hijacking</title><link>https://0xgently.github.io/posts/thread_hijacking/</link><pubDate>Fri, 09 Oct 2026 00:00:00 +0000</pubDate><guid>https://0xgently.github.io/posts/thread_hijacking/</guid><description>&lt;h2 id="remote_thread_creation"&gt;Remote_Thread_Creation&lt;/h2&gt;
&lt;p&gt;Bu yazımızda; meşru bir procesesi askıya alıp, bellek alanına shellcode enjekte ettikten sonra mevcut thread&amp;rsquo;in RIP/EIP registerlarını manipüle ederek çalışan bir teknikten bahsedeceğim.&lt;/p&gt;
&lt;p&gt;Siber güvenlik dünyasında, hedef bir proses içerisinde kod çalıştırmak için genellikle &lt;code&gt;CreateRemoteThread&lt;/code&gt; gibi API&amp;rsquo;ler tercih edilir. Ancak bu fonksiyonlar güvenlik mekanizmaları (AV/EDR) tarafından çok sıkı izlenir ve anında engellenir. Thread Hijacking ise sıfırdan yeni ve şüpheli bir thread oluşturmak yerine, halihazırda var olan meşru bir thread&amp;rsquo;in rotasını &amp;ldquo;çalmayı&amp;rdquo; hedefler.&lt;/p&gt;</description></item><item><title>Process Enumeration-3</title><link>https://0xgently.github.io/posts/ntquerysysteminformation/</link><pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate><guid>https://0xgently.github.io/posts/ntquerysysteminformation/</guid><description>&lt;h2 id="process-enumeration"&gt;Process Enumeration&lt;/h2&gt;
&lt;h3 id="hedefin-pid-değerini-bulmak-ntquerysysteminformation"&gt;Hedefin PID Değerini Bulmak (NtQuerySystemInformation)&lt;/h3&gt;
&lt;p&gt;Zararlı yazılım geliştirirken (malware dev), payload&amp;rsquo;umuzu bellekte saklamak veya &lt;strong&gt;Birçok&lt;/strong&gt; Execute tekniklerini stabil bir şekilde çalıştırabilmek için genellikle sistemde zaten var olan meşru bir process&amp;rsquo;e (örneğin &lt;code&gt;notepad.exe&lt;/code&gt;, &lt;code&gt;explorer.exe&lt;/code&gt; veya &lt;code&gt;svchost.exe&lt;/code&gt;) ihtiyaç duyarız.&lt;/p&gt;
&lt;p&gt;İşte tam bu noktada, sistemde o an aktif olan süreçleri listeleyip hedefimizin PID değerini koparmaya veya süreçler hakkında telemetry toplamaya genel olarak &lt;strong&gt;Process Enumeration&lt;/strong&gt; diyoruz. Bir önceki yazımızda, Windows’un standart &lt;code&gt;EnumProcesses&lt;/code&gt; API&amp;rsquo;sini kullanarak bu işlemi sıfırdan nasıl yapacağımıza adım adım bakmıştık. Ancak siber güvenlik dünyasında her zaman daha karmaşık daha öğrenilmesi zor yollar var&amp;hellip;&lt;/p&gt;</description></item><item><title>RC4 Şifreleme</title><link>https://0xgently.github.io/posts/rc4/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><guid>https://0xgently.github.io/posts/rc4/</guid><description>&lt;h2 id="rc4-şifrelemesi"&gt;RC4 Şifrelemesi&lt;/h2&gt;
&lt;p&gt;RC4, veriyi bloklar halinde değil, bayt bayt şifreleyen simetrik bir akış şifrelemesi (stream cipher) algoritmasıdır. Arka planda iki temel aşamadan oluşur: Anahtarın bellekte karıştırıldığı &lt;strong&gt;KSA (Key-Scheduling Algorithm)&lt;/strong&gt; ve şifrelenecek verinin üzerine yazılacak rastgele baytların üretildiği &lt;strong&gt;PRGA (Pseudo-Random Generation Algorithm)&lt;/strong&gt;. Simetrik yapısı sayesinde aynı fonksiyon hem şifreleme hem de deşifreleme için kullanılır.&lt;/p&gt;
&lt;p&gt;Zararlı yazılım geliştirmede RC4&amp;rsquo;ü koda entegre etmek için temelde 3 yöntem kullanılır:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SystemFunction032:&lt;/strong&gt; &lt;code&gt;Advapi32.dll&lt;/code&gt; içerisinde bulunan, Windows tarafından belgelenmemiş (undocumented) RC4 API&amp;rsquo;sidir.&lt;/p&gt;</description></item><item><title>XOR Şifreleme</title><link>https://0xgently.github.io/posts/xor/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://0xgently.github.io/posts/xor/</guid><description>&lt;h2 id="xor-şifrelemesi"&gt;XOR Şifrelemesi&lt;/h2&gt;
&lt;p&gt;Malware geliştirme dünyasında, yazdığınız zararlı yazılımın ömrünü belirleyen en kritik faktörlerden biri &lt;strong&gt;payload&amp;rsquo;unuzu ne kadar iyi gizleyebildiğinizdir&lt;/strong&gt;. Eğer bir shellcode&amp;rsquo;u veya PE dosyasını belleğe açık (plain-text) bir şekilde gömerseniz, statik analiz araçları ve Antivirüs (AV) imzaları saniyeler içinde sizi yakalayacaktır.&lt;/p&gt;
&lt;p&gt;İşte tam bu noktada &lt;strong&gt;Payload Encryption&lt;/strong&gt; devreye girer. Bu yazımızda, zararlı yazılım dünyasının en temel ama en çok modifiye edilen şifreleme mantıklarından birini, &lt;strong&gt;XOR&lt;/strong&gt; algoritmasını inceleyeceğiz. İşi temelden alıp kompleks (Rolling/Position-Dependent) yapılara doğru evrilteceğiz.&lt;/p&gt;</description></item><item><title>IPv4/IPv6 DeObfuscation</title><link>https://0xgently.github.io/posts/%C4%B1pv4_deobf/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><guid>https://0xgently.github.io/posts/%C4%B1pv4_deobf/</guid><description>&lt;h2 id="ipv4v6-deobfuscation"&gt;IPv4/v6 DeObfuscation&lt;/h2&gt;
&lt;p&gt;Bu yazıda, dışarıdan bakıldığında son derece sıradan görünen bir ağ yapılandırma fonksiyonunun, nasıl bir shellcode decoder&amp;rsquo;a dönüştürüldüğünü inceleyeceğiz. Amacımız, saldıran tarafın zihniyetini anlayarak savunma sistemlerimizi bu tür &amp;ldquo;normal görünen anormallikleri&amp;rdquo; yakalayacak şekilde kurgulamak.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not&lt;/strong&gt;: Bu metinde anlattığım kodun tamamını &lt;a href="https://github.com/0xGently/malware-development-library/tree/main/Payload-Encryption-and-Obfuscation/06-IPv4_IPv6_DeObf"&gt;malware-development-library&lt;/a&gt; adresinde bulabilirsiniz. Ayrıca bu konunun mantığını oturtup kodun tam halini incelediğinizde diğer tekniklere uygulanan DeObfuscation işlemlerinide oluşturabilirsiniz. Zaten hemen hemen aynı ya sadece birkaç değişiklik yapmanız gerekmektedir o kadar.&lt;/p&gt;</description></item><item><title>Chacha20 Şifreleme</title><link>https://0xgently.github.io/posts/chacha20/</link><pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate><guid>https://0xgently.github.io/posts/chacha20/</guid><description>&lt;h2 id="chacha20-şifrelemesi"&gt;ChaCha20 Şifrelemesi&lt;/h2&gt;
&lt;p&gt;Bu metinde Chacha20 den bahsedeceğim.&lt;/p&gt;
&lt;p&gt;Dosya boyutu ve basitlik her şeydir. ChaCha20&amp;rsquo;yi tercih etmemizin tek sebebi var: &lt;strong&gt;Küçük, hızlı ve ekstradan deşifre bloğu yazmanıza gerek bırakmıyor.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Peki neden ChaCha20&amp;rsquo;yi seçiyoruz? Çünkü inanılmaz derecede hızlıdır, işlemcinin özel şifreleme donanımlarına (AES-NI gibi) ihtiyaç duymaz ve C/C++ ile sıfırdan yazması (implementasyonu) çok daha zahmetsizdir. Ayrıca, şifreleme ve deşifreleme (encrypt/decrypt) işlemleri için birebir aynı kodu kullanırız, bu da yazdığımız zararlı yazılımın boyutunu (stub size) küçültür.&lt;/p&gt;</description></item><item><title>IPv4/IPv6 Obfuscation</title><link>https://0xgently.github.io/posts/%C4%B1pv4_obf/</link><pubDate>Thu, 05 Feb 2026 00:00:00 +0000</pubDate><guid>https://0xgently.github.io/posts/%C4%B1pv4_obf/</guid><description>&lt;h2 id="ipv4ipv6-obfuscation"&gt;IPv4/IPv6 Obfuscation&lt;/h2&gt;
&lt;p&gt;Siber güvenlik dünyasında bir veriyi saklamak istediğimizde önümüzde genellikle iki temel yol olur: Ya veriyi doğrudan şifreleriz (AES, RC4 veya XOR gibi) ya da onu karmaşıklaştırırız (obfuscation).&lt;/p&gt;
&lt;p&gt;Yazılım geliştirirken kodu zorlaştırmak bazen sadece fikri mülkiyeti korumak için değil, güvenlik mekanizmalarını aşmak için de kritik bir rol oynar. Örneğin elimizde bir shellcode var ve bunu gizlemek istiyoruz. İlk akla gelen çözüm şifreleme olsa da bu her zaman en akıllıca yol olmayabilir. Çünkü şifrelenmiş veriler, dosyanın o bölümündeki &lt;strong&gt;entropiyi (rastgelelik oranını)&lt;/strong&gt; tavan yaptırır ve bu durum güvenlik analizcilerinin ya da AV/EDR çözümlerinin hemen radarına takılır. İşte bu noktada, dikkat çekmeden karmaşıklaştırmak çok daha mantıklı bir seçeneğe dönüşüyor.&lt;/p&gt;</description></item><item><title>Process Enumeration-2</title><link>https://0xgently.github.io/posts/enum_process/</link><pubDate>Tue, 03 Feb 2026 00:00:00 +0000</pubDate><guid>https://0xgently.github.io/posts/enum_process/</guid><description>&lt;h2 id="process-enumeration"&gt;Process Enumeration&lt;/h2&gt;
&lt;h3 id="hedefin-pid-değerini-bulmak-enumprocesses"&gt;Hedefin PID Değerini Bulmak (EnumProcesses)&lt;/h3&gt;
&lt;p&gt;Zararlı yazılım geliştirirken payload&amp;rsquo;umuzu saklamak veya çalıştırmak gibi teknikleri uygulayabilmek için genellikle sistemde çalışan meşru bir process&amp;rsquo;e (örneğin &lt;code&gt;notepad.exe&lt;/code&gt; veya &lt;code&gt;explorer.exe&lt;/code&gt;) ihtiyaç duyarız. Windows&amp;rsquo;un dilinden konuşup o process&amp;rsquo;in PID (Process ID) değerini bulmamız gerekir.&lt;/p&gt;
&lt;p&gt;İşte sistemdeki süreçleri listeleyip hedefimizin PID değerini bulma veya buna benzer processler ile ilgili bilgi toplama işlemlerine genel olarak &lt;strong&gt;Process Enumeration&lt;/strong&gt; diyoruz. Bu yazıda, Windows&amp;rsquo;un standart &lt;code&gt;EnumProcesses&lt;/code&gt; API&amp;rsquo;sini kullanarak bunu sıfırdan nasıl yapacağımıza adım adım bakacağız.&lt;/p&gt;</description></item><item><title>Assembly’de Prologue ve Epilogue Nedir?</title><link>https://0xgently.github.io/posts/assembly/</link><pubDate>Thu, 03 Jul 2025 00:00:00 +0000</pubDate><guid>https://0xgently.github.io/posts/assembly/</guid><description>&lt;p&gt;High-level dillerde program yazarken, arka planda otomatik yapılan ama low-level dillerde (özellikle Assembly) manuel olarak yönetmemiz gereken pek çok işlem vardır. Bunların en önemlilerinden birisi de &lt;strong&gt;prologue&lt;/strong&gt; ve &lt;strong&gt;epilogue&lt;/strong&gt; işlemleridir.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Prologue İşleminin Stack Üzerindeki Şeması" loading="lazy" src="https://0xgently.github.io/assets/img/assembly-image.webp"&gt;&lt;/p&gt;
&lt;p&gt;İşlemin Assembly dilindeki görüntüsü&lt;/p&gt;
&lt;p&gt;Bu konuya başlamadan önce birkaç temel kavrama değineceğim:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Register:&lt;/strong&gt; CPU’nun en hızlı veri depolama alanıdır; işlem yapılacak veriler burada tutulur.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stack:&lt;/strong&gt; LIFO (Last In, First Out) mantığıyla çalışan, fonksiyon çağrılarında geçici veri tutan bellek alanıdır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stack Frame:&lt;/strong&gt; Her fonksiyon çağrıldığında stack üzerinde ayrılan, argümanlar ve yerel değişkenleri barındıran bellek bloğudur.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ESP/RSP:&lt;/strong&gt; Stack pointer; stack’in en üstünü gösterir. x86’da ESP, x64’te RSP olarak adlandırılır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EBP/RBP:&lt;/strong&gt; Base pointer; stack frame’in taban adresini tutar, değişkenlere erişimde referans noktasıdır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calling Convention:&lt;/strong&gt; Fonksiyonlara argümanların nasıl aktarıldığını ve dönüş değerlerinin nasıl alındığını belirleyen kurallar bütünüdür.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Push:&lt;/strong&gt; Bir değeri stack’e ekler, stack pointer’ı aşağı kaydırır.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pop:&lt;/strong&gt; Stack’in en üstündeki değeri alır, stack pointer’ı yukarı kaydırır.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bu kavramların hepsi prologue ve epilogue işlemlerini anlamanın temelini oluşturur. Zira bu iki işlem, stack frame’i oluşturup kaldırmaktan ibarettir.&lt;/p&gt;</description></item><item><title>Packet Crafting with Scapy</title><link>https://0xgently.github.io/posts/packet-crafting/</link><pubDate>Wed, 21 May 2025 00:00:00 +0000</pubDate><guid>https://0xgently.github.io/posts/packet-crafting/</guid><description>&lt;p&gt;&lt;img alt="Scapy Logo" loading="lazy" src="https://0xgently.github.io/assets/img/scapy-image.webp"&gt;&lt;/p&gt;
&lt;p&gt;Ağ güvenliği ve siber güvenlik dünyasında, bir paketin nasıl oluştuğunu, nasıl manipüle edilebileceğini ve özel paketler oluşturmayı bilmek çok kritik bir beceridir. Python programlama dili ve Scapy kütüphanesi, bu becerileri öğrenmek için mükemmel bir platform sunar. Bu yazıda, Scapy kullanarak ağ paketlerini oluşturmanın ve analiz etmenin temellerini aşama aşama detaylandıracağım.&lt;/p&gt;
&lt;h2 id="1-scapy-nedir-ve-neden-önemlidir"&gt;1. Scapy Nedir ve Neden Önemlidir?&lt;/h2&gt;
&lt;p&gt;Scapy, Python ile yazılmış güçlü bir ağ paket manipülasyon kütüphanesidir. Temel olarak şunları yapmamıza olanak sağlar:&lt;/p&gt;</description></item></channel></rss>