Code review #2


d_x умотал в Лас-Вегас просаживать годовой бюджет маленькой африканской страны, а значит, за неимением лучших тем (точнее они есть, но я лентяй), пришло время для очередного ревью. Кстати, товарищи, неужели никто не пишет на C/C++/Asm? В запросах сплошной Perl.
Читать далее «Code review #2»

Code review #1


Вот и наступило время для первого обзора исходников от Kaimi и dx. Не все исходники попали в этот пост, потому что прислано их было немало. Не огорчайтесь, если не увидели своего творения, мы постараемся включить его в следующие выпуски!
Читать далее «Code review #1»

Windows — автоматизация задач с помощью скриптов. Интересные возможности WSH

Пожалуй, многие знают, что Windows начиная с версии 98 имеет по умолчанию в своем составе Windows Script Host (WSH), который позволяет исполнять скрипты на языках VBScript и JScript, но далеко не каждый хотя бы раз пользовался этой возможностью. В этой статье я приведу примеры полезных сниппетов и скриптов для WSH и попробую убедить вас в том, что вещь это действительно стоящая. Я также расскажу об очень занимательных и полезных возможностях WSH, о которых практически никто не знает, и информацию о которых в интернете найти весьма непросто.

Читать далее «Windows — автоматизация задач с помощью скриптов. Интересные возможности WSH»

Пишем простой асинхронный парсер

Многие разработчики типового говнософта, ориентированного на работу с вебом, зачастую используют потоки для того, чтобы получить выигрыш в скорости. Данный подход, конечно, обладает своими плюсами, но все же не является оптимальным, например, с точки зрения потребляемых ресурсов системы (особенно когда речь идет о потребителях, любящих ставить сразу "тыщу потоков").
Альтернативным и общеизвестным способом ускорения работы софта является асинхронная модель, то есть модель, при которой все вызовы методов являются неблокирующими. В данной статье я рассмотрю простой пример, который будет использовать асинхронные веб-запросы.
В качестве примера будет написан парсер идентификаторов приложений с Android Market, который пригодится в готовящейся статье, посвященной добычи трафика с маркета. Для простоты будем использовать модуль AnyEvent, он упрощает реализацию асинхронной событийной модели. Итак, приступим.
Читать далее «Пишем простой асинхронный парсер»

Распаковываем Perl-скрипты, обработанные PerlApp

Как известно, для Perl, впрочем, как и для других скриптовых языков, существуют утилиты, позволяющие создавать из скрипта полноценный exe-файл, который можно переносить на другие компьютеры и запускать, даже если интерпретатор языка на них не установлен. В случае с perl'ом наиболее популярными утилитами являются Perl2Exe и PerlApp.
Принцип работы этих утилит довольно прост и состоит в упаковке внутрь результирующего exe-файла библиотеки перла, основного скрипта и зависимых модулей. Содержимое, естественно, сжимается, шифруется (с помощью XOR) и не хранится в открытом виде внутри файла. Исследуем чуть подробнее внутреннее устройство результирующих exe-файлов, которые получаются с помощью PerlApp.
Для начала, определим с помощью чего сжимаются данные. Это сделать довольно просто, например, с помощью PeID (с плагином Krypto Analyzer) или какого-нибудь hex-редактора. В случае с PeID все тривиально: указываем путь к файлу, запускаем плагин и получаем список найденных крипто-сигнатур.

С hex-редактором тоже просто: открываем нужный файл, нажимаем Alt+F6 (справедливо для Hiew), получаем список строковых ресурсов, гуглим эти строки.

Таким образом определяем, что для сжатия используется библиотека zlib, причем довольно старая версия - 1.1.4. Конечно, можно начать искать, где именно в файле хранятся сжатые данные, но мне захотелось пойти другим путем.
Читать далее «Распаковываем Perl-скрипты, обработанные PerlApp»

Пишем простое клиент-серверное приложение на Perl

В этой статье я рассмотрю создание простого чата на Perl. Чат будет состоять из консольного сервера и клиента с GUI на основе Tk. Для начала реализуем серверную часть.
В серверной части мы не будем использовать процессы или потоки, а вместо этого воспользуемся мультиплексированием. Мультиплексирование довольно просто реализуется с помощью модуля IO::Select, который является классом-оболочкой над системной функцией select.
Функция select позволяет определить готовность дескриптора к записи/чтению. Также стоит отметить, что при использовании select следует избегать использования блокирующих вызовов, как, например, print, read, вместо них необходимо использовать syswrite, sysread.
Читать далее «Пишем простое клиент-серверное приложение на Perl»

Regexp HTTP-proxy

Недавно для своих нужд написал небольшой прокси-сервер, заменяющий содержимое ответа по заданному регулярному выражению. Интерфейс реализован на основе Tk, сам сервер построен на основе модуля HTTP::Proxy, так как в нем есть довольно удобная система фильтров.
Замена может производиться как по статическим строкам, так и по полноценным регулярным выражениям. Если в регулярном выражении производится захват некоторого фрагмента, то доступ к нему в подставляемом тексте осуществляется стандартным для перла способом ($1, $2, ...).

Скачать: proxy_regex

В процессе разработки столкнулся со следующими проблемами, на которые рекомендую обратить внимание:
1. При использовании Tk вместе с методами fork или async, необходимо закрывать хендлы STDIN и STDOUT. В противном случае, Perl будет крешиться (фича или баг библиотеки encoding.dll, если не закрывать хендлы, то в ней вызывается метод, приводящий к попытке разыменования указателя на недопустимую область памяти).
2. HTTP::Proxy по-умолчанию довольно специфично работает с кодировками, поэтому стоит использовать заготовки fizbin'a с perlmonks.
3. При запуске win* используется HTTP::Proxy::Engine::NoFork, все бы хорошо, но если существует потребность производить остановку сервера по сигналу, то содержимое метода run следует слегка модифицировать. Изначально начало метода выглядит так:

Т.к. аргумента у метода can_read нет, то данный вызов является блокирующим. Соответственно, цикл из метода start (модуль HTTP::Proxy)

не сразу прекращается при получении сигнала. Поэтому я добавил аргумент в методе can_read для своевременной реакции на сигналы.
4. Ещё один неприятный момент состоит в том, что после выхода из цикла прокси не закрывает сокет. Решается добавлением строки после цикла.

Пишем на русском в Native Mode

Недавно у меня возникла необходимость писать на русском в нативном приложении, но, как оказалось, добиться этого не так-то просто.
Для того, чтобы получить возможность вывода русских букв, нужно разобраться, где и в каком формате хранятся глифы символов, которые отображаются на экране. Если подробнее рассмотреть функцию winx_printf (в своем проекте я использовал ZenWINX и NDK для упрощения разработки приложения), то мы увидим, что она в свою очередь вызывает winx_print, далее вызывается NtDisplayString, которая преобразует входящую строку с помощью RtlUnicodeStringToOemString, далее идет вызов функции InbvDisplayString, которая обращается к VGA Boot Driver (bootvid.dll).
Читать далее «Пишем на русском в Native Mode»

Языки программирования для быстрого заработка

Эта небольшая статья предназначена в первую очередь для тех людей, которые хотят определиться, какой же язык программирования изучить, чтобы и времени заняло немного, и написать на нем что-то более-менее серьезное можно было, и при этом еще и заработать. Заработок, конечно, подразумевается такой - написание небольших программ для рассылок, всевозможных чекеров-реггеров, словом, автоматизация работы с web. Если зайти на крупные форумы, такие как antichat.ru, zloy.org, xakep.ru и т.д., мы увидим большое количество объявлений "программистов" с предложениями своих услуг. На деле лишь немногие способны написать действительно стоящий продукт, и потребители знают, что заказывать написание софта следует с осторожностью, иначе можно случайно нарваться на вечно глючащее и плохо работающее г*вно. Разумеется, покупатели этого не хотят и в первую очередь требуют от исполнителя некоторое количество положительных отзывов, примеры работ и демо-версии.
Итак, мы плавно переходим к вопросу о том, как можно успешно закрепиться на рынке производства подобного софта. В первую очередь следует изучить годный язык программирования (об этом я расскажу далее). После некоторого освоения языка очень неплохо написать какую-либо несложную программу, демонстрирующую ваши возможности, которая была бы нужна людям. Конечно, нужно стараться все сделать хорошо, иначе потребители бесплатной программой пользоваться не будут, не говоря о том, чтобы в дальнейшем заказать у вас софт. По каким-то причинам многие разработчики делают откровенную лажу, а потом еще возмущаются, что пользователи недовольны и ничего не покупают. Второй вариант - делать демо-версию платного софта. Она должна иметь заранее урезанный функционал, чтобы ее нельзя было взломать, а полная версия должна продаваться независимо. Требование к хорошему качеству программы здесь также предъявляется.
Читать далее «Языки программирования для быстрого заработка»

Simple Mail.ru Regger

Простой автоматический регистратор почтовых ящиков в сервисе mail.ru. Написан на Perl.

[+] Многопоточность
[+] Генерация логинов/паролей произвольно или из файла
[+] Имя и фамилия берутся из файлов, остальные поля заполняются случайным образом
[+] Поддержка antigate
[+] Возможность выбора используемых при регистрации поддоменов (mail.ru, bk.ru, inbox.ru, list.ru)
[+] Поддержка SOCKS5/HTTP прокси

Настройка производится путем редактирования файла config.txt.
Для работы необходим ActivePerl и модули GD, GD::Tiler (GD::Tiler есть в комплекте).

Скачать: reg_mail.