Tribute to HIEW

Навеяно древними воспоминаниями… Проходят года и десятилетия, сменяют друг друга названия операционных систем, но кое-что всё же остаётся неизменным. Среди всего многообразия околохакерского ПО меня всегда удивлял HIEW; непостижимым образом этой консольной программе удаётся бороться со временем и быть популярной даже сегодня. HIEW занял свою нишу и стал основным инструментом промышленного вирусного аналитика. Вам может показаться это странным и неудобным, но использовать HIEW для вирусного анализа — очень эффективно.

Итак, начнём-с, пожалуй.

Задача: выделить и классифицировать вредоносное ПО среди горы исполняемых файлов.

Решение: использовать динамический анализ неудобно, IDA долго (и дорого), вывод — используем HIEW.

Опишем примерный алгоритм экспресс анализа исполняемого файла на вредоносность. Первое, что необходимо сделать — выявить возможное заражение анализируемого объекта файловым вирусом.

Загрузим исполняемый файл в HIEW и посмотрим, в какую секцию указывает точка входа (Enter, F8, F6). Здесь возможно несколько случаев.

Вариант первый. Точка входа указывает куда-то в область заголовка PE-файла. Вариант тривиален и обнаруживается визуальным просмотром файла в текстовом режиме.

Вариант второй. Точка входа указывает на последнюю секцию исполняемого файла. Это тоже очень подозрительно и, скорее всего, свидетельствует о заражении файла. Рассмотрим несколько примеров.

Точка входа имеет следующий вид:

image

Натренированный глаз режет применение инструкции call +5, что очень не характерно для обычного компилятора. Так же интересна строка 0x0048с030, где, вероятно, происходит ручная работа с заголовком PE-файла. Посмотрим на атрибуты секции:

image

Напрашивается очевидный вывод: анализируемый объект заражён файловым вирусом. В данном случае это разновидность вируса Virut.

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

Иногда можно встретить следующую картину:

image

Вердикт очевиден – файл заражён. После байт, оставленных в конце файла для выравнивания компилятором, следует не только осмысленный код, но и сама точка входа.

Сделаем небольшое лирическое отступление от экспресс-анализа. Напрашивается вопрос: можно ли с HIEW исследовать динамически-расшифровывающиеся объекты? На удивление, это часто удаётся сделать. Рассмотрим предыдущий пример с вирусом Virut. Код вируса невелик, местами зашифрован и расположен в конце файла. Немножко полистав дизассемблерный листинг, натыкаемся на это:

image

Здесь нетрудно увидеть простейший цикл расшифровки. Однако в случае статического анализа мы не можем определить, что и с каким ключём тут расшифровывается. Но! Вспомним, что HIEW поддерживает поиск перекрёстних ссылок, наведём курсор на начало цикла расшифровки, нажмём F6 и поищем вызовы интересующего нас участка кода:

image

Очень вероятно, что это и есть код, вызывающий процедуру расшифровки. В этом случае зашифрованный участок находиться по адресу 0x0048c155 ([EAX]), а одно-байтовый ключ находиться по адресу 0x0048c154 ([EAX-1]). Размер блока — 0x12b2 байт.

Чтобы произвести расшифровку, пользователи IDA побежали бы писать скрипт на idc или питоне. В отладчике, вообще, ничего делать не пришлось бы. Пользователи же HIEW используют встроенные средства обработки блоков данных. Опишем требуемый алгоритм шифрования, выделим границы блока в режиме 16-ричного редактора и запустим скрипт.

image

Встроенное средство обработки блоков имеет Intel-подобный синтаксис и позволяет производить несложные преобразования по 8, 16, 32 и 64 бита. В результате расшифровки получим вполне пригодные для анализа данные:

image

Вернёмся снова к экспресс-анализу. Вариант третий. Точка входа указывает туда, куда ей и положено — в секцию кода. Для обнаружения заражения требуется небольшой опыт. Рассмотрим несколько примеров.

image

В глаза бросаются инструкции call +5; pop reg. Данный приём очень характерен при написании базо-независимого кода. Следует отметить, что вместо прямого перехода на тело вируса часто используются инструкции типа push reg; retn либо mov reg, addr; call reg и другие вариации на эту тему. Нормальные же компиляторы обычно так не поступают, по крайней мере, уж не на точке входа, а в каком-нибудь виртуальном классе. Из всего этого можно сделать вывод, что данный экземпляр так же заражён файловым вирусом. В данном случае это — небезызвестный Sality.

Двигаемся дальше. Допустим мы встретили следующий код:

image

Несмотря на то, что точа входа сразу указывает на call и jmp, файл не заражён, и это стандартное начало программы С/C++, скомпилированной Microsoft Visual Studio 2010. Данный пример скорее исключение. Обычно при заражении кодовой секции вредоносный код дописывается либо в её конец (при наличии достаточного количества места), либо делается jmp на вредоносный код прямо с точки входа. Компиляторы же обычно начинают выполнение программы с вызова стандартной функции, имеющей стандартный пролог:

image

Здесь мы видим начало программы, скомпилированной с помощью компилятора Visual Studio C++ 6.0. Точка входа указывает на стандартный пролог, далее следует установка собственного обработчика исключений.

Рассмотрим следующий код:

image

Здесь точка входа указывает на уже известную нам последовательность push addr; retn. Перед нами — Rustock.

После анализа точки входа неплохо произвести просто просмотр секций и оверлеев файла. Иногда встречаются следующие экземпляры:

image

В данном примере, в оверелее, вероятно, записано зашифрованное тело оригинальной программы. Суть механизма «заражения» можно понять из следующего кода:

image

По сути, «вирус» заражает файлы следующим образом: полностью зашифровывает оригинальный исполняемый файл, перемещает данные себе в оверлей и перезаписывает получившимся файлом оригинальную программу. При запуске программа расшифровывает оригинальный файл, записывает его на диск во временную директорию и запускает с оригинальными параметрами командной строки.

На этом вирусный анализ как таковой заканчивается. Обнаружить более сложные заражения за короткое время в режиме промышленного аналитика затруднительно (личное мнение). Далее идёт работа по определению вредоносного функционала самого анализируемого файла.

Различные вымогатели, фейковые антивирусы и т.п. обнаруживаются просто при беглом просмотре файла в текстовом режиме:

image

Поскольку ни для кого не секрет, что в России производиться достаточное количество вредоносного ПО, то возможнось работы HIEW с русскими кодировками из коробки сильно облегчает жизнь вирусному аналитику.

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

image

… можно сделать вывод, что эти данные зашифрованы. Можно ли их статически расшифровать? В данном случае нам повезло, и мы снова ограничимся одним HIEW. Перейдём на начало зашифрованных данных и поищем перекрёстные ссылки:

image

Сразу же находим требуемый цикл расшифровки. Всё, дело почти сделано. Выделяем зашифрованный блок, пишем скрипт:

image

И расшифровываем вредоносниый код:

image

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

Далее по плану идёт определение стандартных троянских программ типа Zeus, SpyEye, Carberp и других. По словам, опытный вирусный аналитик идентифицирует их с первого взгляда (автор же проверить данное заявление не имеет возможности).

В итоге мы можем анализировать и классифицировать экземпляры с практически нереальной скоростью: 1 объект менее чем за 10 минут. Видимо это и стало залогом успеха такой легендарной программы как HIEW.

P.S. Подробное описание HIEW unicornix.spb.ru/docs/prog/heap/hiew.htm

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 23

    +11
    При наличии такого количества онлайн анализаторов, автор мне представляется Гордоном Фрименом. При помощи одной только монтировки он идёт освобождать мир от нашествия злобных хедкрабов.

    Это просто прелестно. Особенно меня радуют слова типа «Тривиальный», «Простой» и тому подобные.
      +14
      Возможно автор и есть тот, кто создает онлайн-анализаторы?
      Вообще говоря, HIEW — действительно потрясающая штука, эквивалента по удобству я так и не нашел. Был biew, он же beye, но не дотягивает, а ныне и вовсе, похоже, помер…
        +6
        Ничего не имею против автора и против Хвью. Я более восхищаюсь его невообразимыми способностями и умением использовать инструменты. В своё время я ходил в универ с 286 лаптопом в 2004 году. Причина была проста — на 286 без проблем запускался MASM и TASM. Туда же были загруженны отладчики. Пока хомячки пытались написать хелловорлд на асме, я дебажил программы, взламывал защиты, перехватывал прерывания и писал драйверы. Короче, в ассемблере я был шустр, как подстреленный медведь. Потом я всё-же пересел на винду и HVIEW с IDA, но, очевидно, я не очень хорошо разобрался с этой областью и забросил это дело. Впилился в стену непонимания на полной скорости. Простенькие COM программы для 386 мне были по зубам, но деббагинг вирусни под виндой с MMX и SEE породил много головной боли.

        Короче, забросил я это дело.

        Хотя, жалею, что забросил.

        И тихо завидую белой пушистой завистью.

        Пойду писать на своих высокоуровневых шарпах. Быстрее, конечно, но не так романтично.
        +5
        Вот, не надо про монтировку, этот лом, он урановый и Фримены не пальцем деланы, так что «онлайн анализатор» труба шатал и это шатание давно поставлено на поток. В общем против лома нет приёма.
        HIEW — вполне себе достаточное средство, а если рука тянется к Оле, а тем более Иде, это уже секс на долго :-)
        +3
        Ну, HIEW не HIEW, но через QView, действующий по тому же принципу, я сумел полностью отучить WarCraft II (патч 1.5) от компакт-диска. Тогда был распространён порезанный 1.3 — скачал патч у Близзарда, хакнул — и — вуаля — теперь можно ставить Аллерию и товарищей на уровни, можно играть в мультиплеер в Дреноре и рубить грибы вместо ёлок. Ну и баги кое-какие поправили — хотя я с ними не сталкивался. Дело было в 1999 или 2000.
          +2
          Аналогично. Где-то в 2000 отучил Devil Inside от диска. При этом в инете тогда патча так и не нашел. Кроме hiew, правда SoftICE еще юзал. Пока пишу, от названий, типа SoftIce воспоминания нахлынули. Я тогда больше программы от дисков отучал и патчил, нежели писал))
          +8
          HIEW в первую очередь полезен тем, что редактирует файлы напрямую, не создавая копий и сохраняя байтовую длину. Например, им очень легко заменить виндузовое 0Dh,0Ah на юниксовое 0Ah. Он и как дизассемблер хорош, много лет назад, когда доков было мало, я учился, например, писать софт под Sound Blaster 16 дизассемблируя соответствующие секции игрушек.

          Мне трудно представить работу без таких привычных утилит как Hiew и Far Manager. Я ничего не могу без них, ни файл скопировать или распаковать, ни на FTP зайти, ни сайт написать на PHP. Люди же, воспитанные на более поздних оконных интерфейсах, иногда, видя Far, говорят мне: «А… Ты опять в этой своей синей табличке...»
            +1
            и сохраняя байтовую длину. Например, им очень легко заменить виндузовое 0Dh,0Ah на юниксовое 0Ah.

            Оговорочка? С помощью Hiew невозможно заменить CR/LF на LF, т.к. длина меняется. :-)
              0
              возможно имеется ввиду нуль-терминированная строка 0Ah,00h
              +1
              Far Manager до сих пор жив, разрабатывается и имеет как х32 так и х64 версии, кстати.
              и прекрасно работает в Windows 8.1
                0
                А в паре с ConEmu — так вообще радует :)
                  0
                  Впервые слышу, если честно.
                  Powershell/RDP/GPO для управления win-зоопарком и Putty для управления линуксами/железками по комп порту как-то с головой хватало.
                    0
                    Прошу прощения, я имел в виду не именно полный упор на ConEmu, а запуск Фара из-под него. А для зоопарков — тут полностью согласен — PS/RDP/putty ;)
              0
              Пустил скупую мужскую слезу.
              Сколько было проведено вечером за криптованием пинча
                +4
                Эх… детство… Hiew, TechHelp, INT 21h, INT 13h… Borland C 3.1

                Давно это было… Спасибо автору за море приятных воспоминаний
                  +3
                  Честно говоря, мне кажется, что и сейчас нет удобнее hex-редактора со встроенным asm/disasm и понималкой форматов файлов.
                  +1
                  Спасибо вам, трибьют удался! Хоть я тоже в основном патчил, но сколь сладостна была эта власть над байтами…
                    +4
                    я лет 5 наверное не запускал сабж, а тут что-то пришлось поковырять. Открыл и… не помню хоткеев. Вдруг ручки сами потянулись… enter, enter, F8, F5…
                      +1
                      Да уж, идея объединить hex редактор и дизассемблер в свое время была гениальной. Сам в свое время много времени провел за Hiew, не один bitcrack был сделан им.
                        +1
                        Замечательная программа, не имеющая альтернатив по удобству (мне иногда, например, Hex Workshop удобней, но реже). Уже и не помню сколько точно ей пользуюсь, до сих пор актуально.
                          +3
                          Постом о HIEW вы мне напомнили одно из моих стенаний на тему «Вот раньше были программисты!».
                          Вспоминаю с теплотой древние времена, когда на компьютерах, в сотни (или тысячи?) раз более медленные, чем нынешние, можно было легко редактировать огромные файлы в редакторах без каких-либо «тормозов».
                          Нынешние же редакторы даже открыть большой файл не могут, куда уж там редактировать. Даже vim, который, казалось бы, сто лет назад написан, на большом файле просто умирает. А если унего включена подсветка синтаксиса, то это вообще ад.

                          Сам помню, как во времена DOS-а выжимал всё из доступных ресурсов, дорожил ими, старался сделать программу максимально устойчивой ко всяким банальным ошибкам типа отсутствия свободного места.

                            +2
                            Есть намного более удобная программа/фреймворк — radare2. У него есть и встроенный хекс редактор, и дизассемблеры (с поддержкой разных архитектур), и скриптование с использованием python, lua, perl, javascript. Вот пример разбора crackme с его помощью — dustri.org/b/defeating-crackme03.html

                            Вот, например, скриншот его визуального режима:
                            image

                              0
                              А есть еще замечательный и бесплатный Biew (http://beye.sourceforge.net/ru/beye.html)
                              Hiew же в свою очередь платный. Был по крайней мере, когда я им пользовался

                              Only users with full accounts can post comments. Log in, please.