EXE PACKING (или инжект и крипт ручками)

Тема в разделе "Статьи", создана пользователем onthar, 11 авг 2008.

  1. onthar
    onthar Продвинутый
    Симпатии:
    224
    EXE PACKING – The Hard Way

    Упаковка екзешников вручную - важная процедура, которая может быть выполнена вполне элементарно..
    Существует много причин для шифрования файлов, например защита программ от изменений, взлома и т.д. Некоторые хеккеры используют это для криптования вириев и троев, для внедрения вредоносного кода в готовые .exe, короче максимально завуалировать свои вредоносные программы, скрипты, коды.

    Еще одно достоинство ручного шифрования-это обход антивирусников или вовсе превращение вредоносного кода в код подписанный, заверенный антивирусом.

    Для начала, точка входа (.text, .date, .rsrc) требует шифрования.
    Но если местоположение сигнатуры вируса известно, требуется зашифровать только вредоносную секцию кода программы, определенные байты.
    Небольшую XOR функцию необходимо закодировать( перенести в код заражаемой программы ), для того чтобы ее можно было шифровать и сохранить в файл.


    После того, как файл был зашифрован, его требуется запустить, и XOR-функция запустится вместе с файлом. Во время запуска программы, шифрованный вредоносный код дешифруется изапускается внутри памяти зараженной программы. Следовательно, Для антивируса запускается не два файла(неопасный экзешник и вредоносный код), а один, безопасный файлик, никак не определяемый антивирусом.
    Что такое XOR функция?
    ​
    XOR, так же известное как Exclusive OR, это побитовый оператор двооичной математики. Оператор XOR возвращает 1 когда значение первого или второго битов равно 1. Так же, оператор XOR возврощает 0, когда ниодного или оба одновременно значения 1-го и 2-го битов равны 1.
    Разъяснить можно этой диаграммой:
    Код:
    1.bit    2.bit    Result      
    F          F         F      
    F          T        T      
    T          F        T      
    T          T        F    
    Оператор XOR используется для сдвига, замены (нулей и единиц) в куске незашифрованного кода для создание шифрованного текста.
    Другими словами, если кусок кода прогнать через XOR дважды, то изменений от исходника не будет, т.е. после шифрования XOR'ом уже зашифрованного XOR'ом кода - код дешифруется до первоначального состояния.

    Код:
    Entry Point  <---
                 jump to encrypt/cave code
    
    Code Cave  <---
                 XOR function encrypt/decrypt
    
    End Cave    <---
    Заменяем точку входа процессом шифрования, внедряем процесс шифрования в стек, затем возвращаем замещенный кусок исходной программы(точку входа в частности), возвращаем изначальный код заражаемой программы, после исполнения вредоносного кода.

    Шифрующий код должен запуститься одновременно с чистым кодом заражаемой проги, что бы в зашифрованном виде сохраниться в файл (дроп).
    Следующий раз зараженная прога при запуске расшифрует этот код.

    Что потребуется:


    • зараженный exe (Трой, вирь...)
    • Ollydbg
    • LordPE

    И так приступим.
    Откройте зараженный файл Ollydbg и скопируйте первые несколько комманд ( на все изменения делать бэкапы в блокнотике) Вставте эти строчки в текстовый редактор.

    Код:
    -=:Entry Code:=-
    
    00401219 >/$ 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
    0040121F  |. 55                          PUSH EBP
    00401220  |. 89E5                     MOV EBP,ESP
    00401222  |. 6A FF                   PUSH -1
    Теперь в конце файла ищите DB 00 в стеке. Если эта секция не защищена от записи, то все хорошо, не придется менять допуски к секции.

    Код:
    -=:Cave Code:=-
    
    0040E4FD     0000           ADD BYTE PTR DS:[EAX],AL
    0040E4FF     0000           ADD BYTE PTR DS:[EAX],AL
    0040E501     0000           ADD BYTE PTR DS:[EAX],AL
    0040E503     0000           ADD BYTE PTR DS:[EAX],AL
    Если появилась ошибка-значит эта секция защищена и придется модифицировать PE секцию, чтобы получить доступ к редакттированию.

    Это можно легко сделать с помощью LordPE (меняет свойства секций)

    Открываем LordPE, загружаем наш файл, тыкаем кнопку Section. После этого правой кнопкой data section, выбераем свойства. Убираем\ставим голочки-в общем делаем файл доступным к изменению и запуску (writeable and executable). Этот файл готов.

    Следущий алгоритм используется для XOR-шифрования секции. Фактически это банальное шифрование каждого байта из data section (@0040129c) с нашим ключем (0f). Цикл остановится в конце data section (@0040E46C)

    Код:
    Encryption Routine
    mov eax,0040129c
    xor byte [eax],0f
    inc eax
    cmp eax,0040E46C
    jle [xor address]
    
    Deleted Call
    00401219 >/$ 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
    0040121F  |. 55                          PUSH EBP
    
    Jump back to application flow
    00401219 >   E9 E2D20000    JMP finish1t.0040E500
    0040121E     90             NOP
    
    Финальный код должен выглядеть примерно так:

    Код:
    XOR Loop + Deleted Call + Jump back to application flow.
    
    Code Cave:
    0040E500     B8 9C124000    MOV EAX,finish1t.0040129C               ;  Entry address
    0040E505     8030 0F           XOR BYTE PTR DS:[EAX],0F
    0040E508     0                     INC EAX
    0040E509   3D  6CE44000   CMP EAX,<JMP.&CRTDLL.wctomb>;  Entry address
    0040E50E   7E F5               JLE SHORT finish1t.0040E505
    0040E510   64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
    0040E516   E9 042DFFFF    JMP finish1t.0040121F
    
    Теперь делаем break point в конце цикла, строчка 0040e510, и выполняем код. Как только выполнение остановилось, сохраняем файл и выходим из OllyDbg
    Код:
    00401219 >/$ 64:A1 00000000 JMP finish1t. 0040E500
    (c)onthar, 08.2008. по мотивам:
    EXE PACKING – The Hard Way
    Jacky Altal 16/06/2006​
     
    Последнее редактирование: 23 ноя 2010
    11 авг 2008
    2 пользователям это понравилось.
Загрузка...