Delphi ile Bellek Okuma ve Yazma

By Burak TUNGUT - 20.11.2012 - 2 Yorum - Kategori Diğer Diller

Delphi ile ReadProcessMemory ve WriteProcessMemory APIler ile istediğimiz bir programın Handle numarası ile bellek okuma ve yazma işlemlerini gerçekleştireceğiz.

Bu konu ile ilk deneyimim mayın tarlasında sınırsız bayrak yapmak olduktan sonra Knight severler için çeşitli hileler yapmak oldu. Bu örneği her yerde kullanabilmeniz için bir kütüphane (DLL) haline getireceğiz.

Başlamadan önce

Bu kodu 3 sene önce 15 yaşımda iken yazmıştım ve sevdiğim bir ağabeyim olan Kenan Kocadurdu'ya hitaben ilk Delphi paylaşımımı gerçekleştiriyorum. İlk başladığım ve halen kullandığım Delphi'nin 7. sürümü ile yaptığım bu uygulamayı istediğiniz sürümde yapabilirsiniz.
Öncelikle yeni bir DLL Projesi yaratalım ve aşağıda da belirttiğim kütüphaneleri uses kısmına ekleyelim.
 

Fonksiyonlarımız

Daha anlaşılabilir olması için 4 ayrı fonksiyon yazdım. Genellikle Handle numarasını başlıktan aldığımız gibi uygulama classına göre de alabileceğimiz ayrı bir fonksiyon da tanımladım.
Handle No almak için, biri başlıktan diğeri de classdan olmak üzere 2 adet.
Adres okumak için ReadProcessMemory API'sini kullanan 1 adet ve
Adres yazmak için WriteProcessMemory API'sini kullanan 1 adet fonksiyon yazdım.

Bu örneğin ardından Bellek Okuma ve Yazma hakkında daha geniş örnekleri Google yardımıyla bulabilirsiniz...
 

library Project1;

uses
  SysUtils,
  Forms,
  Classes,
  Windows,
  shellapi;

{$R *.res}

function HandleBaslik(Baslik:PChar):integer;export;
var
WindowName , ProcessId : integer;
HandleWindow : cardinal;
begin
WindowName := FindWindow(nil, pchar(baslik));
Application.ProcessMessages;
GetWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
Result:=HandleWindow;
end;

function HandleSinif(Sinif:PChar):integer;export;
var
WindowName , ProcessId : integer;
HandleWindow : cardinal;
begin
WindowName := FindWindow(pchar(sinif), nil);
Application.ProcessMessages;
GetWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
Result:=HandleWindow;
end;

function AdresOku(OPHandle,Adres:integer):integer;export;
var
sonuc,bytestoread:DWORD;
begin
ReadProcessMemory(OPHandle,ptr(Adres),@sonuc,4,bytestoread);
Result:=sonuc;
end;

function AdresYaz(OPHandle,yeni,Adres:integer):integer;export;
var
bytestowrite:dword;
begin
WriteProcessMemory(OPHandle,ptr(adres),@yeni,4,bytestowrite);
end;
exports
AdresOku,
AdresYaz,
HandleBaslik,
HandleSinif;
begin
end.
 
c# için acaba var mı araştırma yaptım bulamadım?
Yorum Bırak

Facebook
Son Yorumlar