Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
16.61 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

 

 

>> coding

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

РАЗНООБРАЗИЕ

SOCKS’ОВ

ДЛЯ ФАНАТИКОВ АСЬКИ ДАЖЕ ЗУБНУЮ ПАСТУ ВЫПУСКАЮТ

РАНЬШЕ ШИФРОВАНИЕБЫЛО ВЕСЕЛЕЕ

нравитсяsocks-серверотXavier Lagraula. Онпредставляетсобойнабор скриптов, основнымисредикоторыхявляютсяPySocks.py (главнаяпрограмма) иsocks.conf (конфиг). Зайдемвконфигивыставимдвапараметра:

OSCAR. НЕПРОТОКОЛ! ПИТОН ДЛЯ БЛОНДИНОК

bind_address : 127.000.000.001 bind_port : 1080

ЗдесьмыопределяемIP-шникипорт,накоторомбудетвисетьsocks-сервер. ТеперьможнозапуститьPySocks.py ипопробоватьеговработе. Кстати, при запускесервератынаверняказаметилчерноеконсольноеокошко, которое портитвнешнийвидтвоейновойWindows7? Чтобыубратьего, изменирасширениефайлаPySocks сpy наpyw.

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

data = readable_sock.recv(self.server)

if data:

if readable_sock == client_sock: my_type = 1

else: my_type = 2

data = my_hack.my_hack(my_type,data)

writeableslist[0].send(data) if readable_sock == client_sock:

octets_out += len(data) else:

octets_in += len(data)

else:

raise Connection_Closed

Этоткодчитаетданныесодногосокетаизаписываетихвдругой. Именнов этотучастокмыиприсунемсвойкод(онкакразвыделен). Здесьпозначениюclient_sock мыузнаем, вкакуюсторонуидетинформация, ипередаемее

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

вкотороммы, соответственно, иполучимполнуювластьнадинформацией. Минимальныйвариантмодуляmy_hack.py, которыйдолженразмещатьсяв каталогесостальнымифайламиsocks-сервера, таков:

def my_hack(type,data): return data

Каквидим, этафункция(my_hack) лишьвозвращаетто, чтоейпередали, и поэтомуникакневлияетнаsocks-сервер.

XÀÊÅÐ 08 /128/ 09

099

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

++++ BUY

>>m

 

 

 

 

 

 

coding

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

++++

 

 

 

 

 

 

 

 

++++

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

++++

 

 

 

 

HTTP://WWW

 

 

 

 

 

 

 

 

 

 

links

Официальное описаниепротокола

++++аськи: dev.aol.com/ aim/oscar.

Сайтбиблио-

++++текидляDESшифрования: sourceforge.net/ projects/pydes.

++++

• Написанныйна

Python’e socks-

сервер, которыймы

++++модифицируем: sourceforge.net/ projects/pysocks.

++++

 

 

 

 

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

 

 

 

 

OSCAR

OSCAR—открытый,нонесвободныйсетевойпротокол,обеспечивающийобмен мгновеннымии оффлайновымитекстовыми сообщениями.ВданныймоментиспользуетсядлядвухсистемкомпанииAOL(сейчасTimeWarner):ICQиAIM.AOLоткрыласпецификациипротокола5марта2008года иразрешиласозданиеальтернативныхклиентов.Конечноже,небезограничений.

++++

DVD

dvd

++++• Надискевожиданиитебяпокоятся полныескрипты написанногоsocks-

++++серверасподробнымикомментариямиот автора.

• Бездемонстрацион-

++++ноговидеоятебяне оставлю— смотриего

снашегодиска!

++++

INFO

++ ++

info

SOCKS — сетевой

++++протокол, который позволяетклиентсервернымприложениямпрозрачно

++++использоватьсервисызамежсетевыми экранами(файр-

волами). «SOCKS»

++++— этосокращениеот

«SOCKetS» (сокеты,

гнезда).

НАПИСАНИЕСКРИПТА ВNETBEANS’Е

ШИФРОВАНИЕ

Дляреализациифункциишифрованияянашелчудесныймодуль

—pyDes.py,сделанныйдобрымирукамичеловекапоимениTodd Whiteman.Дляшифрованияилирасшифровкиспомощьюмодуля нужносоздатьобъектипередатьемупарольиустановитьпараметр padmode=pyDes.PAD_PKCS5.Дальшевсепросто—используем функциюencryptдляшифрованияиdecryptдлярасшифровки. Нижеприведенпримердвухфункций, которыеупрощаютпро- цессшифровки-дешифровки. Этифункциимыпозжебудем использоватьдляшифрованиясообщенийаськи:

import pyDes

#функция для шифрования def encode(password,data):

k = pyDes.des(pass,

padmode = pyDes.PAD_PKCS5) return k.encrypt(data)

#функция для расшифровки

def decode(password,data): k = pyDes.des(pass,

padmode=pyDes.PAD_PKCS5) return k.decrypt(data)

МыиспользуемDES-шифрование, ноэтотмодультакже поддерживаетнадежный3DES. АеслизахочешьиспользоватьAES, тотутямогупосоветоватьиспользоватьPython Cryptography Toolkit.

ПРОТОКОЛАСЬКИ

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

Дляанализапротоколасохранимнесколькосообщений. Тут подойдеттакойкодвнашейфункцииmy_hack:

#если исходящее соединение if type == 1:

file = open('q.txt.', 'w+') file.write(data) file.close()

Припросмотресохраненныхсообщенийсталоясно, чтово всехнихвначалеидет0x2a02, далее— 2 байта(число, которое увеличиваетсянаединицуприкаждомследующемобмене даннымиссервером). Следующимиидут2 байта, которые обозначаютдлинувсегоблокаданных, безучетапервых6 байт. Послезаголовкаидетблокданных; дляисходящихсообщений онвсегданачинаетсяс0x00040006.

Вблокеданныхважнымполемявляетсябайтсномером26.

Внемсодержитсяразмерномерааськи. Размерномеразапомнимобязательно, ведьприрасчетеостальныхсмещений нужноучитыватьдлинуномера. Словопоадресу39 помещаетвсеберазмерсообщения+ 4 байта. Самосообщение начинаетсясадреса45 + длина_номерааськи. Теперьунас

++++

100

XÀÊÅÐ 08 /128/ 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

 

 

>> coding

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ПРОЦЕССОТЛАДКИ КОДАВNETBEANS’Е

достаточноинформации, чтобысчитатьсообщениедляпоследующего шифрования:

if type == 1:

# отбираем только исходящие сообщения аськи if data[0:2] == '\x2a\x02'

and data[6:10] == '\x00\x04\x00\x06':

#определяем длину номера аськи len_num = ord(data[26])

#определяем длину сообщения

len_msg = ord(data[39+len_num])*256 +ord(data[40+len_num])-4

# читаем сообщение

msg = data[45+len_num:45+len_num+len_msg]

Итак, чтоздесьпроисходит? Мыотбираемтолькоисходящиесообщения, определяемдлинуномерааськи, длинусообщенияисамосообщение. Теперьсообщениенужнозашифроватьиподготовитькотправке, закодируя еговbase64 ииспользуявстроенныймодульbase64, чтобыизбавитьсяот спецсимволов, которыемоглипоявитьсяпришифрованииDES иповлиять напередачусообщения:

enc_msg = encode(pass, msg)

enc_msg = base64.encodestring(enc_msg)

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

# определяем длину сообщения len_enc_msg = len(enc_msg)+4 len_num_1 = chr(len_enc_msg / 256) len_num_2 = chr(len_enc_msg % 256)

# создаем исходящий пакет данных data = data[0:39+len_num] + len_num_1

+len_num_2 + ‘\x00\x02\x00\x00’

+enc_msg + data[45+len_num+len_msg:]

Осталосьлишьподкорректировать5-йи6-йбайт, которыеотвечаютзаразмервсегопакетаданных:

#определяем длину пакета данных len_all = len(data)-6

len_all_1 = chr(len_all / 256) len_all_2 = chr(len_all % 256)

#формируем полностью готовый к отправке пакет data = data[0:4]+len_all_1 + len_all_2 + data[6:]

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

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

ОТНЮДЬНЕМИФ

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

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

Кстати,мывсеждемоттебяобратнойсвязи!Чтотебеинтересно?Какиетемы тынампредложишьраскрыть?Мы—твоирабы,приказывай,повинуемся:). Конечно,идейунассЛозовскимещевагон,нохотелосьбыиметьпредставлениеотом,чтоинтересноименнотебе.Ждемписем:spirt40@gmail.com!z

XÀÊÅÐ 08 /128/ 09

101

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

++++ BUY

>>m

coding

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.c

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

++++

++++

++++

++++

++++АЛЕКСАНДР ЭККЕРТ

/ALEKSANDR-EHKKERT@RAMBLER.RU/

++++ПРОАКТИВНОЕ

++++ДИЛДОДЛЯ

++++ВИРУСОПИСАТЕЛЕЙ

++++Низкоуровневаязащитаотвредоносного

кодавдомашнихусловиях

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

++++

++++

++ ++

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

 

 

АНАЧАЛОСЬВСЕСCONFICKER’A

гость. Однаконаэтотразмненеповезло. Всеначалосьстого, чтонис

 

 

 

 

Да-да, червь, которыйзаразилсвыше10 млн. компьютеровповсемусвету,

того, ниссегосошибкойзаписипамятиначалвылетатьsvchost.exe. Для

++++необошелсторонойимоюмашину. Рискнувызватьбурюэмоцийвсвой стабильноработающеймашины— исключительнаяредкость. Этосразу

 

 

адрессосторонывоспитанных«продвинутых» пользователей— яне

менянасторожило, побудивпрошерститькомпнапредметподозрительных

 

 

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

файловизаписейвреестре. Ядаженесомневался, чтозаразаявилась

 

 

исоблюдаяправилаличнойгигиены. Вслучаезараженияявылавливаю

посредствомавтозапускасзараженнойфлешки(умнаямысльотключить

++++

заразусамостоятельно, неприбегаякпомощиантивирусногософта. Поче-

автозапусксUSB-носителей, пришла, каквсегда, опосля).

 

 

муясчитаюантивирусыплохойзатеей? Ответнаэтотфилософскийвопрос

Впроцессеорганизованногопоисказаразыподозрительныхехе’шниковяв

 

 

ищивкнигемногоуважаемогоКрисаКасперски«Запискиисследователя

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

 

 

компьютерныхвирусов» вглаве«Почемуантивирусысталиплохойидеей».

груженнойводинизсистемныхпроцессов.Подумано-сделано,иприосмотре

++++

Ясеговыводамиабсолютносогласен.

директорииsystem32искомаяdll-кабылалокализована.Удалениеоказалось

 

 

Врезультате, несмотрянато, чтояобычносижуподадминскимаккаунтом

невозможнодажевбезопасномрежиме,чтоговорилоотом,чтоонауспешно

 

 

(правильно, ачегомелочиться?) вирусынамоемрабочемкомпе— редкий

грузитсяводинизосновныхсистемныхпроцессов—svchost.exe.

++++

102

XÀÊÅÐ 08 /128/ 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

 

 

>> coding

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

СИСТЕМНЫЕ ФУНКЦИИПЕРЕХВАЧЕНЫВИРУСОМ

 

 

ВооружившисьутилитамиотSysinternals, япостаралсяпроанализиро-

этогопоказалосьмало, иярешилнаскоруюрукунаваятьнечтобольшее,

ватьдействиязаразы. Иобнаружил, чтоdll-каскрываетсебяизсписка

посколькунадежнозащититьсистемныефайлыперехватомоднойтолько

загруженныхвадресноепространствопроцессовпутемпатчадвусвязного

LdrLoadDll врядливозможно. Впорывевдохновенияядобавилпере-

спискавPEB’e (подробноэтатехникаописанавмоейжестатьевмайском

хваттакихсистемныхвызовов, какNtOpenProcess, NtWriteVirtualMemory

z, поэтомупросмотрщикитипаPETools здесьнепомогут. Непомоглаиути-

иNtReadVirtualMemory иещепарочкидругих. Врезультате, получилась

литкаListDlls отSysinternals, позволяющаяпросмотретьвсезагруженные

самопальнаяпроактивнаязащитасистемныхпроцессов. Можнодобавить

впроцессбиблиотеки. ИтолькомаленькаятулзаHandleViewer показала

ограничениедоступакреестру, нотакойцелияпередсобойнеставил.

хендлlepujmlx.dll, загруженныйвsvchost.exe. Этабиблиотека, какпотом

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

выяснилось, создавалалевыезаписивреестре, позволяющиеейвыжить

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

всистеме.

недостаточно. Чемпостоянноискатьивыгружатьизпроцессаневестьот-

Какследствиеработыэтойзаразы, яполучилперехватнесколькихси-

кудавзявшуюсябиблиотеку, прощесделатьтак, чтобыонатудавообщене

стемныхфункцийвntdll.dll, атакжефункцийдляработысинтернетом, что

грузилась.

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

Этиммыизаймемся. Кактызнаешь, загрузкаdll вадресноепространство

щенныхкомпьютернойбезопасности. Мелочь, анеприятно. Мегамощная

чужогопроцессаобычнопроисходитчерезвызовCreateRemoteThread.

 

 

 

вещь— RKUnhooker — показалапоявившиесявсистемеперехваты.

Примернотак:

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

 

 

антивирусныхбрендов, выпущенныхспециальнодляудаленияConficker’a

hProcess = OpenProcess(...);

 

(типаKidoKiller ОтKAV илиEConfickerRemover отESET), япришелквыводу,

LibFileRemote = (PWSTR) VirtualAllocEx(hProcess...);

 

чтокардинальныхрешенийниодноизопробованныхсредствнепред-

WriteProcessMemory(hProcess, LibFileRemote, ...);

 

лагает, посколькунатотмоментониограничивалисьудалениемlepujmlx.

PTHREAD_START_ROUTINE fnThreadRtn =

 

dll ипарочкидругихфайлов, атакже— чисткойреестра. Всеэтохозяйство

(PTHREAD_START_ROUTINE) GetProcAddress(

 

работалотольковтечениепервогочаса, затемисторияповторялась— не-

GetModuleHandle(TEXT("Kernel32")), "LoadLibraryW");

 

известныйпроцессмаппилвsvchost.exe вышеуказаннуюlepujmlx.dll, и

 

 

системавновьвозвращаласькзараженномусостоянию.

hThread = CreateRemoteThread(hProcess, NULL, 0,

 

Перезагрузкавбезопасномрежиметожепроблемынерешила— dll все

fnThreadRtn, LibFileRemote, 0, NULL);

 

равноподгружаласьвsvchost.exe иудалитьеебылоневозможно.

 

 

 

 

ЧитатьманыобочисткесистемыотConficker’a, которыеможновизобилии

LdrLoadDll всвоюочередьсводитсякнеэкспортируемымвызовам

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

LdrpLoadModule иLdrAttachProcess, которыепростопроецируютзагружае-

желуюартиллериюввидеантивирусногопакета— темболее. Воттогда-то

муюбиблиотекувадресноепространствоцелевогопроцесса.

мнеипришлавголовумысльнаписатьчто-тотипасобственнойпроактив-

Отлично, теперьпостараемсямаксимальноосложнитьжизньвсякимвиру-

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

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

кода.

стороннихбиблиотек.

САМСЕБЕАНТИВИРУС

Решениенапрашивалосьсамособой: все, чтонужносделать, — запретитьзагрузкустороннихdll всистемныепроцессы. Легчевсегоэто осуществитьпутемперехватасистемнойфункцииLoadLibrary или, чтоеще лучше, LdrLoadDll. Этивещияреализовалввидедрайвера, однакомне

СТАВИМПОДКОНТРОЛЬЗАГРУЗКУDLL

Главнуюсмысловуюнагрузкувнашемкоденесетперехватсистемной функцииLdrLoadDll, аосновнойпроблемой, стоящейпереднами, будет определениеадреса функцииLdrLoadDll втаблицеэкспортаntdll.dll. Вusermode этапроблемарешаетсянетрудно— достаточнонайтиntdll.

XÀÊÅÐ 08 /128/ 09

103

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C

E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

P

 

 

 

 

 

NOW!

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

++++ BUY

 

>>m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

coding

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

++++

++++ HTTP://WWW

links

•Длясовершенст-

++++вованиянавыков ковырянияядра Windows рекомендую кпосещениюфорумы

++++наrsdn.ru иwasm.ru.

•Многоважной иинтереснойинфы

опрограммировании

++++ядраWin содержится наntkernel.com.

++++

++++

INFO

++ ++ info

Отключитьавтозапусквсехсменных носителейвWindows

++++можно, добавив вветкуреестра

HKEY_CURRENT_

USER\Software\

++++Microsoft\Windows\

CurrentVersion\

Policies\Explorer

ключ«NoDriveType

++++AutoRun» созначением0xff.

RKUNHOOKER ПОКАЗЫВАЕТУСТАНОВЛЕННЫЕ ДРАЙВЕРОМХУКИ НАSSDT

dll надискеиперехватитьеечерезвызовыOpenFile/ CreateSection/MapViewOfSection. Тожесамое, ноужепо-

средствомвызовааналогичныхядерныхфункций, можно сделатьвядре. Такимвотнехитрымобразоммысможемконтролироватьзагрузкубиблиотеквовсепроцессывсистеме (естественно, ведьntdll.dll поумолчаниюподгружаетсяво всепроцессы):

DWORD GetDllFunctionAddress( char* lpFunctionName, PUNICODE_STRING pDllName)

{

ZwOpenFile(...); ZwCreateSection(...); ZwMapViewOfSection(...);

...

dosheader = (IMAGE_DOS_HEADER *)hMod; //здесь мы парсим экспортную таблицу

...

for(i = 0;

i < pExportTable-> NumberOfFunctions; i++)

{

functionName = (char*)( (BYTE*)hMod + arrayOfFunctionNames[x]);

functionOrdinal = arrayOfFunctionOrdinals[x] + Base — 1;

functionAddress = (DWORD)( (BYTE*)hMod + arrayOfFunctionAddresses

[functionOrdinal]);

if (RtlCompareString(&ntFunctionName, &ntFunctionNameSearch, TRUE) == 0) return functionAddress;

}

return 0;

}

Драйвер, реализующийэтотперехватLdrLoadDll, тынайдешьнанашемдиске.

Существуетещеодин, неслишкомкрасивыйиэлегантный

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

зовомKeAttachProcess аттачимсявsvchost.exe инаходим PEB (Process Environment Block; какэтосделать, ятакже писалвмайскомz). Аужечерезнегополучаемуказатель наLDR_DATA_TABLE_ENTRY, которыйсодержиттакое поле, какModuleBaseAddress.

Идеятакова: найдемпоименибиблиотекиntdll.dll адрес еезагрузкивsvchost’e. Потом, используяэтотадрес, пропарсимтаблицуэкспортанапредметадресафункции LdrLoadDll. Итолькозатемподменимегонавызовсвоей функцииmyLdrLoadDll, котораябудетотслеживатьипресекатьзагрузкузловредныхбиблиотек. Неслишкомудобнои элегантно, новполнеработоспособно. Еслизнаешьспособ лучше— напиши, обсудим.

Итак, получаем:

Находимадресспроецированной вцелевойпроцессntdll.dll

ZwQueryInformationProcess(

NtCurrentProcess(), ProcessBasicInformation, &ProcInfo, sizeof(PROCESS_BASIC_INFORMATION), &Size);

pPeb = ProcInfo.PebBaseAddress; //хотя можно просто так: pPeb (PEB*)0x7FFDF000;

PPEB_LDR_DATA Ldr = pPeb->Ldr;

PLIST_ENTRY InitialEntry =

Ldr -> InitializationOrder.Flink;

PLDR_DATA_TABLE_ENTRY LdrDataTableEntry =

CONTAINING_RECORD( InitialEntry,

LDR_DATA_TABLE_ENTRY,

InitializationOrder);

PLIST_ENTRY LoadOrderListHead =

LdrDataTableEntry->LoadOrder.Blink;

Далеенамостаетсятолькопропарситьполученныйсписок напредметименибиблиотекииадресаеезагрузки.

++++

104

XÀÊÅÐ 08 /128/ 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

 

 

>> coding

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

НАШАПРОАКТИВНАЯЗАЩИТА ВДЕЙСТВИИ

ПЕРЕХВАТФУНКЦИЙДЛЯРАБОТЫ СВИРТУАЛЬНОЙПАМЯТЬЮ

Такихфункцийнесколько— ZwWriteVirtualMemory, ZwReadVirtualMemory, ZwOpenProcess, ZwDuplicateObject, ZwQueryInformationProcess иZwProtectVirtualMemory. Эти системныефункцииявляютсяосновнымиприманипуляцияхсадреснымпространствомпроцесса. Наихперехватеи отслеживанииихвызовапостроенаработавсякойуважающейсебяпроактивнойзащиты. Необойдемэтисистемные вызовыимы. Сейчасяпокажу, какподручнымисредствами организоватьконтрольихвызовов. Естьдваспособа: перехватитьвUsermode иливядре, пофиксивнепосредственно таблицуэкспортаntdll.dll, илипоступитькакнастоящие профессионалы— найтиKeServiceDescriptorTable (только неспрашивай, чтоэтотакое, атоявтеберазочаруюсь). Сам перехватможносделатьлибоподменойадресавызова, либоспласингомфункции.

ПЕРЕХВАТKESTACKATTACHPROCESS

Нуинапоследок, дляуспокоениясовести, можнореализоватьперехватядернойфункцииKeAttachProcess или,

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

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

кстати, оченьчастозабывают: PVOID func_addres = MmGetSystemRoutineAddress( &ApiNameUnicode ). Функ-

циявернетнамееадрес. Чтоснимделать, думаю, тыуже знаешь. Частобывает, чтосамыевкусныеиинтересные функцииядраWindows простонеэкспортируются. Вэтом случаеMmGetSystemRoutineAddress вернетNULL.

ОТМЕТАЯВОЗРАЖЕНИЯ

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

ТАСАМАЯDLL-КА

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

В конце хочу еще раз напомнить, что программирование в ядре сродни собиранию «кубика-рубика» в темноте

— из-за затруднений с отладкой драйвера. Поэтому на первых порах тебе не раз придется лицезреть BSOD. Ну а для его анализа и, как правило, отладки драйвера, нужен WinDBG и какой-нибудь ядерный отладчик.

Я, к примеру, пользуюсь Immunity debugger’om, что,

впрочем, дело вкуса. Удачного компилирования и да пребудет с тобой Сила! z

DVD

dvd

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

XÀÊÅÐ 08 /128/ 09

105

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

>>m

 

w Click

to

 

 

 

 

phreaking

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

АНАТОЛИЙ «LOCKDOG» ЗИМИН / LINE3D@YANDEX.RU /

ТВОЙ

ЭЛЕКТРОННЫЙ

ДРУГ

Создаемроботавдомашнихусловиях

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

доступныистоятнетакуждорого.

>> phreaking

ПРОГРЕССНЕСТОИТНАМЕСТЕ

Чтотакоеробот? Вбольшинствеслучаев— этоавтоматическоеустройство, котороереагируетнакакие-либодействияокружающейсреды. Роботымогутуправлятьсячеловекомиливыполнятьзаранеезапрограммированныедействия. Обычнонароботерасполагаютразнообразныедатчики(расстояния, углаповорота, ускорения), видеокамеры

иманипуляторы. Электроннаячастьсостоитизмикроконтроллера(МК)

микросхемы, вкоторуюзаключеныпроцессор, тактовыйгенератор, различнаяпериферия, оперативнаяипостояннаяпамять. Вмиресуществуетогромноеколичестворазнообразныхмикроконтроллеровдля разныхобластейпримененияиснимиможнособиратьмощныхроботов. ДлялюбительскихпроектовширокоеприменениенашлимикроконтроллерыAVR. Насегодняонинаиболеедоступны, ивинтернетеможно найтимногопримеровнаосновеэтихМК. Чтобыработатьсмикроконтроллерами, тебенужноуметьпрограммироватьнаассемблереилина C++ ииметьначальныезнаниявцифровойианалоговойэлектронике. В нашемпроектемыбудемиспользоватьC++. ПрограммированиедляМК малоотличаетсяотпрограммированиянакомпьютере: синтаксисязыка такойже, большинствофункцийпрактическиничемнеотличаются, а новыедовольнолегкоосвоитьиимиудобнопользоваться.

ЗАКУПАЕМСЯМАТЕРИАЛАМИ

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

удобнееуправлять(дляповоротадостаточновращатьгусеницывразные стороны). Поэтомутебепонадобитсялюбойигрушечныйтанк, укоторого гусеницывращаютсянезависимодруготдруга. Такойтыможешькупить влюбоммагазинеигрушекпоразумнойцене. Отэтоготанканужнатолькоплатформасгусеницамиимоторысредукторами. Остальноеможно смелооткрутитьивыкинуть. Такженампотребуетсямикроконтроллер. МойвыборпалнаATmega16 — унегодостаточнопортовдляподключениядатчиковипериферии, ивообщеондовольноудобный. Ещенадо закупитьнемногорадиодеталей(списоктыувидишьвоврезке), приготовитьпаяльник, мультиметрипрямыеруки.

ПРАВИЛЬНОЕПИТАНИЕ— ЗАЛОГЗДОРОВЬЯ

Микроконтроллербудетвыполнятьфункции«мозга», ноначнеммынес него, астого, какправильнокормитьнашегоробота, потомучтонаэтом обычноошибаютсяначинающиероботостроители. Чтобыроботработал нормально, нужноиспользоватьстабилизаторнапряжения. ЯпредпочитаюмикросхемуL7805 — навыходеонавыдаетстабильноенапряжение 5В, котороеинужнонашемумикроконтроллеру. Нотаккакпадение напряжениянаэтоймикросхемесоставляетпорядка2,5 В, кнемунужно подавать, минимум, 7,5 В. Вместесстабилизаторомиспользуютсяэлектролитическиеконденсаторы, чтобысгладитьпульсациинапряжения. В цепьобязательновключаютдиод, длязащитыотпереполюсовки.

ДЕЛАЕМПЛАТУСМК

Теперьмыможемзанятьсянашиммикроконтроллером. КорпусуМК

— DIP (такудобнеепаять) иимеетсороквыводов. НабортуестьАЦП, ШИМ, USART имногоедругое, чтомыпокаиспользоватьнебудем. На дискетынайдешьвсюсхемуробота, такчтовэтомразделемыостано-

106

XÀÊÅÐ 08 /128/ 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

 

 

phreakingw

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

 

 

 

 

 

o

m

 

w

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

МОЯПЛАТАУПРАВЛЕНИЯРОБОТОМ ТРИВАЖНЫХКОМПОНЕНТАРОБОТОТЕХНИКИ

СХЕМАДРАЙВЕРАДВИГАТЕЛЕЙ

ВАРИАНТУСТАНОВКИДАТЧИКОВНАРОБОТА

вимсятольконаобвязкесамогоМК. Рассмотримнескольковажных узлов. ВыводRESET (9-аяногаМК) подтянутрезисторомR1 к«плюсу» источникапитания. Этонужноделатьобязательно, иначетвойМКможет непреднамеренносбрасыватьсяили, прощеговоря— глючить. Также желательной, нонеобязательноймеройявляетсяподключениеRESET’а черезкерамическийконденсаторC1 к«земле». Насхеметыможешь увидетьэлектролитна1000 мкФ, — онспасаетотпроваловнапряжения приработедвигателей, чтотожеблагоприятноскажетсянаработемикроконтроллера. КварцевыйрезонаторX1 иконденсаторыC2, C3 нужно располагатькакможноближеквыводамXTAL1 иXTAL2.

Отом, какпрошиватьМК, ярассказыватьнебуду, — обэтомтыможешь прочитатьвинтернете. ПисатьпрограммумыбудемнаC++. Вкачестве средыпрограммированияявыбралCodeVisionAVR. Этасредаудобна новичкам, потомучтоимеетвстроенныймастерсозданиякода.

УПРАВЛЕНИЕДВИГАТЕЛЯМИ

Неменееважнымкомпонентомвнашемроботебудетдрайвердвигателей. Никогдаинивкоемслучаенеподключайдвигателинапрямую кМК! Вообще, мощныминагрузкаминельзяуправлятьсмикроконтроллеранапрямую, иначеонсгорит. Пользуйсяключевымитранзисторами. Длянашегослучаяестьспециальнаямикросхема— L293D. Вподобныхнесложныхпроектахвсегдастарайсяиспользовать именноэтумикросхемусиндексом«D», таккаконаимеетвстроенныедиодыдлязащитыотперегрузок. Ейоченьлегкоуправлятьи еепростодостатьврадиотехническихмагазинах. Выпускаетсяона вдвухкорпусах— DIP иSOIC. МыбудемиспользоватьвкорпусеDIP из-заудобствамонтажанаплате. L293D имеетраздельноепитание двигателейилогики, поэтомусамумикросхемумыбудемпитатьот стабилизатора(входVSS), адвигатели— напрямуюотаккумуляторов

(входVS). L293D выдерживаетнагрузку600 мАнакаждыйканал, аэтих каналовунеедва. Тоесть, кодноймикросхемеможноподключить двадвигателя. Но, чтобыперестраховаться, мыобъединимканалы,

 

 

 

XÀÊÅÐ 08 /128/ 09

107

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

>>m

 

w Click

to

 

 

 

phreaking

 

 

 

 

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

 

 

 

 

НЕОБХОДИМЫЕ

КОМПОНЕНТЫ

Вотсписоктого, чтотебе

мкФх16Вх2 шт.

ПРИНЦИПРАБОТЫДАТЧИКАПРЕПЯТСТВИЯ

нужноприобрести:

• диод1N4001 или1N4004

• ATmega16 вкорпусеDIP-40

• кварцевыйрезонаторна

 

• L7805 вкорпусеTO-220

16 МГц

 

• L293D вкорпусеDIP-16 х2

• ИК-диоды: подойдутлюбые

 

шт.

вколичестведвухштук

 

• резисторымощностью0,25

• фототранзисторы, тоже лю-

 

Втноминалами: 10 кОмх1 шт.,

бые, но реагирующие только

 

220 Омх4 шт.

на длину волны ик-лучей

 

• конденсаторыкерамичес-

Адреса магазинов, в которых

 

кие: 0.1 мкФ, 1 мкФ, 22 пФ

ты можешь все это купить,

 

• конденсаторыэлектролити-

нетрудно найти в интернете

 

ческие: 1000 мкФх16 В, 220

— или напиши мне на почту.

 

СХЕМАВКЛЮЧЕНИЯДАТЧИКОВ

СХЕМАСТАБИЛИЗАТОРАНАПРЯЖЕНИЯ

итогдапотребуетсяпоодноймикренакаждыйдвигатель. Отсюда следует, чтоL293D сможетвыдержать1.2 А. Чтобыэтогодобиться, нужно объединитьногимикры, какпоказанонасхеме. Микросхемаработает следующимобразом: когданаIN1 иIN2 подаетсялогический«0», ана IN3 иIN4 — логическаяединица, тодвигательвращаетсяводнусторону. Аеслиинвертироватьсигналы— податьлогическийноль, тодвигатель начнетвращатьсявдругую. ВыводыEN1 иEN2 отвечаютзавключение каждогоканала. Ихмысоединяемиподключаемк«плюсу» питания отстабилизатора. Таккакмикросхемагреетсявовремяработы, а установкарадиаторовнаэтоттипкорпусапроблематична, тоотвод теплаобеспечиваетсяногамиGND — ихлучшераспаиватьнаширокой контактнойплощадке. Вотивсе, чтонапервоевремятебенужнознать одрайверахдвигателей.

ДАТЧИКИПРЕПЯТСТВИЙ

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

ПРОШИВКАРОБОТА

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

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

#include <mega16.h> #include <delay.h>

Нижеследующиестрокиусловные, потомучтозначенияPORTC зависят оттого, кактыподключилдрайвердвигателейксвоемумикроконтроллеру:

108

XÀÊÅÐ 08 /128/ 09

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