herm1t LIVE!ng room - VDSO [entries|archive|friends|userinfo]
herm1t

[ website | twilight corner in the herm1t's cave ]
[ userinfo | ljr userinfo ]
[ archive | journal archive ]

VDSO [Apr. 11th, 2007|06:17 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
[Current Mood | amused]

CD80, да, CD80... скушно. не забыть, где-нибудь заюзать новую фишку:
_start:         push    esp
                call    get_vsyscall
                xchg    ebp,eax

                mov     eax, 20
                call    ebp
                
                mov     eax, 1
                call    ebp

get_vsyscall:   push    esi
                push    ecx
                mov     eax, [esp + 12]         ; orig_esp
                mov     esi, [eax]              ; argc
                lea     eax, [eax + 4]          ; argv
                lea     esi, [eax + esi*4 + 4]  ; envp
                cld
                ; skip  environment
.skipenv:       lodsd
                or      eax, eax
                jnz     .skipenv
                ; look through the aux vector
.nextaux:       lodsd
                mov     ecx,eax
                or      eax,eax
                jz      .notfound
                lodsd
                cmp     ecx, 32
                jne     .nextaux
.notfound:      pop     ecx
                pop     esi
                ret

а потом, еще чего-нибудь, эдакого:
                push    0x41
                push    0x20
                push    datasegv
                push    0x00
                mov     eax, 123
                mov     ebx, 1
                mov     ecx, esp
                mov     edx, 16
                call    ebp
                add     esp, 16
                push    7
                pop     gs
                mov     [gs:4], ebp
                ...
                call    [gs:4]

чтобы, значит, не заскучать.
LinkLeave a comment

Comments:
From:[info]cqwerty@lj
Date:April 11th, 2007 - 10:38 am

вопрос человека в linux'ax вообще не плавающего ;)

(Link)
А какое ядро для этого надо? 2.6.х+?
Или это чисто usermod'ная фича?
(А можно вообще сделать универсальный кол, что бы и под Linux'aми и под FreeBSD работал ;)
From:[info]t1mreh@lj
Date:April 11th, 2007 - 10:55 am

Re: вопрос человека в linux'ax вообще не плавающего ;)

(Link)
2.5.5?+ там много чего менялось и фиксилось, к примеру sysctl -w kernel.vdso=1 на 2.6.9, приводил к крешу, на 2.6.12 уже нормально. правда, у меня ядра патченные-перепатченные, так что не сразу и разберешься с версиями...

по поводу более старых ядер, выход прост - mov [old_syscall], 0x90c380cd / call get_vsyscall / or eax,eax / jnz .gotit / mov eax, old_syscall / .gotit: ...

а универсальный сискол, тоже ничего страшного, на этапе заражения сохраняем EI_OSABI жертвы (ну, не совсем так Ж;-), но где-то рядом) в тушке, а дальше таблицы, таблицы... можно и в рантайме, но муторно.