Известный специалист по информационной безопасности Брайан Крэбс открыто заявил о своей нетрадиционной ориентации. Пруф:
https://exploit.in/forum/pda/index.php/t78524.html
Часть 1.
Раслабьтесь, это ссылка всего лишь для того чтобы эффектно начать обзор.
Реверсинг занятие интересное, интригующее но в большинстве случаев утомительное и долгое. Но иногда проскакивают образцы
малвари разбирая которые на лице невольно возникает улыбка перерастающая в истерический смех.
Примерно такой сэмпл попался мне на кухню. Имя ему Win32/Dyzap.A. Представляет собой зевсоподнобое семейство неся на борту
формграббер, инжектор, внц модуль и прочие мелкие радости заливщиков. Криптованный представляет собой .scr файл (скринсейвер) с хэшем c2d73485095efdbd7ab625e469affb11. Вес 241 кб, запомните это число. Имеет 5 секций (криптовщик хорошо постарался).
Как подсказывает женская статья http://lover.ru/psychology/personality/Gla..._soblaznitelja/ многие парни не инициативны. Скажем нет бабской ереси и будем главным инициатором загрузки файла в отладчик. После загрузки мы видим, что
стаб криптора хитер, умен и лихо притворяется обычным файлом от visual studio. Что ж, инстинктивно ищем функцию WinMain. Кстати, есть замечательный плагин для OllyDbg - OllyMapConv. Суть - грузим файл в IDA, генерируем с пмощью него map файл и грузим этот файл в отладчик через этот плагин. Результат - функции получают имена распознанный дизассемблером.
Переходим по функции и нас ждет настолько скучный код, что игра Бразилии покажется интереснее. Что ж обычный просмотр функций не дал должного результата, поэтому перейдем к более агресивным методам распаковки.
Прежде чем как перейти к этому пункту, немного лирики о работе крипторов: исходный файл преобразуется (???) сжимается (???). При запуске стаб грузит в память исходный файл, решает все вопросы связанные с корректоной работой pe, а дальше не интересно. Для нас самое важное здесь - загрузка образа в память. Соответственно, отладчик должен уловить этот момент. Возвращаемся в отладчик и ставим брейкпоинты на api с работой памятью. VirtuallAlloc. Что говоришь маленький мальчиК: лучше ставить на Zw/Nt заглушки? Конечно ты прав, но так как я уже отреверсил сие чудо, то можем спокойно обойтись VirtualAlloc.
Ставим брейкпойнты на api: VirtualAlloc, VirtualProtect, MapViewOfFile. Попивая кофе, спокойно нажимаем на F9 (запуск файла, мы же работаем в виртуалке, да?). И сразу же ловим вызов VirtualProtect c флагом PAGE_EXECUTE_READWRITE.
дабы узнать, кто вызвал ее давим окоченевшими пальцами (+18, а на улице лето) Ctrl+F9, F8 и прямиком попадаем на место вызова аки бравый полицейский после реформы. Но ничего интересного нет. Давим дальше F9. Ловим вызов VirtualAlloc. Чтобы посмотреть, что находится в выделенной памяти (пока там пусто), переходим к окну регистров, выбираем регистр EAX - правая кнопка - Follow in Dump. Програма зря памяти выделять не станет и поэтому надо проконтролировать, что туда будет скопировано. Переходим к окну дампа памяти: выбираем первый байт - правая кнопка - breakpoint - memory, on access. Это значит, брейкпойнт сработает при попытке доступа к участку памяти.
Что ж верим мне на слово и давим F9. И ловим удачу: код останавливаетс на инструкциях
REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] -
на простом человеческом - заполнить память (???). Дабы не утомлять вас я пропущу цикл телодвижений связанные с повтором вышесказанных слов. И так, несколько раз повторив, наконец то в окне регистров видим, что заметное. Присмотревшись, вытираем слезу счастья (мужики не плачут, Хатико не в счет), видим указатель на структуру PE.
Далее следует скучный и пропущенный обзор связанный с распаковкой файла.
Распаковав файл, грузим его в дизассемблер. Распакованный файл весит порядком выше одного мегабайта, ловим себя на мысли, что то он до хрена весит. Окрестности точки входа не предвещают беды, разве что автор малвари был патриотом Украины
Идем дальше по дизассемблеру. Видим обычный код копирования себя любимого в Roaming, регистрации в ключе реестра для автозапуска. Скучно. Но пролистываю дальше натыкаемся на весьма интересный момент. Код извлекает из себя ресурсы:
. В зависимости от разрядности (32/64) извлекается нужный ресурс (бинарный код), далее этот окд запускается с помощью инжекта в процесс устаревшой техникой
Часть 2.
Вспоминаем момент про инициативных мужчин и сами ResHAcker'ом извлекаем ресурсы.
Грузим файл PAYLOAD32 в дизассемблер. Увиденное заставит немного поломать голову. Это PE файл, но точка входа отсутсвует. В начале присутствует код очень похожий на запуск из памяти. Что ж, если это pe файл, то постараемся найти доказательства этому. Что маленький мальчик, говоришь ида уже корректно загрузила и это доказательство? Вообщем то ты прав. Листая код находим: This program cannot be run in DOS mode. Окей, дальше идея такова: вырезаем все что находится до PE хидера. Сказано - сделано и загружено в дизассемблер. Ииииии - бинго! Мы явно подобрались к чемц то интересному, судя по срокам:
Анализ содержимого и что он делает будет в дальнейшей части. Медленно пролистываем список импорта файл и глаз от увиденного начинает судорожно моргать.
Да, да: этот файл опять содержит ресурсы. Но кроме ресурсов здесь есть и еще интересные вещи: rsa ключ, конфиг и бинарный файл
Грузим файл в дизассемблер, анализируем. И сука, бинго!! Файл не содержит ресурсов)) Шутка, на самом деле мы подорались к самомоу главному компоненту матрешки судя по строкам внутри.
Дальнейший анализ будет выкладываться в этой же теме. Все файлы, включая распакованные: https://www.sendspace.com/file/ndi071
https://exploit.in/forum/pda/index.php/t78524.html
Часть 1.
Раслабьтесь, это ссылка всего лишь для того чтобы эффектно начать обзор.
Реверсинг занятие интересное, интригующее но в большинстве случаев утомительное и долгое. Но иногда проскакивают образцы
малвари разбирая которые на лице невольно возникает улыбка перерастающая в истерический смех.
Примерно такой сэмпл попался мне на кухню. Имя ему Win32/Dyzap.A. Представляет собой зевсоподнобое семейство неся на борту
формграббер, инжектор, внц модуль и прочие мелкие радости заливщиков. Криптованный представляет собой .scr файл (скринсейвер) с хэшем c2d73485095efdbd7ab625e469affb11. Вес 241 кб, запомните это число. Имеет 5 секций (криптовщик хорошо постарался).
Как подсказывает женская статья http://lover.ru/psychology/personality/Gla..._soblaznitelja/ многие парни не инициативны. Скажем нет бабской ереси и будем главным инициатором загрузки файла в отладчик. После загрузки мы видим, что
стаб криптора хитер, умен и лихо притворяется обычным файлом от visual studio. Что ж, инстинктивно ищем функцию WinMain. Кстати, есть замечательный плагин для OllyDbg - OllyMapConv. Суть - грузим файл в IDA, генерируем с пмощью него map файл и грузим этот файл в отладчик через этот плагин. Результат - функции получают имена распознанный дизассемблером.
Переходим по функции и нас ждет настолько скучный код, что игра Бразилии покажется интереснее. Что ж обычный просмотр функций не дал должного результата, поэтому перейдем к более агресивным методам распаковки.
Прежде чем как перейти к этому пункту, немного лирики о работе крипторов: исходный файл преобразуется (???) сжимается (???). При запуске стаб грузит в память исходный файл, решает все вопросы связанные с корректоной работой pe, а дальше не интересно. Для нас самое важное здесь - загрузка образа в память. Соответственно, отладчик должен уловить этот момент. Возвращаемся в отладчик и ставим брейкпоинты на api с работой памятью. VirtuallAlloc. Что говоришь маленький мальчиК: лучше ставить на Zw/Nt заглушки? Конечно ты прав, но так как я уже отреверсил сие чудо, то можем спокойно обойтись VirtualAlloc.
Ставим брейкпойнты на api: VirtualAlloc, VirtualProtect, MapViewOfFile. Попивая кофе, спокойно нажимаем на F9 (запуск файла, мы же работаем в виртуалке, да?). И сразу же ловим вызов VirtualProtect c флагом PAGE_EXECUTE_READWRITE.
дабы узнать, кто вызвал ее давим окоченевшими пальцами (+18, а на улице лето) Ctrl+F9, F8 и прямиком попадаем на место вызова аки бравый полицейский после реформы. Но ничего интересного нет. Давим дальше F9. Ловим вызов VirtualAlloc. Чтобы посмотреть, что находится в выделенной памяти (пока там пусто), переходим к окну регистров, выбираем регистр EAX - правая кнопка - Follow in Dump. Програма зря памяти выделять не станет и поэтому надо проконтролировать, что туда будет скопировано. Переходим к окну дампа памяти: выбираем первый байт - правая кнопка - breakpoint - memory, on access. Это значит, брейкпойнт сработает при попытке доступа к участку памяти.
Что ж верим мне на слово и давим F9. И ловим удачу: код останавливаетс на инструкциях
REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] -
на простом человеческом - заполнить память (???). Дабы не утомлять вас я пропущу цикл телодвижений связанные с повтором вышесказанных слов. И так, несколько раз повторив, наконец то в окне регистров видим, что заметное. Присмотревшись, вытираем слезу счастья (мужики не плачут, Хатико не в счет), видим указатель на структуру PE.
Далее следует скучный и пропущенный обзор связанный с распаковкой файла.
Распаковав файл, грузим его в дизассемблер. Распакованный файл весит порядком выше одного мегабайта, ловим себя на мысли, что то он до хрена весит. Окрестности точки входа не предвещают беды, разве что автор малвари был патриотом Украины
Идем дальше по дизассемблеру. Видим обычный код копирования себя любимого в Roaming, регистрации в ключе реестра для автозапуска. Скучно. Но пролистываю дальше натыкаемся на весьма интересный момент. Код извлекает из себя ресурсы:
. В зависимости от разрядности (32/64) извлекается нужный ресурс (бинарный код), далее этот окд запускается с помощью инжекта в процесс устаревшой техникой
Часть 2.
Вспоминаем момент про инициативных мужчин и сами ResHAcker'ом извлекаем ресурсы.
Грузим файл PAYLOAD32 в дизассемблер. Увиденное заставит немного поломать голову. Это PE файл, но точка входа отсутсвует. В начале присутствует код очень похожий на запуск из памяти. Что ж, если это pe файл, то постараемся найти доказательства этому. Что маленький мальчик, говоришь ида уже корректно загрузила и это доказательство? Вообщем то ты прав. Листая код находим: This program cannot be run in DOS mode. Окей, дальше идея такова: вырезаем все что находится до PE хидера. Сказано - сделано и загружено в дизассемблер. Ииииии - бинго! Мы явно подобрались к чемц то интересному, судя по срокам:
Код:
.rdata:10008A5C 0000000E C Full Cone NAT
.rdata:10008F20 0000000D C IPHLPAPI.DLL
.rdata:10009618 0000000D C KERNEL32.dll
.rdata:10008A54 00000007 C No NAT
.rdata:100082C8 0000000B C Opera/9.80
.rdata:10008A7C 00000014 C Port restricted NAT
.rdata:10008C08 00000014 C RtlCreateUserThread
.rdata:1000832C 0000001A C RtlTimeToSecondsSince1970
.rdata:10009652 0000000C C SHELL32.dll
.rdata:10009032 0000000C C SHLWAPI.dll
.rdata:10008AA8 0000000E C Symmetric NAT
.rdata:10008BA8 00000005 C TRUE
.rdata:10008A6C 0000000D C UDP Firewall
.rdata:10009632 0000000B C USER32.dll
.rdata:10008B8C 0000000A C VNCModule
.rdata:10008B44 0000000F C VncStartServer
.rdata:10008B54 0000000E C VncStopServer
.rdata:10009102 0000000C C WININET.dll
.rdata:10008FF6 0000000B C WS2_32.dll
.rdata:10008368 00000009 C Wget/1.9
.rdata:10008214 00000006 C Win_7
.rdata:1000821C 0000000A C Win_7_SP1
.rdata:10008230 00000006 C Win_8
.rdata:10008238 00000008 C Win_8.1
.rdata:10008240 00000010 C Win_Server_2003
.rdata:10008260 0000000E C Win_Vista_SP1
.rdata:10008250 0000000E C Win_Vista_SP2
.rdata:10008228 00000007 C Win_XP
.rdata:10008405 00000007 C \r8STs\ne
.rdata:10008278 00000007 C _32bit
.rdata:100082F0 00000009 C backconn
.rdata:100084E4 00000006 C botid
.rdata:10008BC4 0000000F C cannot get VNC
.rdata:10008B04 00000011 C canot get config
.rdata:10008560 00000007 C config
.rdata:1000820C 00000006 C empty
.rdata:10008A3C 00000015 C http://icanhazip.com
.rdata:10008518 00000009 C no\r\n\r\n\r\n
.rdata:100082D4 0000000A C publickey
.rdata:100082E8 00000008 C replace
.rdata:100081F4 0000000A C srv_alias
.rdata:10008B28 0000000B C start fail
.rdata:10008BB0 0000000D C start failed
.rdata:10008B18 0000000E C start success
.rdata:10008270 00000008 C unknown
.rdata:10008AB8 0000000C C unknown NAT
.rdata:100082E0 00000006 C vnc32
Анализ содержимого и что он делает будет в дальнейшей части. Медленно пролистываем список импорта файл и глаз от увиденного начинает судорожно моргать.
Да, да: этот файл опять содержит ресурсы. Но кроме ресурсов здесь есть и еще интересные вещи: rsa ключ, конфиг и бинарный файл
Грузим файл в дизассемблер, анализируем. И сука, бинго!! Файл не содержит ресурсов)) Шутка, на самом деле мы подорались к самомоу главному компоненту матрешки судя по строкам внутри.
Дальнейший анализ будет выкладываться в этой же теме. Все файлы, включая распакованные: https://www.sendspace.com/file/ndi071