RSS to VK & OD и API ВКонтакте

Программа для публикации RSS-ленты на стену ВКонтакте и в группу Одноклассники.

RSS to VK & OD Читать полностью »

Прокрутка компонентов, не имеющих фокуса ввода

Колесо мыши используется для прокрутки. Когда прокручиваемый компонент (TMemoTListView,TTreeView,…) Читать полностью »

Подсказчик для игры «Сейф» (Igrun.com)

На небезызвестном сайте Igrun.com есть замечательная игра «Сейф». Читать полностью »

Количество вхождений подстроки в строке

Несмотря на то, что библиотеки SysUtils и StrUtils предоставляют сотни процедур для работы со строками, всегда есть такие, которые «отсутствуют».  Читать полностью »

Отправка email через скрипт

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

Для этого нужен хостинг с правом выполнять скрипты php и отправлять email (бесплатные этим похвастаться не могут, во всяком случае, не подскажу, есть ли такие).
Итак, создаем php-файл со следующим содержимым:


Всё просто: скрипт возвратит TRUE при успешном отправлении письма. Вместо адрес_получателянужно вписать адрес получателя письма.

Скрипт разбирает параметры запроса:

  • fromname — от кого (можно вписать название программы, например)
  • tema — тема письма
  • mes — текст письма

Теперь в программе пишем запрос к этому скрипту:

var data:tstringlist;

 data:=tstringlist.Create;
 data.Add('fromname=От кого письмо');
 data.Add('tema=тема письма');
 data.Add('mes=текст письма');
 idhttp1.post('адрес_скрипта',data);

Итог:

Отправка email через скрипт

WordPress P&E

Программа для определения используемых плагинов в блоге на WordPress и предупреждения о возможных уязвимостях в них.

Wordpress P&E

Возможности:

  • Определяет версию WordPress и выводит возможные уязвимости (две последние по дате)
  • Определяет используемые в блоге плагины (если они есть в базе) и их версии
  • Показывает, есть ли для найденных плагинов уязвимости (если версия плагина не определена, то отображается сообщение о возможной уязвимости)

Wordpress P&E

База обновляется по нажатию кнопки обновления.

Если не было найдено ни одного плагина, можно попробовать настройки «Считать плагином Код 302″ или «Считать плагином Код 403″. В результате, либо получите используемые плагины, либо опять ни одного, либо все подряд. Попробовать стоит)

На данный момент база содержит все плагины, имеющие уязвимости, а также сотню самых популярных.

Twitter Regger

Программа для регистрации аккаунтов на сервисе twitter.com. С исходниками. Читать полностью »

Как полезно иногда пользоваться сниффером

Да, полезно. А еще полезно быть в курсе новостей)
Например Mail.ru Agent. В апреле вышла версия 5.8 с поддержкой протокола XMPP. Кроме того в своём блоге на habrahabr Mail.ru Group было заявлено следующее:

идея заставлять пользователя вводить в настройках Mail.Ru Агента некие «магические» идентификаторы (с которыми он никогда не сталкивается в повседневной жизни) показалась нам неудачной, так что мы сразу решили поддержать авторизацию в XMPP по тем же логину и паролю, которые используются для авторизации на вебе.

Со Вконтактом все оказалось просто – мы связались с нашими коллегами, и они предоставили нам простой API, возвращающий idXXXX по «вебовому» логину/паролю.

О! Mail Agent связывается с ВКонтакте по какому-то API. Устанавливаем агент, запускаем, включаем снифер и пытаемся добавить учётную запись ВКонтакте с неверным паролем (в диалоге добавления есть удобная кнопочка «Проверить учетную запись»):

Снифер

Снифер

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

Снифер

Совсем другой текст ответа, сообщающий, что email не подтвержден (not confirmed). Пробуем теперь накидать программу, имитирующую запрос Mail.ru Agent’а.
Как и следовало ожидать при отправке корректного email’а ответом придет «неверная подпись запроса», а если отправить некорректный email, то придет «Email not confirmed«. Значит что сервер сначала проверяет есть ли такой email в базе, а лишь потом — подпись запроса.
Таким образом, можно легко определять, зарегистрирован ли такой email (логин) во ВКонтакте или же нет.

Еще одна интересная программа: Digsby, клиент для общения через ICQ, GMail, Live Messenger, Yahoo ID и т.д.
Начнем с ICQ. Выбираем этот тип аккаунта, вводим данные, сохраняем, смотрим:

Снифер

Снифер

Видим вариант авторизации для ICQ. Хотя ничего интересного он не несёт.

Live Messenger (email’ы live.com, hotmail.com и т.д.). Здесь два запроса. Хотя возможно первый и не требуется) Не стал дальше копаться. Может быть возможен и брут.

Снифер

Дальше GMail. Вводим, сохраняем смотрим:

Снифер

Снифер

Один единственный запрос без всяких токенов и т.д. Удобно для брута. Правда бан не заставит себя ждать, но ведь это не проблема, если использовать прокси). При неверных данных сервер вернет код 403, а при верных в ответе будут параметры SID и LSID.

Остальные (Twitter и Yahoo) не так интересны из-за защитных токенов в запросах.

Ну и на десерт исходник программки, которая показывает, зарегистрирован ли введенный email ВКонтакте и верна ли пара email-пароль для GMail.

Снифер

Delphi — Indy. Отправка письма с вложением

Как, используя Delphi и компоненты Indy, отправлять почту с вложением и с корректным отображением русского текста? Очень просто. Читать полностью »

Склеиваем изображения средствами Delphi

Иногда требуется соединить (склеить) в программе несколько изображений. Мне такое потребовалось при написании программы для регистрации email’ов.

Сделать склейку поможет нижеследующая процедура:

procedure Glue;
var J1,J2,J3 , JSum: TJPEGImage;
    r1,r2: TRect;
    B1, B2, B3, BSum, BSum2: TBitmap;
begin
 J1:= TJPEGImage.Create;
 J2:= TJPEGImage.Create;
 J3:= TJPEGImage.Create;
 JSum:= TJPEGImage.Create;

 BSum:= TBitmap.Create;
 BSum2:= TBitmap.Create;
 B1:= TBitmap.Create;
 B2:= TBitmap.Create;
 B3:= TBitmap.Create;

 J1.LoadFromFile('1.jpeg');
 J2.LoadFromFile('2.jpeg');
 J3.LoadFromFile('3.jpeg');
 B1.Assign(J1);
 B2.Assign(J2);
 B3.Assign(J3);


 // BSum - склеиваем B1 и B2
 BSum.Width:= B1.Width+B2.Width;           // устанавливаем длину
 BSum.Height:= Max(B1.Height,B2.Height);  // устанавливаем ширину

 r1 := Rect(0,0,B1.Width-1,B1.Height-1);
 BSum.Canvas.CopyRect(r1,B1.Canvas,r1);

 r1 := Rect(0,0,B2.Width-1,B2.Height-1);
 r2 := Rect(B1.Width,0,B1.Width+B2.Width-1,B2.Height-1);
 BSum.Canvas.CopyRect(r2,B2.Canvas,r1);


 // BSum2 - склеиваем BSum и B3
 BSum2.Width:= BSum.Width+B3.Width;           // устанавливаем длину
 BSum2.Height:= Max(BSum.Height,B3.Height); // устанавливаем ширину

 r1 := Rect(0,0,BSum.Width-1,BSum.Height-1);
 BSum2.Canvas.CopyRect(r1,BSum.Canvas,r1);

 r1 := Rect(0,0,B3.Width-1,B3.Height-1);
 r2 := Rect(BSum.Width,0,BSum.Width+B3.Width-1,B3.Height-1);
 BSum2.Canvas.CopyRect(r2,B3.Canvas,r1);

 JSum.Assign(BSum2);
 JSum.SaveToFile('4.jpeg');

 B1.Free;
 B2.Free;
 B3.Free;
 BSum.Free;
 BSum2.Free;
 J1.Free;
 J2.Free;
 J3.Free;
 JSum.Free;
end;

Она склеивает три произвольных изображения в одно. Процедура универсальна, изображения могут быть разного размера.

Немного по алгоритму:

 

  • Переводим изображения jpeg в bmp
  • В переменную BSum копируем прямоугольную область первого изображения и правее — прямоугольную область второго изображения
  • В переменную BSum2 копируем прямоугольную область BSum и правее — прямоугольную область третьего изображения
  • Сохраняем BSum2 в файл jpeg

 

Для процедуры необходимо в uses прописать jpeg и Math

Прилагаю также исходник программы, использующей эту процедуру

Склейка jpg