вторник, 2 марта 2010 г.

понедельник, 22 февраля 2010 г.

torrents.ru => rutracker.org

=>

Прописал у себя в файле hosts (зеркало страницы):
195.82.146.114 torrents.ru
195.82.146.120 bt.torrents.ru
195.62.63.163 bt1.torrents.ru
195.82.146.121 bt2.torrents.ru
195.62.62.241 bt3.torrents.ru
195.82.146.123 bt4.torrents.ru
Теперь живу как и раньше))

Местоположение файла hosts:

Windows 95/98/ME: WINDOWS\hosts
Windows NT/2000: WINNT\system32\drivers\etc\hosts
Windows XP/2003/Vista/7: WINDOWS\system32\drivers\etc\hosts
Читать дальше

суббота, 20 февраля 2010 г.

Поговорим об SMS Protocol Data Unit

Решил поближе познакомиться с форматом SMS сообщений. Далее я напишу несколько закономерностей/законов, которые помогут мне написать достойную библиотеку c виртуозной архитектурой для работы с SMS PDU. Только учтя все особенности формата, возможно создать в меру сбалансированную библиотеку. Под балансировкой я понимаю выбор достаточного числа классов, структур, перечислений, способов взаимодействия компонентов между собой и интерфейса для использования библиотеки.


В статье используются сокращения:
SME - Short Message Entity (Модуль мобильного устройства)
SMSC - SMS-Centre (Центр обработки сообщений)
PDU - Protocol Data Unit (Протокольная единица данных)

В первую очередь примечательно, что имеется 6 типов сообщений:
+ SMS-SUBMIT
+ SMS-SUBMIT-REPORT
+ SMS-DELIVER
+ SMS-DELIVER-REPORT
+ SMS-STATUS-REPORT
+ SMS-COMMAND (посылка специальных команд от SME к SMSC)

Использование первых пяти типов поясняет эта схема:
SMS PDU Types

Тип сообщения хранится в 2-х битах первого байта. Неправда ли, маловато 2-х битов для хранения 6 возможных значений? Конечно мало, но если вы знаете кто это сообщение сгенерировал, то вам остаётся прочитать из 2-х бит всего 3 возможных значения.

Типы сообщений от SME:
( 0 1 ) SMS-SUBMIT
( 0 0 ) SMS-DELIVER-REPORT
( 1 0 ) SMS-COMMAND

Типы сообщений от SMSC:
( 0 1 ) SMS-SUBMIT-REPORT
( 0 0 ) SMS-DELIVER
( 1 0 ) SMS-STATUS-REPORT

Первый байт всегда содержит флаги/индикаторы. Все данные пакета измеряются в байтах, некоторые переменной длинны. То, какие флаги присутствуют в пакете - определяется типом сообщения. Присутствующие поля определяются типом пакета и флагами.

Принципы планируемой библиотеки:
1) Каждому типу сообщения - свой класс, наследованный от базового. Каждый из них будет иметь свои флаги/индикаторы и обязательные поля. Некоторые флаги/индикаторы будут реализовываться отдельными классами, и будут иметь указатели на классы связанных с ними полей. Базовый класс будет уметь определять тип сообщения и создавать экземпляр соответствующего класса. [Напрашивается применение предыдущего поста про "кастование от родителя к наследнику"]
2) Классы храня данные только в самом PDU. (никаких промежуточных полей)
3) Каждое из полей наследуется от универсального класса "единицы данных". Имеет встроенные методы, по изменению размера и поля и перемещению данных в памяти. Обладает указателем на следующую "единицу данных", при изменении своего размера, заставляет двигаться следующую за ним "единицу данных".
4) [В разработке]


Читать дальше

пятница, 19 февраля 2010 г.

Кастование от родителя к наследнику

Класс наследуется от некого базового класса-шаблона, передавая своё имя в качестве параметра шаблону. Базовый класс имеет метод, статически кастующий указатель на экземпляр конкретного класса к шаблонному типу. Таким образом возможно удобное статическое кастование от родителя к наследнику. И как следсвие, вызов переопределённых в наследнике методов из базового класса без их виртуализации. (вольное описание приёма из библиотеки sl)

Приблизительный код:
////////////////////////////////////////////////////////////////

template <typename T>
class SelferT
{
public:

T &GetSelf()
{
return static_cast<T &>(*this);
}

const T &GetSelf() const
{
return static_cast<const T &>(*this);
}

};

////////////////////////////////////////////////////////////////

class RefCount : protected SelferT<T>
{
public:

// Конструктор копирования - увеличивает счётчик ссылок
RefCount(
IN const RefCount &rhs
) : _refCount(rhs._refCount)
{
// ...
}

// Оператор присваивания - увеличивает счётчик ссылок
RefCount &operator=(IN const RefCounted &rhs)
{
// ...
}

// Деструктор - уменьшает счётчик ссылок
~RefCount()
{
// ...

if (*_counter == 0)
GetSelt().OnDispose();
}

// Вызывается, когда число ссылок становится равно нулю
void OnDisposed()
{
}

};

////////////////////////////////////////////////////////////////

class A : public RefCount<A>
{
public:

// ...

// Вызывается, когда число ссылок становится равно нулю
void OnDisposed()
{
}

};

////////////////////////////////////////////////////////////////

Подсветка синтаксиса выполнена при помощи Notepad++




Если виртуализация методов класса позволяет добраться до последнего наследника базового класса, то данный метод позволяет добраться до конкретного наследника. С этим приёмом мы получили интерфейс в стиле Java, но без обязательного переопределения методов.

Ссылка по теме:
Преобразование ссылки на интерфейс для реализации класса в Delphi 2010

Читать дальше

понедельник, 8 февраля 2010 г.

понедельник, 4 января 2010 г.

Прикрутил Spoiler

Прикрутил к блогу спойлер by Ruby Brewed (Denis Neverov http://dotrb.blogspot.com)
Он будет весьма востребован в готовящейся в данный момент статье.



А здесь текст, который хотим сделать скрытым


Читать дальше

пятница, 20 ноября 2009 г.

Прятки в файловой системе FAT

Отличный способ без особых заморочек спрятать данные на флешке. Получить доступ к данным сможет только тот, кто знает специальный ключ. Ключом будет являться имя вашего каталога. Никакой специализированный софт для доступа не потребуется. Файловые менеджеры ваш каталог не покажут и не отобразят его содержимое поиском. Заинтриговал? Также Вы получите защиту флешки от вирусов, прописывающихся в автозапуск (в файл autorun.inf).

1. Для начала проверьте, что ваша флешка действительно имеет файловую систему FAT (FAT32, FAT16, FAT12). Если флешка отформатирована под NTFS - есть возможно переконвертировать файловую систему в FAT без потери данных(используя Partition Magic). Единственное, вы больше не сможете на ней хранить файлы объемом более 2Гб.

2. Создаем в корне флешки папку с именем "autorun.inf". Внутри папки autorun.inf создаем папку с секретным именем. Именно в ней и мы и будем прятать наши файлы, кто будет знать имя папки - тот и сможет в нее попасть. Вторичным эффектом будет защита флешки от самозапускающихся(прописывающихся в текстовый файл autorun.inf) вирусов. Убьем двух зайцев одним махом.

3. Скачиваем и запускаем низкоуровневый редактор жесткого диска. Я предпочитаю утилиту нашего соотечественника Дмитрия Cидopoва DM Disk Editor. Утилита сразу предлагает нам открыть диск. Отмечаем галочкой "Логические", а не "Физические" устройства и выбираем необходимый раздел(том) (рис. 1). И соглашаемся с диалогом автоопределения файловой системы (рис. 2).

5.07Кб
Рис. 1. Выбор раздела(тома) [5.07Кб]

5.29Кб
Рис. 2. Выбор файловой системы [5.29Кб]

4. Теперь в низкоуровневом просмотрщике жесткого диска (он сейчас находится в режиме просмотра "Директория FAT" - рис. 3) найдем строку с именем папки "autorun.inf". Обратим внимание на атрибуты директории: "----D--". Буквы слева направо отвечают за 6 атрибутов файлов в файловой системе FAT:
R - Read only
H - Hidden
S - System
V - Volume
D - Dir
A - Archive

7.45Кб
Рис. 3. Найдем строку с файлом "autorun.inf" [7.45Кб]

5. Внутри файловой системы атрибуты представлены битами внутри одного байта. Этот байт располагается сразу за 8-мью байтами имени и 3-мя байтами расширения файла. Атрибутов шесть, а битов в байте восемь. Значит два старших бита байта атрибутов не задействованы. Как показала практика, если хотя бы один из этих битов установлен, то с таким файловым объектом(файлом или папкой) ничего нельзя сделать стандартными средствами(большинством файловых браузеров). Такой файл нельзя ни открыть, ни удалить, ни переименовать. Предлагаю установить все биты в 1 кроме бита Volume, номер 4. Нехорошо давать этот атрибут кому не лень)) Значение байта атрибутов будем выставлять 0xF7.

6. В низкоуровневом просмотрщике устанавливаем курсор на строку с папкой "autorun.inf" (рис. 4). Переключаем вид: Вид->Шестнадцатиричный (F2). Смотрим на байт сразу за "AUTORUN INF", он равен 0x10. Установлен только один бит, пятый(если нумеровать с единицы) - он означает Dir. Нажимаем Правка->Режим редактирования (Ctrl+E). Ставим курсор на байт атрибутов и последовательно нажимаем клавиши F и 7 (рис. 5). Отлючаем режим редактирования так же как и включили его. И сохраняем изменения на диске: Правка->Записать изменения... (Ctrl+W). Закройте приложение DMDE.

7.50Кб
Рис. 4. Найдем байт атрибутов [7.50Кб]

7.54Кб
Рис. 5. Исправили байт атрибутов [7.54Кб]

Результаты:


Зайдите в корень флешки проводником и попытайтесь сделать что-либо с папкой autorun.inf (открыть, удалить, переименовать). Не получается, не так ли? Этого мы и добивались. Также у вас (и у большинства вирусов) не получится создать текстовый файл с именем autorun.inf.

Теперь чтобы зайти в свою секретную папку введите путь к ней в панели адреса. Например, F:\autorun.inf\secret_folder. Никому не говорите как называется ваша папка и большинство людей о ней даже не узнают.

Читать дальше