08 ноември, 2009, 15:21 - SEO Оптимизация


Както бяхме обещали в поста ипотпал спам състезание и в няколко форума, пускаме малко информация относно това как регистрирахме близо 800 участника за томболата за лаптопа във SEO състезанието ипотпал.

Защо го направихме? Ами правилата го позволяваха, а след като правилата го позволяват и можеше да бъде сравнително лесно експлоитнато, защо да не го направим? Показахме, че можем и ни беше забавно докато го правихме.

Какво беше необходимо да се направи? Формата за регистрация е проста, по-голямата част от полетата можеха да бъдат твърдо кодирани (например името, потребителя и паролата), но други беше необходимо да са уникални: e-mail и URL. За целта имахме нужда от много URL-и и e-mail-и.

Проблема със URL-a беше лесен: един DNS A запис *.nolimitdir.com към 85.187.35.150 + малко mod_rewrite и бяхме готови. Проблема със e-mail-ите беше малко по-сложен, но и той беше бързо решен. Пуснахме един CATCH ALL на e-mail-ите на nolimitdir.com, което дефакто представляваше един e-mail alias * (at) nolimitdir.com към точно един определен e-mail.

Проблема със линковете и съдържанието на страниците: Събрахме всички линкове които се пускат и ги добавихме, а страничката която сложихме представлява нещо подобно на това:

$seed = crc32($_SERVER['HTTP_HOST']);
$txt = file_get_contents('utf_dumi.txt');
$txt_ex= explode(' ',$txt);
srand($seed);
shuffle($txt_ex);
$num = rand()%100 + 100;
for($i = 0; $i < $num ; $i ++)
{
echo $txt_ex[$i] . ' ';
}

След подготовката за регистрациите остана само един проблем - самите регистрации, и понеже сме доста мързеливи, някак си нямахме особено голямо желание да ги правим на ръка. Заради това реализирахме набързо една система за автоматични регистрации. За целта избрахме C#, понеже там кода за работа със http излизаше под 50 реда (има си готов компонент). Набързо спретнахме GET-а:

HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create("http://www.myvideo-box.com/contest/index.php");
myWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)";
WebResponse myWebResponse = myWebRequest.GetResponse();
Stream ReceiveStream = myWebResponse.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
StreamReader readStream = new StreamReader(ReceiveStream, encode);

и POST-а на формата:

string postValues = "name=Dinko%20Sotirov" +
"&username=MacTep" +
"&pass=123456789" +
"&email=ipotpal" + num + "@nolimitdir.com" +
"&url=http%3A%2F%2Fipotpal" + num + ".nolimitdir.com%2F" +
"&skype=" +
"&icq=" +
"&is_registered_user=" +
"&agree=on" +
"&captcha=" + Convert.ToString(ResultCode) +
"&result=" + Result +
"&code=" + Code +
"&submit=%D0%97%D0%B0%D0%BF%D0%B8%D1%88%D0%B8%20%D0%BC%D0%B5";

seoReg.ContentLength = postValues.Length;

// Write the request
StreamWriter stOut = new StreamWriter(seoReg.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(postValues);
stOut.Close();

// Do the request to get the response
StreamReader stIn = new StreamReader(seoReg.GetResponse().GetResponseStream());
strResponse = stIn.ReadToEnd();
stIn.Close();

Остана само един проблем - имаше CAPTCHA. Първата ни мисъл беше: "Лесна е за OCR", ще я разбием сравнително лесно. Е да, ама не! Защо да се мъчим като ни даваха резултата директно, а именно:

Regex regResult = new Regex("(?<=<input type=\"hidden\" name=\"result\" value=\")([0-9]*)(?=\">)");
Regex regCode = new Regex("(?<=<input type=\"hidden\" name=\"code\" value=\")(.*)(?=\">)");
string Result = regResult.Match(strResponse).Value;
int ResultCode = Convert.ToInt32(Result);
string Code = regCode.Match(strResponse).Value;

И с приблизително този код бяхме готови да пуснем първата версия на бота. Пробвахме я работеше, остана само да пуснем кода да се вика автоматично. Решихме че няма смисъл да товарим излишно сървърите на организаторите и за целта пуснахме един прост таймер:

timer1.Interval = rand.Next(30000,75000);

Пуснахме бота, работеше чудесно... в продължение на малко повече от 1 час...

Първа промяна на CAPTCHA-та: умножиха резултата който показват във формата по едно число. Време за реакция от наша страна - 5 минути и бота отново работеше.

Следващата промяна беше по сложна, хешираха очаквания резултат и вече не можехме еднозначно от полето което ни даваха да определим какъв трябва да бъде резултата... Тогава решихме да пробваме какво ще стане ако всеки път подаваме един и същ код? Ами стана, номера мина! Така в продължение на няколко часа бота успяваше непрекъснато да прави регистрации. Бяха добавяни нови полета към формата за регистрация, старите бяха променяни, но винаги номера с един и същ код минаваше.

Тогава около 450-500 регистрация банаха IP-то, на което беше пуснат бота. Сайтове със проксита много... Първо прокси - втори бан, второ прокси - трети бан... Регистрациите станах над 700... взе да ни става скучно, всяко прокси което слагахме беше баннвано буквално след по-малко от 10-15 регистрации. Тогава се отказахме решихме малко да поизчакаме организаторите да решат да заспят, но... Сложиха ReCaptcha... А това ако успеем да го разбием, няма да се занимаваме с регистрациите точно тук.




Ако този пост ти харесва можеш да го споделиш в:
Share on Facebook  
08 ноември, 2009, 16:01
Така се прави момчета ;)... гаранция и влади участва тук нали :D
08 ноември, 2009, 16:21
Дам, то той ги е писал повечето неща. Аз само бълвах идеи и още 3-4 дреболийки :)
08 ноември, 2009, 16:22
Браво момчета! Добре се сетихте
08 ноември, 2009, 16:48
Съвсем страничен въпрос. Какви пари върви (бихте платили) за код който преодолява ReCaptcha?
08 ноември, 2009, 16:49
хахаха
бобрееее бе
следващия път просто организаторите ще променят правилото: томболата ще е м/у уникалните регистрирани лични имена и ду хай дуду (и на англ. do hi do do)
За този път просто ще приемат че изглеждат глупаво и това е....

08 ноември, 2009, 16:54
@Киро
Зависи от много фактори (например: процент на успеваемост, време за решение и др.)
Имаш ли конкретно предложение?

@аз
Тогава ще сме съгласни с правилата, а дори да не приемат такова правило, надали ще направим същото нещо - не ни е интересно вече ;)
08 ноември, 2009, 16:58
@аз
Доколкото разбрах участие следващия път ще вземат само сайтове в индекса на google :D
08 ноември, 2009, 17:01
@MacTeP
че индекса проблем ли е? :P
08 ноември, 2009, 17:41
Аз пък не разбрах защо са те баннали след като не нарушаваш правилата?
08 ноември, 2009, 17:54
@Марто
Анти-спам защита :) Не нарушаваме правилата с регистрациите, но те си пазят сървара, да не си спамим :)
08 ноември, 2009, 20:48
vha, жив ли си ве :)) гледам пак хубави работи си писал :) евала!
08 ноември, 2009, 21:21
Не ми е проблем да разработя десктоп приложение - занимавал съм се професионално с далеч по трудни неща в същата област. Проблема е дали ще се рентира труда по разработката и то сериозно и най-вече по подръжката и разработка на контрамерки при реакция. Дали ще е платена оналйн услуга или нещо друго - там ми куца. Успеваемост - около 15..20% на опит. Там някъде. Затова и трябва да се разработи интерфейс, който да позволява на ползвателя на услугата да подава ново изображение при неуспешно разпознато такова. А бе наясно сте. Вие ме ориентирайте какви пари могат да се вадят, аз ще се заангажирам при интерес със самостоятено разработване.
08 ноември, 2009, 21:51
@Киро
В момента на първо четете ми хрумват два варианта за монетаризиране на разбита рекапча:
1. СПАМ
2. СПАМ - подбиване на цената на индийците в пъти (дори при 10%, ако изчислителните ресурси са малки можеш да предложиш 100пъти по-ниска цена от тях и хората ще са доволни)

Относто поддръжката и контра мерките:
Какви контра мерки?
Ако идеята ти е разчетеш текста от картинката там контра мерки не би трябвало да се появят. Рекапча ползват сканирани изображения които не са успели да минат през OCR софтуер, и за да е по сигурно допълнително са ги влошили. Аз лично нямам голям опит с image processing, а опитите ми за разбиване на капчи се изчерпва със малко хистограми (за сегментиране) и в последствие със крос корелация да търся символите. Номера минава на слаби капчи, но изчислителния ресурс беше леееекооо огромен.
Ако имаш нещо друго в предвид, сори но не разбрах от поста ти с какво точно по-сложно си се занимавал.

П.П. e-mail-а който си обявил при предните постове истински ли е? Ако не е, можеш посочиш истинския в полето "Имейл" със следващия си отговор, за да можем да се свържем с теб, за да не говорим публично.
09 ноември, 2009, 01:26
Ами остава да имате малко късмет (или по-скоро да нямате карък) и ще получите нещо заслужено за цялата тая импровизация :)
09 ноември, 2009, 10:35
Дано, че аз какъвто съм карък... :)
09 ноември, 2009, 11:34
Стиа се оплаква! :) Инъче, отностно:
"а целта избрахме C#, понеже там кода за работа със http излизаше под 50 реда (има си готов компонент). "

Много бързо и лесно можеше да си ползвате РХР, има си цУРЛ (cURL), който е перфектен. Дори може би, щеше да е по-малко от 50 реда и нямаше да търсите проксита :P ...
Има достатъчно фрий хостинги :D

Ама щом вха го е писал не му е било кой знае колко сложно :)
Айде и успех с тегленето :)
09 ноември, 2009, 20:11
@Hammer
ама пък тогава трябваше да регвам фрии хостинги...
Аре няма нужда, тва го мразя лекооооо многоооо :)
Също така леко ми е трудно дебъгването на PHP, имах готов код за WebHttp компонента на C#, а и най вече не съм привърженик на неща които трябва да работят дълго време да се правят на PHP.
Да добавя ли и факта, че последно cURL съм ползвал преди повече от 2 години?
10 ноември, 2009, 13:22
Направо ми става лошо, колко енергия, за какви неща се хаби :D
10 ноември, 2009, 16:12
И на мен така... като гледам колко народ ходят по блоговете и спамят за единия линк :)
10 ноември, 2009, 16:24
Хахаха, изкъртил си ги :D:D:D Евала за поста, за идеята и за всичко
11 ноември, 2009, 09:50
@vha: Т.е. мързяло те е, като куче :D
12 декември, 2009, 12:20
само така момчета :) евала за идеята

Добавяне на коментар











Специални възможности: