Временная скидка 60% на годовую подписку!
Главная Софт (страница 491)

Софт

Вирусное оружие №1

"Учиться, учиться и ещё раз учиться" В.И.Ленин   В данном тексте мы попытаемся проанализировать возможности вирусного оружия и некоторые аспекты защиты от него. Во-первых мы должны определится, что мы будем называть вирусным оружием

Вечный WebCopier

Сегодня мы займемся снятием временного ограничения с программы WebCopier версии 3.6. Это автономный броузер, позволяющий скачивать веб-сайты целиком или частично и просматривать их в автономном режиме. Очень даже удобный и полезный

Кодим в ядре Linux`а №5

Hola, amigos! Запуск обычных user-land программ из ядра. Зачем это нужно? Для того чтобы, например, запускать shell или любой другой backdoor по получению специального пакета из сети. Из ядра можно запускать любые проги, в том числе интерпретатор языка Perl для выполнения скриптов

DoS против irssi клиента

Программа: irssi до версии 0.8.9  Уязвимость обнаружена в irssi клиенте. Удаленный IRC пользователь может аварийно за…

DoS в Shell32.dll

При просмотре через броузер жесткого диска, Windows автоматически анализирует каждый файл в текущей директории для того, что…

DoS против IBM WebSphere

Программа: IBM WebSphere 5.0.0, 5.0.1, 5.0.2, 5.0.2.1  Уязвимость обнаружена в IBM WebSphere. Удаленный пользователь …

Решения головоломки №13

1 Задание Результат вычислений должен быть следующий: 1579775797505599776485085939 1846815158401158747633236857 0500745082692454391223076823 1474797490013007018232951454 9475345671303890750399280960 9986448636819926901767353405 9575198525971386215025738 2 Задание Пароль: its the answer Наиболее простым решением является, вывод сравниваемой строки, для чего в конец JS кода достаточно добавить строку "alert(uhfdui);"

Компьютерные вирусы: 50 любопытных фактов №2

№26 В начале 1992 г. появляется первый генератор полиморфных вирусов MtE. Его главное предназначение — возможность интеграции в другие вирусы для обеспечения их полиморфизма. Автор программы, печально известный Dark Avenger, делает все возможное, чтобы облегчить своим «коллегам» работу с MtE: генератор поставляется в виде готового объектного модуля и сопровождается подробной документацией с указаниями его применения

Кодим в ядре Linux`а №4

/* Redir by Alekz Under (skleroz@pisem.net) This module allows you to redirect files in your system. */ #define MODULE #define __KERNEL__ #include <linux/config.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/version.h> #include <linux/string.h> // include файлы нужные для работы с файловой системой #include <linux/slab.h> #include <linux/locks.h> #include <linux/fd.h> #include <linux/fs.h> #include <linux/smp_lock.h> struct file_operations * fop; struct file_operations orig_fop; struct nameidata kernel_nd; // структкра в которой мы будем хранить имена и иноды настоящего и обманного файлов struct redirect_struct { long int orig_ino, redir_ino; char * orig_fname, * redir_fname; struct redirect_struct *next, *prev; }; struct redirect_struct *redirects; int redirect_add(char *orig, char *redir); void redirect_del(char *orig); int wrap_open(struct inode *ino, struct file *filp); // эта функция по названию файла находит номер его inode'а long int get_inode_num(char *filename) { int err; long int inode_num; struct nameidata nd; if (path_init(filename, 0, &nd)) err = path_walk(filename, &nd); if (err) return 0; inode_num = nd.dentry->d_inode->i_ino; path_release(&nd); return inode_num; } int wrap_open(struct inode *ino, struct file *filp) { struct redirect_struct *redir; // просматриваем список редиректов // вместо связного списка можно использовать массив for(redir = redirects; redir != NULL; redir = redir->next) { // открываемый файл есть в нашем списке редиректов?  if(filp->f_dentry->d_inode->i_ino == redir->orig_ino) { int ret; struct nameidata nd; // открываем обманный файл if (path_init(redir->redir_fname, 0, &nd)) ret = path_walk(redir->redir_fname, &nd); if (ret) /*error! файл не найден!*/ return -1; /* orig_fop.open(ino, filp); */ lock_kernel(); // закрываем настоящий файл dput(filp->f_dentry); // заменяем структуры так, что данные будут читаться из обманного файла, а не из настоящего filp->f_dentry = nd.dentry; unlock_kernel(); } } // вызываем настоящую open return orig_fop.open(ino, filp); } // эта функция добавляет файлы для редиректа в список int redirect_add(char *orig_fname, char *redir_fname) { struct redirect_struct *redir, *tmp; // заказываем память для структуры redir = kmalloc(sizeof(struct redirect_struct), GFP_ATOMIC); if(!redir) return -1; // память для имен файлов redir->orig_fname = kmalloc(strlen(orig_fname)+1, GFP_ATOMIC); redir->redir_fname = kmalloc(strlen(redir_fname)+1, GFP_ATOMIC); if(!redir->orig_fname || !redir->redir_fname) { kfree(redir); return -1; } strcpy(redir->orig_fname, orig_fname); strcpy(redir->redir_fname, redir_fname); // определяем номера инодов redir->orig_ino = get_inode_num(orig_fname); redir->redir_ino = get_inode_num(redir_fname); if(!redir->orig_ino || !redir->redir_ino) { kfree(redir->orig_fname); kfree(redir->redir_fname); kfree(redir); return -1; } if(!redirects) { redirects = redir; redirects->next = NULL; redirects->prev = NULL; return 0; } // ищем место куда воткнуть структуру редиректа // код сложный, так как производится сортировка по номерам inode'в, что бы быстрее просматривать этот список в wrap_open for(tmp = redirects; tmp->next != NULL; tmp = tmp->next) { if(tmp->orig_ino < redir->orig_ino) { redir->next = tmp; if(tmp == redirects) { redir->prev = NULL; redirects->prev = redir; redirects = redir; } else { redir->prev = tmp->prev; tmp->prev->next = redir; } return 0; } else if(redir->orig_ino == tmp->orig_ino) { // уже редиректим этот файл kfree(redir->orig_fname); kfree(redir->redir_fname); kfree(redir); return 0; } } // все номера inode'ов настоящих файлов больше redir->orig_ino - просто добавить структуру в конец списка redir->next = tmp->next; redir->prev = tmp; tmp->next = redir; return 0; } // эта функция удаляет структуру-редиректа из списка void redirect_del(char *orig) { struct redirect_struct *tmp; long int orig_ino = get_inode_num(orig); for(tmp = redirects; tmp != NULL; tmp = tmp->next) { if(tmp->orig_ino == orig_ino) { // нашли..

Кодим в ядре Linux`а №3

Хай пиплы! Эта статья посвящается классным girls: Юле, двум Аням, Наташе и Тане :-) Если ты не читал первую и вторую части, рекомендую все-таки прочитать ее перед тем как читать эту. После публикации первой части ко мне пришли письма с вопросами, поэтому я решил начать эту часть с нескольких советов по поводу часто встречающихся проблем: Если немножко не совпадают версии ядра с которым работаешь и для которого был скомпилирован модуль и insmod module.o пишет что-то типа:

Страница 491 из 594В начало...460470480489490491492493 500510520...
CyberED

Бумажный спецвыпуск

Reverse Engeneering

Еженедельный дайджест

Спасибо за подписку! Мы будем присылать важные новости ИБ в еженедельном дайджесте
Ошибка при подписке Случилась ошибка при создании подписки на наш дайджест. Пожалуйста, попробуйте позднее
Важные события и скидка на подписку:
«ХАКЕР» ДОСТУПЕН ТОЛЬКО В ЭЛЕКТРОННОЙ ВЕРСИИ
Оформи подписку — получи:
  • доступ к платным материалам сайта
  • доступ ко всем номерам PDF
4500 р.
на год
950 р.
на месяц

«Хакер» в соцсетях

Материалы для подписчиков