2009-05-18

Чтиво

Для себя несколько заметок, чтоб не забыть дочитать, а вообще весьма интересно:

http://phrack.org/issues.html?issue=61&id=14#article
http://phrack.org/issues.html?issue=61&id=13#article
http://phrack.org/issues.html?issue=55&id=12#article

2009-05-10

hki - кейлогер

Отладил наконец-то свой кейлогер. Работает через перехват IRP. В лог-файл (по умолчанию C:\124.txt) пишет коды клавиш, и заголовок активного окна. Тестировался на Windows Vista SP1 и Windows XP Sp2 на двухядерном прцессоре. В комплекте простой парсер лог-файлов, парсер написан на коленке и скорей всего будет передалан, но как-нибудь в другой раз. При написании парсера использовалась часть кода из r0keylog barton'а.

Конечно код далёк от совершенства, но тем-не менее, вот сcылка для скачивания:
http://cid-eea2a7c767291ff9.skydrive.live.com/self.aspx/.Public/hki.rar

2009-05-04

blackhat style

Из исходников migbot'а, 2004-й год...

// migsys, kernel part of m1gB0t, Greg Hoglund, 2004
//
// I got the blackhat style
// my code is evil and elite
// with capitalized guile
// fuckn the welfare vendors
// and their mothefuckin deceit
// hide behind the mask of good-will-defender
// I cut like a file
// slow hone on your vulns
// This aint no fuzz
// This is deeper
// I'm in your states
// like the motherfukn Reaper
// You want something for free?
// pay naught for my pursuit?
// my mission occupation
// gonna put me in refute
// your gonna come along
// cuz this is bigger than you
// its gonna take you by balls
// your paybacks are due

2009-05-02

Пример кода epoll

Очень базовый пример обработки входящих соединений с epoll:

#include <stdio.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/epoll.h>
#include <sys/socket.h>
#include <strings.h>

#define EPOLL_RUN_TIMEOUT 1000
#define MAXEVENTS 50

int got_connect(fd) {
printf("got data\n");
return 0;
}

int main(int argc, char *argv[]){
if(argc<2){
printf("Usage: %s <port>\n",argv[0]);
return -1;
}

int port=atoi(argv[1]);
int epfd = epoll_create(512);
int nfds, cs, i;

struct epoll_event ev, *events;
struct sockaddr_in serv, cli;
int connected_fd;
int listenfd=socket(AF_INET, SOCK_STREAM, 0);

bzero(&serv,sizeof(serv));
serv.sin_family = AF_INET;
serv.sin_addr.s_addr = htonl(INADDR_ANY);
serv.sin_port = htons(port);

bind(listenfd,(struct sockaddr*)&serv,sizeof(serv));
listen(listenfd, 50);

ev.events = EPOLLIN | EPOLLET | EPOLLHUP;
ev.data.fd = listenfd;
epoll_ctl(epfd, EPOLL_CTL_ADD, listenfd, &ev);
int addrlen = sizeof(cli);

while(1){
nfds = epoll_wait(epfd,events,MAXEVENTS,EPOLL_RUN_TIMEOUT);
if(nfds<0){
printf("epoll_wait error\n");
return -1;
}
for (i=0;i<nfds;++i){
if(events[i].data.fd == listenfd){
connected_fd = accept(listenfd, (struct sockaddr *) &cli,&addrlen);
printf("addr: %s\n",inet_ntoa(cli.sin_addr.s_addr));
ev.events = EPOLLIN | EPOLLET;
ev.data.fd = connected_fd;
epoll_ctl(epfd, EPOLL_CTL_ADD, connected_fd, &ev);
}
else{
got_connect(events[i].data.fd);
}
}
}
close(epfd);
return 0;
}

Сцылки по теме:
http://www.kegel.com/c10k.html

http://www.monkey.org/~provos/libevent/
http://www.xmailserver.org/linux-patches/nio-improve.html

Архив