Programın bellekte hangi adreslere veri yazdığını öğrenme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Programın bellekte hangi adreslere veri yazdığını öğrenme
Merhaba,
Sistemde çalışan herhangi bir programın, bellekte hangi adreslere veri yazdığını öğrenebilirmiyiz?
ReadProcessMemory apisi ile bellekte (ram) istediğimiz bir adresteki veriyi okuyabiliyoruz, fakat benim amacım, sistemde çalışan herhangi bir program hangi adresleri kullanıyor onu öğrenmek ki sadece onun yazdığı verileri okuyabileyim.
Sistemde çalışan herhangi bir programın, bellekte hangi adreslere veri yazdığını öğrenebilirmiyiz?
ReadProcessMemory apisi ile bellekte (ram) istediğimiz bir adresteki veriyi okuyabiliyoruz, fakat benim amacım, sistemde çalışan herhangi bir program hangi adresleri kullanıyor onu öğrenmek ki sadece onun yazdığı verileri okuyabileyim.
Re: Programın bellekte hangi adreslere veri yazdığını öğrenm
O fonksiyonla istediğin adresteki veriyi değil, istediğin prosesin bellek alanındaki verileri okuyorsun.
"Reads data from an area of memory in a specified process." : Belirlenmiş bir prosesin hafıza bölgesinden veri okur.
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Muhtemelen aradığın şu:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
"Reads data from an area of memory in a specified process." : Belirlenmiş bir prosesin hafıza bölgesinden veri okur.
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Muhtemelen aradığın şu:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Re: Programın bellekte hangi adreslere veri yazdığını öğrenm
Merhaba,
o zaman aslında aradığım şey ReadProcessMemory, zaten bende istediğim bir programın bellek alanındaki verileri okumak istiyorum, fakat seçilen program hangi bellek alanlarını yada alanını kullanıyor onu nasıl öğrenicem? sanırım doğru soru bu olucaktı.
o zaman aslında aradığım şey ReadProcessMemory, zaten bende istediğim bir programın bellek alanındaki verileri okumak istiyorum, fakat seçilen program hangi bellek alanlarını yada alanını kullanıyor onu nasıl öğrenicem? sanırım doğru soru bu olucaktı.
Re: Programın bellekte hangi adreslere veri yazdığını öğrenm
Nejat şuraya bir bakmanı isterim. Nette gördüğüm örneklerin bazılarında handle numarasını bildiğin bir uygulamanın bellekteki adreslerini görebiliyorlar. Fikir olması açısından buraya bir göz atmanı tavsiye ederim..http://www.buraktungut.com/delphi-ile-b ... a-ve-yazma
Ek olarak şöyle birşey gördüm lazım olabilir.(Bildiğim kadarıyla aşağıda da dikkat edersen windows her programa pid adresi verir görev yöneticisinde CTRL_DEL tuşları ile programına verilen pid numarasını görebilirsin. Bu numara ilede ramde arayabilir kullandığı adresi görebilirsin)
Ek olarak şöyle birşey gördüm lazım olabilir.(Bildiğim kadarıyla aşağıda da dikkat edersen windows her programa pid adresi verir görev yöneticisinde CTRL_DEL tuşları ile programına verilen pid numarasını görebilirsin. Bu numara ilede ramde arayabilir kullandığı adresi görebilirsin)
Kod: Tümünü seç
function MemOku(WindowTitle:string;Adress:integer;BytesToRe ad:dword):integer; //programın pencere basligi, bellek adresi ve kac byte okunacagini bildirin.
//ama fonksiyon burada integer deger dondurur, degisiklikle string deger de donderebilirsin
var
Namebuf : dword;
WindowName , ProcessId : integer;
HandleWindow : cardinal;
begin
WindowName := FindWindow(nil, pchar(WindowTitle));
Application.ProcessMessages;
If WindowName = 0 then
begin
MessageDlg('Program açık degil', mterror,[mbOK],0); //
Result:=0;
exit;
end;
GetWindowThreadProcessId(WindowName,@ProcessId);
HandleWindow := OpenProcess(PROCESS_VM_READ,False,ProcessId);
ReadProcessMemory(HandleWindow, ptr(Adress), @Namebuf ,8,BytesToRead);
result:=Namebuf;
closehandle(HandleWindow);
end;
Re: Programın bellekte hangi adreslere veri yazdığını öğrenm
Evet ReadProcessMemory'la sistemin prosese ayırdığı bellek alanından veri okuyabilirsin. Delphi ile çalışıyorsan nasıl yapılır bilmiyorum, Lord_Ares'in bağlantısı işe yarar görünüyor.esistem yazdı:Merhaba,
o zaman aslında aradığım şey ReadProcessMemory, zaten bende istediğim bir programın bellek alanındaki verileri okumak istiyorum, fakat seçilen program hangi bellek alanlarını yada alanını kullanıyor onu nasıl öğrenicem? sanırım doğru soru bu olucaktı.
Re: Programın bellekte hangi adreslere veri yazdığını öğrenm
Makale olarak anlatımlar mevcut.Debugger kullanımı, memory dump, adres kontrolü, context yapısı...
viewtopic.php?f=19&t=28441&p=157671#p157671
viewtopic.php?f=19&t=27060&p=151241#p151241
viewtopic.php?f=19&t=27061&p=151242#p151242
viewtopic.php?f=19&t=28441&p=157671#p157671
viewtopic.php?f=19&t=27060&p=151241#p151241
viewtopic.php?f=19&t=27061&p=151242#p151242
Ayakkabıyı sefaletten
Çok sonraları tanıdım
Öyle ufuklarda mı olurmuş Allah'ım
Giyer giyer koşardım
Toprağın dostluğundan
Oyuncaklar yaptım çamurdan
Tenimin rengini aldım topraktan
Sen bakma esmerliğim sonradan...
http://www.tcct.us
Re: Programın bellekte hangi adreslere veri yazdığını öğrenm
quadr verdiğin videoları izledim, mantık hep aynı, programın kırılması sadece doğru kontrole müdehale ile mümkün.
Yalnız aklıma şu geldi.
hack yad crack konularında pek bilgi sahibi değilim ama anladığım kadarı ile yazdığımız bir program çalıştırıldığında bellekte hep aynı yerleri kullanıyor (Doğrumudur?).
Eğer öyleyse, program her çalıştırıldığında farklı bellek alanını (farklı adresleri) kullanmasını sağlasak kırılmasını engellemiş olmazmıyız?
Mesela verdiğin 2. videoda tvc nin kırılmasında, bellekteki belli adreslerdeki je'leri NOP layıp kontrolu aşmayı sağlıyorsun, önceki satırda yazdığım gibi program her açıldığında farklı adreslerde bu kontrolleri yapsa programı kıramazsın (mıdır acaba?).
Bu arada readprocessmemory benim işimi görecek kod, orası tamam, fakat ben programın o anda hangi bellek adresinden hangi bellek adresine kadar kullandığını nasıl anlıcam? Bunun bir yolu varmıdır?
Yalnız aklıma şu geldi.
hack yad crack konularında pek bilgi sahibi değilim ama anladığım kadarı ile yazdığımız bir program çalıştırıldığında bellekte hep aynı yerleri kullanıyor (Doğrumudur?).
Eğer öyleyse, program her çalıştırıldığında farklı bellek alanını (farklı adresleri) kullanmasını sağlasak kırılmasını engellemiş olmazmıyız?
Mesela verdiğin 2. videoda tvc nin kırılmasında, bellekteki belli adreslerdeki je'leri NOP layıp kontrolu aşmayı sağlıyorsun, önceki satırda yazdığım gibi program her açıldığında farklı adreslerde bu kontrolleri yapsa programı kıramazsın (mıdır acaba?).
Bu arada readprocessmemory benim işimi görecek kod, orası tamam, fakat ben programın o anda hangi bellek adresinden hangi bellek adresine kadar kullandığını nasıl anlıcam? Bunun bir yolu varmıdır?
Re: Programın bellekte hangi adreslere veri yazdığını öğrenm
PE'ler varsayılan bir base adress le derlenirler, ancak başka bir proses daha bu base adresi sistemde almış olabileceği için işletim sistemi PE'nin base adresinde değişiklik yapar. Tabi bunu PE üzerinde değil kendi wrapper'inin veritabanında gerçekleştirir. Yani program tüm makinalarda her zaman aynı base address'den başlamayabilir, ancak bir makinada bir kere çalıştığında muhtemelen hep aynı base adress'e şutlanır. Burada kritik nokta base address'in PE'lerde default gelmesi ama sistemin duruma göre rebase yapabilmesi...esistem yazdı: hack yad crack konularında pek bilgi sahibi değilim ama anladığım kadarı ile yazdığımız bir program çalıştırıldığında bellekte hep aynı yerleri kullanıyor (Doğrumudur?).
Eğer öyleyse, program her çalıştırıldığında farklı bellek alanını (farklı adresleri) kullanmasını sağlasak kırılmasını engellemiş olmazmıyız?
Mesela verdiğin 2. videoda tvc nin kırılmasında, bellekteki belli adreslerdeki je'leri NOP layıp kontrolu aşmayı sağlıyorsun, önceki satırda yazdığım gibi program her açıldığında farklı adreslerde bu kontrolleri yapsa programı kıramazsın (mıdır acaba?).
Bu arada readprocessmemory benim işimi görecek kod, orası tamam, fakat ben programın o anda hangi bellek adresinden hangi bellek adresine kadar kullandığını nasıl anlıcam? Bunun bir yolu varmıdır?
readprocessmemory ile zaten sistemin o proses için ayırdığı sanal hafıza alanına düşüyorsun. Yani senin fonksiyondan aldığın blok tümüyle prosesin bloğudur.
Re: Programın bellekte hangi adreslere veri yazdığını öğrenm
işte benimde demek istediğim odur, programda öyle bir kod yazmalı ki her başladığında base adresi değiştirebilsin, böylece crack işlemi mümkün olmayacaktır (en azından jump lara müdehale edilemeyecektir). Böyle bi kod mümkün değilmidir?
bu arada readprocessmemory ile alakalı her defasında 1024 byte okuyan bir örnek paylaşmanız mümkünmüdür ?
bu arada readprocessmemory ile alakalı her defasında 1024 byte okuyan bir örnek paylaşmanız mümkünmüdür ?
Re: Programın bellekte hangi adreslere veri yazdığını öğrenm
Tekrar selam,
Programın kullandığı bellek alanını okumayı sonunda başardım, test için bir proje hazırlayıp onun bellek alanını okuttum, proje 390 KB civarı, okunan alan 3,9 MB civarı, programlar dehşet bellek alanı harcıyor onuda öğrenmiş oldum Zira asıl okutmak istediğim programın bellek alanını okuyunca bu işten vazgeçtim, chrome de çalışan bir flash dosyanın bellek alanını okumak için yapmak istemiştim fakat okutunca 400 MB civarı veri geldi, buda bana yetti
Programın kullandığı bellek alanını okumayı sonunda başardım, test için bir proje hazırlayıp onun bellek alanını okuttum, proje 390 KB civarı, okunan alan 3,9 MB civarı, programlar dehşet bellek alanı harcıyor onuda öğrenmiş oldum Zira asıl okutmak istediğim programın bellek alanını okuyunca bu işten vazgeçtim, chrome de çalışan bir flash dosyanın bellek alanını okumak için yapmak istemiştim fakat okutunca 400 MB civarı veri geldi, buda bana yetti