02.11.2011

reverse engineering



  • Безымянный 222304

  • My Top 100

  • Хочу рассказать о том, как я сегодня провел вечер. С пользой для дела и в то же время с отрицательным результатом. Хотя, отрицательный результат - тоже результат :) Итак, обо всем по порядку.
    На днях по аське от моего друга мне пришло сообщение следующего содержания:

    [xxxxxxxx](23:10:07 7/09/2009)
    Ссылка для скачивания файла Frogs.rar
    http://file.qip.ru/file/100122839/beef555a/Frogs.html
    [-- Файл отправлен через file.qip.ru. Подробнее на сайте: http://file.qip.ru --]

    [xxxxxxxx] (23:10:07 7/09/2009)
    :)

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

    Мне стало интересно, можно ли определить, какой новый пароль приписывал вирус сворованной аське. Тогда можно было бы помочь другу вернуть его аккаунт.
    Раздобыв архив с программой-вирусом, я во всеоружии принялся изучать творение безумного гения.
    Заведя для этих целей новый UIN, я начал экспериментировать.
    Программа оказалась флэш-игрушкой со встроенным зловредным кодом. Для начала я запустил самую могучую штуку, которая помогает реверсерам. Имя ей дизассемблер IDA Pro. Произведя поиск срок, содержащихся в экзешнике, и не найдя ничего подозрительного, похожего на пароль, я подумал, что наверняка программа работает с сокетами windows и посылает запросы на асечный сервер login.icq.com (иначе как же она спамит контакт-лист и вообще ворует вашу аську). В теле обнаружилось четыре вызова функции wsock32.send, которая посылает запросы.

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

    00470666    E8 7957FFFF                             CALL <JMP.&wsock32.send>

    При каждой остановке на этой строчке в стеке можно было наблюдать четыре параметра:

    02C5FEF4   000002F8     Socket = 2F8
    02C5FEF8   02C5FF1D     Data = 02C5FF1D
    02C5FEFC   0000000A    DataSize = A (10.)
    02C5FF00   00000000     Flags = 0

    Существенными в данном случае являются второй и третий - адрес в памяти, откуда начинается содержимое запроса, посылаемого на сервер, и размер этого запроса в байтах. Потребовалась посылка пяти сообщений для того, чтобы вирус залогинился в аське. Насколько я мог судить по поведению программы, она ищет пароль для асечного аккаунта напрямую в памяти, а не в каких-то файлах. (пароль для аськи я не сохранял). Дальше я позволял вирусу слать по одному запросу и после каждого пробовал заходить в аську под старым паролем. Таким образом я пытался отловить сообщение, которое содержит в себе информацию о смене пароля. После 10 сообщений мне это надоело и я решил автоматизировать процесс. Воспользовавшись очень полезным плагином OllyScript для OllyDbg, я написал скрипт, который ставил брэйкпоинт на вызов wsock32.send, пускал программу в режиме свободного выполнения и при остановке смотрел параметры, которые передаются в функцию send, считывал нужный кусок памяти с телом запроса и сохранял в файле.

    Выяснилось, что после 33-го запроса уже невозможно зайти в аську под старым паролем. Методом пристального вглядывания в содержимое сохраненных файлов я обнаружил, что 27-е сообщение несет в себе информацию о смене пароля на новый и сам пароль в не зашифрованном виде (!). А 28-е - это отправка информации о сворованной аське на другой UIN (очевидно, человека, который написал этот вирус). Попробовал зайти в аську с этим паролем - он подошел. Теперь оставалось выяснить, генерируется ли этот пароль по UIN'у, или же он постоянный. Оказалось, что все немного хуже. При повторном запуске программы, вирус сгенерировал пароль, отличный от того, что был в первый раз...

    Алгоритм, который генерирует новый пароль, я не осилил. Код, который реализует этот алгоритм, я бы назвал "зубодробительной жопой". Возможно, как-нибудь в другой раз, когда будет побольше времени, я возьмусь за него повторно, и что-нибудь у меня получится... Единственное, что могу сообщить (возможно это поможет брутфорсерам :)), пароль представляет собой восьмизначное число, т.е. содержит только цифры, что значительно уменьшает количество вариантов для перебора.
    Подводя итог, могу сказать, что пострадавшим от вируса рекомендуется воспользоваться функцией восстановления пароля. Выслать на почту, ответить на секретный вопрос и т.п., что там предоставляет для этого icq.com . Ничего более стоящего на ум не приходит.

    P.S.
    <--! Мною было обнаружено, что при повторном запуске этой флэш-игры вирусный код бездействует и не хочет воровать аську! Пришлось воспользоваться утилитой RegMon, которая мне помогла отловить запись в реестре, которую создает программа при первом запуске и наличие которой проверяет при каждом последующем запуске: если запись не существует, то вирус активируется, иначе - нет. Путь к записи следующий:  HKEY_LOCAL_MACHINE\SOFTWARE\started !-->


















  • Безымянный 222304

  • My Top 100