Bulaşmaması için neden yok görünüyor.
Ne dersiniz?
hemde nasıl :) daha dün virüs programım silmişti bi tanesini
Evet şimdi virüslü laptopta çalıştırdığım programın ardından taratma yaptım dll'e girmiş bir tane.
virüsler exe, com, dll, ocx, pif, scr uzantılı dosyaları çok severeler.
bat ve vbs uzantılı dosyalar zarlı amaçla kullanılabilir
Tahminim bir process tarafından çağırılabildiği sürece her yerde olabilirler.
Bir jpeg içine gömüp virüs exesinden jpeg içindeki veriyi RAMe atıp oradan yürütebilir.
exe virüs olarak algılanmaz çünkü yaptığı şey dosya okumak, ram okumak yazmak ve ramden fonksiyon çağırıp çalıştırmak.
Ama asıl işi yapacak olan kod her yerde olabilir.
O zaman virüs progamları işletim siteminden yetkiyi nasıl alıyorlar.
Mesela ramda kod yazdığın bir alana program counteri nasıl yönlendiriyorsun.
Ya da program alanında işe yaramayan bir fonksiyonun kapladığı ramı silip oraya nasıl yeni kod yerleştiriyorsun?
Denediğimi hatırlamıyorum ama bu tip işlemler koruma altında diye hatırlıyorum. Şu meşhur hoop iznin olmayan bir alana erişiyorsun tarzı hata mesajları almıyormuyuz?
Delphide bir deneme yapıp sonucu yazarım.
Yetki habersiz kullanıcıdan geliyor hocam.
"Bedava_Mp3_Indir_Dinle.exe yönetici hakları talep ediyor."
Ya da "XXX 3 sürücünüzün güncel olmadığını tespit etti. Hepsinin güncellemek ister misiniz?"
Bu gibi birçok habersiz yetkilendirme sayesinde birçok işler yürütülüyor.
Yürütme için process kendine ayrılan addres uzayından seçtiği bir konuma kodları kopyalıyor ve oraya bir func pointer atayıp çağırabiliyor.
Bir örnek varmı?
Mesela
Kod yazarken topla adında bir fonksiyon yazayım. Boyunun 100 byte olduğunu varsayalım.
Bos adında bir fonksiyon daha yazayım bunun da boyu 256 byte olsun.
Daha sonra program çalıştığında Topla fonksiyonunun kodlarını Bos fonksiyonun kodları üzerine yazayım. (Bos fonksiyonunu ezeyim)
Ardından bos fonksiyonunu çağırayım. Böylece bos fonksiyonu toplama yapacaktır.
Buna bir örnek kod bulabilirmiyiz?
Ben yazarsam hata kodu ile karşılaşırım.
@z: Tabii ki yapabilirsin hatta çok daha karizmatik şeylerde yapabilirsin: Ör: Kernel'de shared bir space alıp içinde IO'u kontrol eden minik bir fonksiyoncuk eklersin; Tüm process'ler seni kullanmak zorunda kalır.
Hatta CRC'lere karşı olarakta; programların kendi memory space'lerini okuduklarında orjinal hallerini görmelerini sağlayabilirsin.
Bunlar DOS zamanında çok yapılıyordu. Sonra virus olayı bitii... şimdi script kiddy'lerin yazdığı aptal malware'ler "moda"
bir aralar sahte services.exe olayı yaygındı. orjinal olanın ile çakma olanı registir vb de yer değiştir. yorlar windows hu çakma servile başladığı için hiç bir program temiz kalmamıyordu.
Ben sadece yukarıda yazdığım örneği nasıl yaparım bilsem kafii.
Alıntı yapılan: z - 03 Haziran 2015, 20:01:56
Ben sadece yukarıda yazdığım örneği nasıl yaparım bilsem kafii.
http://stackoverflow.com/questions/2019923/executing-machine-code-in-memory (http://stackoverflow.com/questions/2019923/executing-machine-code-in-memory)
sonlara doğru bir yerlerde hocam.
Bu arada çalışan EXE/DLL gibi dosyalara erişebiliyorsun. Sadece uygun şekilde açmaya çalışman gerekli.
Nasıl yapıyoruz? Çalışan program diskten kendisini okuyabilir mi mesela?
http://nitroflare.com/view/59E08B2CBB186C7/Test.zip (http://nitroflare.com/view/59E08B2CBB186C7/Test.zip)
Kod tam olarak dediğini yapıyor. 2 kex MyFunction1'i çağırıyor. Fakat 2.sinde MyFunction2, 1'in üzerine yazıldığı için 2 çalışmış oluyor.
ANCAK ! 2'nin yazım tekniği olarak 1'den farklı olduğuna dikkat edin.
Hocam RAM den çalıştırma örneği:
/*
============================================================================
Name : ExecutionDynamic.c
Author : Fatih YAZICI
Version :
Copyright :
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
unsigned char * myCode asm("myCode");
unsigned int result asm("myResult");
int main(void) {
int dummy;
myCode = malloc(100);
memset(myCode, 0xc3, 100);
myCode[0] = 0x83; // add
myCode[1] = 0xC0; // eax,
myCode[2] = 0x21; // 33
myCode[3] = 0xC3; // ret
VirtualProtect(myCode, 100, PAGE_EXECUTE | PAGE_READWRITE, &dummy);
__asm__("mov $23, %eax");
__asm__("leal myCode, %ebx");
__asm__("call (%ebx)");
__asm__("mov %eax, myResult");
printf("sonuc (23 + 33) = %d", result);
return EXIT_SUCCESS;
}
Executable:
https://drive.google.com/file/d/0ByIscC6i2OS-bndoM2hWdjd5c00/view?usp=sharing (https://drive.google.com/file/d/0ByIscC6i2OS-bndoM2hWdjd5c00/view?usp=sharing)
Not: Programın sonuna bekleme koymamışım. Komut satırından çalıştırın.