Jump to content

C#.net Ile Microsoft Word’de Otomatik İmza Oluştur


wmismail

Recommended Posts

İlk önce biz yazılımcıların her daim dikkatini çeken ve güvenlik konusunda dikkatli olmamızı gerektiren logger uygulamalarının mantığını kavramak için key logger benzeri bir uygulama geliştireceğiz.

Bu tip uygulamalar “ileri düzey” kategorisinde yer aldığı için remoting altyapımızın olması gerekiyor ve kodları iyi takip etmemiz gerekiyor. Bu sebeple makalemde “yeni bir proje ekliyoruz, projemize solution explorerdan new item diyerek..” tarzında betikler göremeyeceksiniz. Takılacağınız herhangi bir konuda en aşağıda belirteceğim mail adresimden her daim destek almanızı öneririm. Ayrıca her kodun açıklamasının da kod aralıklarında mutlaka yazıldığını belirtmek isterim.

Logger tipi uygulamar 2 şekilde oluşturuluyor. Birincisinde kendi uygulamamızı diğer bilgisayara gönderip, o uygulama içerisinde yapılan işlemin kendi bilgisayarımıza tekrar geri çekilmesiyle oluşturuluyor. İkincisi ise Internet Explorer gibi bir uygulamada basılan karakterin bilgisayarımıza aktarılmasıyla oluşturuluyor.

Bu makale, bahsettiğim birinci tip uygulamaya ait bir örnek olacaktır. İlk önce dll uygulamamızı geliştiriyoruz. Projelerimizde her zaman System.Runtime.Remoting namespace’i yer alacaktır.

Dll Uygulamamızın Kodları:

using System;

using System.Collections.Generic;

using System.Text;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.IO;

namespace KeyLogger

{

public interface arayuz

{

‘mesaj yolla isminde bir string degisken tanimliyoruz

String mesajyolla(string deger);

}

public class dlluygulamasi : MarshalByRefObject, arayuz

{

public string mesajyolla(string deger)

{

‘string isminde bir degisken tanimlayip degerini nereden alacagini belirtiyoruz

string yol;

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

‘yaz isminde bir streamwriter hazirlayip degerini nereden alacagini belirtiyoruz

StreamWriter yaz = new StreamWriter(yol);

yaz.WriteLine(deger);

yaz.Close();

return null;

}

}

}

Server Uygulamamız:

Yine System.Runtime.Remoting namespaceimizi ve daha önce yapmış olduğumuz dll’imizi bu uygulamamıza dahil ediyoruz. Tasarımımız aşağıdaki gibi olacaktır (Timer nesnesini de ekliyoruz):

1000001147_image001.jpg

Buradaki amaç daha öncede bahsettiğim gibi diğer bilgisayarda basılan karakteri kendi bilgisayarımza aktarıp istediğimiz amaçla kullanmaktır. İstersek aktarılacak verileri log dosyasında da barındırabiliriz.

using System.Runtime;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Http;

using KeyLogger;

namespace KeyLogger

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

textBox1.Multiline = true;

‘bir kanal takimlayip hangi portu kullanacagini belirtiyoruz

HttpChannel kanal = new HttpChannel(42000);

‘bu kanalimizin servis tipini belirtip dll dosyamiza göre islem yapacagini belirtiyoruz

ChannelServices.RegisterChannel(kanal);

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

‘forma ekledigimiz timerin interval degerini belirtip calismasini sagliyoruz

timer1.Interval = 10;

timer1.Start();

}

private void timer1_Tick(object sender, EventArgs e)

{

try

{

‘formun calisma esnasinda yol degiskeni kullanilacak

‘amac islemleri bir txt dosyasinda tutmak ve form kapatildiginda bu dosyayi silmek

‘kisacasi islemlerimizi önce dosyadan okuyoruz, sonra textboxa yazdiriyoruz

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)

{

‘yukaridada bahsettigim gibi formun kapanisi esnasinda txt dosyasi siliniyor

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

FileInfo dosya = new FileInfo(yol);

if (dosya.Exists)

{

dosya.Delete();

}

}

}

}

Client Uygulamamız:

1000001147_image002.jpg

Client uygulamamızda, kullanıcı karakterlerini girecektir. Bu karakterler server uygulamamızdaki form ekranına yansıyacaktır. Kodlarımız:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Tcp;

using System.Runtime.Remoting.Messaging;

using KeyLogger;

namespace Cliento

{

public partial class Form1 : Form

{

‘httpchannella okudumuz veriler aslinda client bölümünde tcpchannella yaziliyor

‘burada yazmak icin kanal tanimliyoruz

public delegate string Isletme(string deger);

TcpChannel kanal;

Isletme son;

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

‘formun acilisi esnasinda kanalimiz aktif hale geciyor

‘burada tipini belirtiyoruz ve nereden yayin yapacagini belirliyoruz

kanal = new TcpChannel();

ChannelServices.RegisterChannel(kanal);

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

son = new Isletme(uzakyuz.mesajyolla);

}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)

{

‘en onemli noktalardan biri de burasi

‘klavyeden girilen karakterler bir degiskende tutuluyor

‘bu degisken tum degerlerini kanal vasitasiyla textboxa oradan da servera aktariyor

string karakterler;

karakterler = e.KeyChar.ToString();

son(karakterler);

}

}

}

Belirtmek istediğim birkaç özel nokta var bunlardan ilki; projemizi çalıştırırken başlangıç sayfamızı alt + 2 kez p tuşlarına basarak çıkacak ekrandan belirtebiliyoruz. Diyelimki server uygulamamız önce açılıyor. Daha sonra visual studio solution explorer penceresinde yer alan client uygulamamıza sağ tıklayıp debugging sekmesinden start new instance diyerek onu da çalıştırabiliyoruz. Böylece clientte basılan karakterlerin servera nasıl yansıdığını görebiliyoruz.

1000001147_image003.jpg

İkinci olarak şunu belirtmek isterimki burada amacımız portlar arası iletişimi görebilmek ve intranet programcılığa adım atmak. Örneğim umarım farklı amaçlar için kullanılmaz. Formu ilk çalıştırdığınız anda Windows size bir uyarı verebilir ve vshost.exe dosyasına izin verip vermeyeceğinizi sorabilir. Eğer izin vermezseniz programınız çalışmaz, verirseniz karakterlerin nasıl basıldığını görebilirsiniz. Windowsun size bu uyarıyı vermesinin sebebi portları kullanacak olmanızdandır.

Umarım yararlı bir makale olmuştur. 2.makale de bu key logger uygulamamızı api kullanarak gerçekleştireceğiz. Çünkü bu uygulamamızda sadece forma girilen karakterleri görebiliyorduk. Oysa Windowsun apileriyle gerek internet explorera gerekse notepad gibi dosyalara yazılan karakterleri de görebileceğiz. Tekrar görüşmek üzere, iyi çalışmalar.

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...