The Prodigy



Блоги атакуют!


Осторожно! Ремонт! (ФОТО)


Продажи фото на Шутерсток


Google Analytics для shareware


Убийственный доллар, гениальный план захвата


Обо всем по-немногу


О блоге


SSD диск? Да, оно того стоит!



IPv6 + IPv4 = почти детективная история с граблями

Представьте ситуацию. Есть “свежий” выделенный сервер (Linux -> Debian), навожу на нем порядок  - выключаю лишние сервисы, тюнингую различные настройки и так далее. Приходится и почитывать всякое новое, так как после работы с FreeBSD обнаруживается довольно много отличий. Наконец, вывод команды sockstat -l становится желаемым.

Но тут же вспоминаю, что был же еще включен ProFTPd. Хотя в списке открытых портов 21-го я не вижу. Странно. Запускаю FAR, создаю в нем новое подключение, нажимаю и …. Мои глаза расширяются - сервис откликается. Снова перепроверяю  sockstat, но понять ничего не могу и глубоко задумываюсь…

Запускаю NetTools, ввожу IP, включаю сканирование портов и… снова удивляюсь. Результат совпадает с выводом команды sockstat на самом сервере - 21-й порт сканер не нашел.

Теперь для верности качаю NetCat под Windows, запускаю “nc SERVER_IP 21″ и… получаю приветствие FTP-сервера. Вот тут-то я вхожу в полный ступор. :) Ум за разум начинает заходить, я пытаюсь увидеть в этом всем хоть какую-то логику.

Цепляюсь за главное - раз sockstat не показывает открытый порт, но он ЕСТЬ (как в “ДМБ” про суслика) - точно что-то не так с  sockstat. Гуглю на тему того почему эта утилита может выдавать не все, что есть на самом деле. Выясняется, что sockstat совсем не учитывает IPv6 (точнее, версия в Debian 6 - там нет поддержки ключа “-6″).

Ага, то есть, получается ProFTPd включен только для IPv6 протокола? Вдруг потому сканер в NetTools и не увидел 21- порт, в то время как NetCat и плагин ftp у FAR-а законнектились (и они его поддерживают)? Да ну нет, ерунда какая-то, даже если у меня в Win7 и включен IPv6, все равно наши провайдерские серваки не обрабатывают его. Да и вышестоящие провайдеры тоже. А вдруг я себе локально шлюз поставил и забыл?

Пингую IPv6 адрес сервера - нет ответа (а с веб-сервисов пингования ipv6 адресов - пингуется). Что и следовало ожидать. Снова пробую зайти на ftp - заходит… Ступор…

Наконец, МЫСЛЬ. У меня на сервере включен ip_forward, так как я использую виртуализацию на базе OpenVZ  (на физическом сервере запущена виртуалка со своим адресом, на которой работает apache в связке с nginx). Вдруг при попытке зайти на закрытый порт пакет подхватывается стеком IPv6? Звучит бредово, но других пока идей нет совсем.

Для теста делаю на пару секунд echo 0 > /proc/sys/net/ipv4/ip_forward , тестирую FTP, возвращаю обратно 1. Мда….. Сервис продолжает откликаться! :) Тут уже вспоминаю, что проще было сделать tcpdump port 21. Заодно узнаю как смотреть траффик только для 6-й версии протокола - tcpdump ip6. Дамп показывает, что работа идет по обычному IPv4!

Но тогда почему я не вижу ничего в sockstat -l ????


==============================

Внимание, РАЗГАДКА!. :)

Естественно, после такого поворота я поискал как еще можно смотреть открытые порты. Один из альтернативных вариантов - lsof -i.

Команда lsof -i|grep proft выдает такой результат:

proftpd 11643 proftpd 1u IPv6 30371 0t0 TCP *:ftp (LISTEN)

Обратите внимание -  IPv6, но  *:ftp, т.е. биндится на все интерфейсы в системе! А устаревший sockstat просто этого не видит. Если в proftpd.conf опцию UseIPv6 выставить в off, то sockstat “прозревает”. Но главная мысль не в этом. Вывод:

Внимание! Если в Debian 6 поднят IPv6 протокол, то имейте в виду, что какой-то нежелательный сетевой сервис может запуститься так, что его абсолютно не будет видно с помощью sockstat! :) Используйте, например,  lsof -i.

Плюс не помешает произвести полное внешнее сканирование с помощю Nessus, а изнутри - аудит при помощи Lynis. Лишние сервисы из автозапуска легко убирать с помощью rcconf. В apache желательно включить mod_security, а на закуску - настроить пересылку логов системы на какой-то отдельный сервер.

Лег под нож

Началось все примерно три года назад. Мы играли в футбол на полянке с искусственным покрытием. Шел дождь. Во время борьбы на скользком поле я получил сильный удар в наружную часть левого колена. Игра для меня сразу закончилась, но тогда я еще не понял что же вообще произошло. Как только нога перестала беспокоить, я сразу “в бой”. Но даже при небольшом контакте с коленом (или после неудачных движений) начались случаться рецидивы, после которых снова и снова требовалась пауза.

Когда начались проблемы со спуском с лестницы, я начал уже почитывать разные статьи и обдумывать как это дело лечить. Читать дальше »

Когда компьютеры были большими, а программисты - маленькими, или The History of Life - 5

 

Продолжение рассказа. Начало тут - blog.kmint21.com/…/zx-spectrum-basic/

[1998-й год.] Ну все, теперь мне не нужно было засиживаться на работе. Теперь меня дома ждал компьютер!  Само собой, началось все c попыток установить все, что только  можно установить и посмотреть все, что только можно посмотреть. Но “отпустило” меня довольно быстро, и я начал все больше и больше вникать в дебри системы “Windows 95″.

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

Зато во время пар можно было немного расслабиться. Бывало, сяду за свободный компьютер, выберу жертву, набирающую на компьютере очередную программку на турбо-паскале, и пошлю туда сообщение командой net send : “Внимание! Произошел перегрев центрального процессора. Срочно отойдите от компьютера на три шага!”. И ведь тогда это было смешно, да. Правда, со временем некоторые студенты  ознакомились с командой net send и, бывало, по неосмотрительности “звездочкой” отсылали какие-то глупости одновременно на все компьютеры двух компьютерных классов, что сопровождалось «хоровым beep-ом», прорезающим тишину занятий. Приходилось потом разбираться с негодяями.

Но вот что интересно… Своего личного аккаунта у лаборантов не было, а нас такой расклад с коллегой (лаборант второго нашего компьютерного класса) никак не устраивал. Интернета в классах все равно не было, потому ничем более интересным мы заняться все равно и не могли, так, благодаря l0phtcrack и осторожности, у нас на руках появились пароли почти всех преподавателей, администратора и даже пароли на BIOS.

А затем я взялся за изучение команды telnet, перебирая вручную(!) пароли входа на какой-то хост во внешней сети. Причем, меня не остановило и первое предупреждение, переданное через преподавателя о том, что, якобы, кто-то отсюда пытается зайти на компьютер в бухгалтерии. После второго предупреждения (и угрозы заставить меня писать объяснительную) я осознал глупость данного занятия и прекратил, так что моё знакомство с unix системами пришлось отложить на потом.

И вот, наконец, до некоторых компьютеров наших аудиторий «дошел» Интернет! Это был просто праздник. Медленно, но уверенно, я каждый день набивал свою 3.5-дюймовую дискету статьями по безопасности и программированию, чтобы дома уже эту информацию обрабатывать и осмысливать. А для записи своих мыслей я создал на компьютере файлик HISTORY.TXT.

Благодаря этому файлику, например, я могу сейчас узнать, что свою первую программу (WinAmp) я взломал 6 декабря 1999 года. До чего же сейчас интересно читать свои старые записи, которым более 12 лет!

 

1.10.99.  С++. Макросы. Макрос, копирующий *.PWL в любой каталог.  План - достать доку по написанию макросов (справочник по функциям).

 

2.10.99 C++. Определение типов, cout <<, pointer …   Far - KeyMakros AltX

 

3.10.99 C++. Дописал программу ЧИСЛА.

 

4.10.99 Достал слабенькую доку по макросам. Классная команда SHELL !!!   Изменил макрос1  - чтоб запускал блокнот и писал текст.  Короче - нужно скорее устанавливать Office97 !!!

 

5.10.99 На работе - облом! Инет нам отрубили. :-(   Уяснил разницу между Word Basic и Visual Basic. Написал парочку  макросов. Начал писать инет-страницу. C++ Файлы.

 

6.10.99 C++. На работе на 01 компе написал макрос AutoExec.

 

7.10.99 VB - потихоньку. Идея - на C++ написать … забыл что :-(

 

9.10.99 С++ Попытался написать архиватор.

 

10.10.99 C++ Начал (уже какой раз!) писать TOP SECRET. Жду CD-ROM.

 

14.10.99 C++ На работе целый день писал TOP SECRET!

 

16.10.99(Сб) TOP SECRET . Были на концерте, потом устроили свой концерт.

 

18.10.99 C++ TOP SECRET.

 

26.10.99 Достал Delphi 3.01. План - разобраться с классами на C++

 

13.11.99 . До 1 ночи (пока еще до часу) писал на ассемблере! Все не так уж и сложно !

 

14.11.99 - 15.11.99 Потерялся во времени ( *** UFO I *** )

 

06.12.99 ПН Не знаю сколько там часов( и минут)… Только что ломанул WINAMP !!!!!!!!!  Из-за отладчика, часы приостанавливались и показывают неправильно. Скоро ехать в универ, забирать трудовую книжку. … Долго я пытался чего-нибудь взломать. Наконец-то ! Регистрация в ВинАмпе - имя:К код:284957 !

 

12.12.99 Сб-Вс Так как сейчас 2.41. Только что получился первый резидент, перехватывающий  21h прерывание. Заменяет буквы а на о ! Весело! Первый шаг сделан. Поехали дальше.

 

Тем временем, мой полуторагодичный срок работы в ЗГТУ подошел к концу – человек, которого я временно замещал, вернулся из армии. Особо не раздумывая, я согласился на предложение своего друга пойти работать на «Искру» (военное предприятие), где так же всю жизнь инженерами работали мои родители. Но об этом – в следующий раз.

 

Продолжение следует.

Основы изготовления игровых ботов

В этой небольшой статейке я приведу пример изготовления бота “навесного” типа для DirectX игры на примере Pro Evolution Soccer 2011/2012.  Естественно, наш бот будет не в футбол играть, а только запускать матчи МЛО в режиме тренера, пока мы спим. :) Цель - финансы.

Итак, мы имеем стандартную DirectX-игру, запущенную в окне. Что нам нужно? Распознать то, что отображено на экране и послать туда нажатие соответствующих клавиш. Для распознавания/опознания мы будем использовать библиотеку OpenCV (Open Source Computer Vision Library) - ru.wikipedia.org/wiki/OpenCV

Для начала нам нужно найти окно нашего DirectX-приложения и сдампить экран. Мы привяжем это к таймеру и будем делать каждые ХХ секунд. Самый простой вариант:

HWND hWnd = FindWindow(0,”Pro Evolution Soccer 2011″), SetForegroundWindow(hWnd), Form1->ImageEnViewPES->IO->CaptureFromScreen(iecsForegroundWindow, 0); - используем библиотеку OpenCV для более простого захвата содержимого активного окна.

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

Теперь нужно определить в каком режиме/диалоге игры мы находимся. Как это сделать? Для начала нам нужно определить какие области экрана имеют объекты, к наличию/отсутствию которых мы можем привязаться. Например, если мы видим на экране такую кнопку (обведена красным на скриншоте), то это значит, что мы в кубковом режиме МЛО, где необходимо нажать клавишу “Enter” для запуска очередного матча.

pes-2011-mlo

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

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

bool ImgEq (double percent, char* filename, int x1, int y1, int x2, int y2)
{
Form1->ImageEnView2->Assign (Form1->ImageEnViewPES);
Form1->ImageEnView2->Proc->Crop (x1-5,y1-5,x2-5,y2-5);
Form1->ImageEnView1->IO->LoadFromFile(filename);
Form1->ImageEnView1->Proc->Crop (x1,y1,x2,y2);
double dPer = Form1->ImageEnView1->Proc->CompareWith(Form1->ImageEnView2->IEBitmap, NULL);

return (dPer >= percent);
}

Вызов этой функции выглядит так:

if (ImgEq(0.98, “points-2012.bmp”,410,390,700,500)) { … }

if (ImgEq(0.97, “mlo-message-2012.bmp”,750,230,950,520))  { … }

if (ImgEq(0.98, “cup-menu.bmp”,350,700,520,870))   { … }

Ну все! Теперь наша программка умеет определять текущий режим, в котором находится игра. Осталось только научиться передавать туда нужные комбинации клавиш. Так как нам нужно делать эмуляцию в DirectX приложении, то PostMessage/kbdevent тут работать не будут, необходимо передавать сканкоды с помощью SendInput(). Для того, чтобы можно было красиво описывать последовательности нажатий вызовами типа Key(DIKEYBOARD_X), я сделал такую функцию:

void Key ( int key)
{
INPUT input;
memset(&input,0,sizeof(INPUT));
input.type=INPUT_KEYBOARD;
input.ki.wScan = key; // direct-input scancode
input.ki.dwFlags=0;
SendInput(1,&input,sizeof(INPUT));
Sleep(50);
input.ki.dwFlags=KEYEVENTF_KEYUP;
SendInput(1,&input,sizeof(INPUT));
}
А что дальше?  А дальше уже чистое творчество. Мой бот для PES2011, например, умеет определять все ситуации и на них реагировать - обрывы связи, служебные сообщения и т.п., умеет определять счет в игре и в зависимости от него посылать комбинации клавиш для смены тактики игры. :)  А так же протоколирует читеров (игроков, которые при неудачном исходе матча к концу игры “портят соединение” так, чтобы матч был аннулирован).

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

Комментариев: 2 »

   rss Февраль 1st 2012: Обо всем

SSD диск? Да, оно того стоит!

В очередной раз вспомнил я про твердотельные накопители и задумался - а вдруг все-таки я замечу разницу. Сначала были очень большие сомнения - компьютер у меня работает круглосуточно, а перезагрузки бывают раз в несколько недель. А оперативки в 8 гигабайт вроде бы для всего хватает пока. Но я все-таки решил прочитать еще несколько статеек на тему SSD и обсуждения на “хабре”, параллельно представляя возможную конфигурацию системы. В итоге решил - а почему бы и не попробовать?

Прикинув какой объем диска меня устроит, я заказал Intel® SSD 320 Series на 80GB (2.5in, SATA 3Gb/s, 25nm, MLC)). Порадовало, что в комплекте шли крепления  для установки в стандартный 3.5” отсек. Пользуясь случаем, включил заодно в биосе AHCI для SATA,  установил с нуля Wn7-64bit и … начал поражаться скоростью отклика системы. Можно было бы предположить, что дело только в чистой системе, но нет. Сейчас уже снова в фоне у меня висят куча привычных мне приложений, но комфорт в работе ощущается намного больший, чем раньше.

Если интересно - по индексам производительности  Win7 теперь считает хард-диск самым широким местом, а не самым узким. Он имеет индекс 7.7, когда все остальное - 7.2.

На 15-й день использования подтвердилось то, что мне такого объема для системного диска будет более, чем достаточно. Сейчас около 70% диска свободно, а как основное “файлохранилище” используются остальные три винта SATA (1TB+1TB+750GB).

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

Sequoia View

Кроме того, теперь я настроил автоматическое резервное копирование целиком всего системного диска, что намного удобней, если его объем лишь 80 гигабайт.

В общем, даже если ваша система работает в режиме 24х7,  и оперативки вам хватает с головой - все равно стоит задуматься - возможно, SSD-диск сможет заметно добавить комфорта в работе.

Комментариев: 9 »

   rss Январь 31st 2012: Обо всем