nie jestem coraz jak ten kod robi to, co robi:Shellcode w C - Co to znaczy?
char shellcode[] = "\xbb\x00\x00\x00\x00"
"\xb8\x01\x00\x00\x00"
"\xcd\x80";
int main()
{
int *ret;
ret = (int *)&ret + 2;
(*ret) = (int)shellcode;
}
Ok, wiem:
int *ret;
ustawia wskaźnik na int. oraz:
ret = (int *)&ret + 2;
ustawia adres ret i 2 bajty (myślę).
Ale ja nie rozumiem, co to znaczy:
(int *)&ret
wiem co &ret
środki ale nie to, co oznacza (int *)&ret
. Co więcej, w jaki sposób wykonuje się kod powłoki, przypisując wartość shellcode
do ret
?
UPDATE: Jaka jest różnica pomiędzy:
(int *)&ret + 2
oraz:
&ret + 2
Ciekawe, dlaczego tak wiele pochlebstw ... shellcode wygląda całkiem nieszkodliwie. – FatalError