1 место C# Sharp vs WebBrowser

  • Автор темы Автор темы lexone
  • Дата начала Дата начала

lexone

Client
Регистрация
12.10.2012
Сообщения
420
Реакции
726
Баллы
93
Без имени-12.png





Делаем редиректы на post / get + размножаем одну ссылку на 1000 вариантов.


v297LOyspx0OrG.jpg


Скачать: https://yadi.sk/d/oGgaIGAAdWAMF


======================================
StringBuilder, String. Клеим и работаем со строками ...


1. Работаем с макросами.

292c670e2d.jpg


Код:
Развернуть Свернуть Копировать
var input = project.Variables["p"].Value;
var replacements = new Dictionary<string, string>()
    {
        { "[RANDOM]", project.Variables["qqqw"].Value },
        { "[WORD]", "Статья на форум)" }
    };

var outputBuilder = new StringBuilder(input);

foreach (var replacement in replacements)
{
    outputBuilder.Replace(replacement.Key, replacement.Value);
}

var result = outputBuilder.ToString();
return outputBuilder.ToString();

Конструкций может быть сколько угодно:

Код:
Развернуть Свернуть Копировать
    {
        { "[RANDOM]", project.Variables["qqqw"].Value },
        { "[WORD]", "Статья на форум)" },
        { "Вечером", "Утром)" },
        { project.Variables["url"].Value, project.Variables["qqq"].Value }
    };

Для чего нужен этот сниппет?
  1. Если вы делаете на зенки дорген и нужно разбавлять текст и конструкции шаблона макросами.
  2. Быстрые вызовы-макросы для любого постинга. Например, нужно оставить в комментах на ютубе рандомную ссылку в средине текста, но сам макрос будет прописан в текстовом файле (а от туда вы не вызовите переменную). Тут нам и поможет этот сниппет.
  3. Любое кол-во макросов в одном экшене
---------------------------

2. Замена и метод Replace
Код:
Развернуть Свернуть Копировать
string s = "Мама  мыла  раму. ";
string pattern = @"\s+";
string target = " ";
Regex regex = new Regex(pattern);
string result = regex.Replace(s, target);
return result;

Данная версия метода Replace принимает два параметра: строку с текстом, где надо выполнить замену, и сама строка замены. Так как в качестве шаблона выбрано выражение "\s+ (то есть наличие одного и более пробелов), метод Replace проходит по всему тексту и заменяет несколько подряд идущих пробелов ординарными.

Результатом обработки будет: Мама мыла раму. {вместо двух пробелов между словами, как было изначально} .
+ не забываем вместо слов подставлять переменные.

Код:
Развернуть Свернуть Копировать
string s = project.Variables["url"].Value;
string pattern = @"\s+";
string target = " ";
Regex regex = new Regex(pattern);
string result = regex.Replace(s, target);
return result;
Или вот вариант покороче:
Входная строка: test.test......t.test.pdf
Код:
Развернуть Свернуть Копировать
string filename = "test.test......t.test.pdf";
string newFilename = new Regex(@"\.(?!(\w{3,4}$))").Replace(filename, "");
return newFilename;
Результат: testtestttest.pdf

-----------------------

3. Обрезать, заменить , добавить.

Вход: Привет мир

Задача:
  1. Заменить мир на "world"
  2. На 7 символе вставить слово "компьютерный"
  3. В конец строчки добавить "!!!"
  4. удалить 6 символов, начиная с 1-го
Код:
Развернуть Свернуть Копировать
StringBuilder sb = new StringBuilder("Привет мир");
sb.Append("!!!");
sb.Insert(7, "Компьютерный ");
Console.WriteLine(sb);
// заменяем слово
sb.Replace("мир", "world");
Console.WriteLine(sb);
// удаляем 6 символов, начиная с 1-го
sb.Remove(0, 6);
Console.WriteLine(sb);
// получаем строку из объекта StringBuilder
string s = sb.ToString();
Console.WriteLine(s);
return s;


Результат: Компьютерный world!!!

========================================

API - подтверждение по смс. Принимаем и обрабатываем смс на тех сайтах, где его просят

Vm6k6a3ivZVK2Z.jpg


Для демонстрации работы я выбрал api от - http://smsvk.net/21-api-20b.html

Почему?

  1. Дешевые номера + часто их меняют в течении дня.
  2. Схожее api с сервисом - http://sms-area.org/ (если нужные номера кончились, то просто в hosts файле делаем переадресацию на нужный домен ).
  3. Нормальная тех.поддержка
  4. Очень быстро приходят СмС

Скачать: https://yadi.sk/d/ANyzsr7vdWCqu
Также решил привести пример полу-автоматического регера.

5bedfed970.jpg



Где от нас потребуется:

  1. Занести номера в текстовик (на которые будем принимать смс)
  2. Разгадать капчу (можно включить авто распознавание)
  3. Ввести код от смс
+ регистрация будет идти с разных ip адрессов.

Скачать: https://yadi.sk/d/ANyzsr7vdWCqu

===================================


Анализируем чужие программы в сниффере (перед этим проксируем их через 127.0.0.1:8888 - чтобы мог читать https наш снифер). И переписываем под зенку



404960.jpg





  1. Качаем FreeCap по этой ссылке - http://www.freecap.ru/files/freecap_setup.exe
  2. Качаем Fiddler - http://www.telerik.com/download/fiddler
Настройка:

1. Запускаем Freecap
2. Заходим в настройки
3. Прописываем свой локальный ip адрес.

13f46e321e.jpg


4. Убираем ненужные функции.

4d7f7565e0.jpg


5. Пропишем пути.



508e416652.jpg


----------------------------------------------------------

Теперь:

  1. Запустим Fiddler и начинаем анализ (по умолчанию фиддлер в боевой готовности.. поэтому кнопок старт жать не нужно).
  2. Делаем шаг 5, как на прошлом скрине
  3. Загружаем мыльники и нажимаем в программе (mailbox@reg) - чекать мыло на валидность
  4. Ждем пока набегут логи в Fiddler
7a2abde529.jpg




Как видим на скриншоте ниже...

  1. Мы взяли первый рандомный лог, который получили при анализе mailbox@reg в фиддлере
  2. Посмотрели куда он стучит
  3. Какие данные отправляет
  4. Повторили данный шаг в зенно с помощью экшена - "Post-запрос"
  5. Добавили обработку аккаунтов и логику на Good / Bad
73be600886.jpg



Скорость чека 1 аккаунта в 1 поток = 1 секунда.

А теперь представьте, сколько бы заняло времени такая автоматизация через эмуляцию браузера?

Скачать: https://yadi.sk/d/C4vHmXgDdWHWD
======================================

Чекер Вк аккаунтов.
----------------------------------------------------------

Наши действия:

  1. Запусаем Wincap
  2. Добавляем пути до программы (Brute&Checker Vk.com [API] 1.1)
  3. Запускаем Fiddler
  4. Запускаем Brute&Checker Vk.com [API] 1.1 и нажимаем на чек аккаунтов
----------------------------------------------------------

Что мы видим?

http|://oauth.vk.com:443/token?grant_type=password&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&username=79284332024&password=blablabla

client_id=2274003
client_secret=hHbZxrka2uZ6jB1inYsH


Первые два параметра (см.выше), скорее всего отвечают за уже созданное приложение в ВК... для использования внутреннего API vk. Можно заменить на свое, но не вижу пока смысла (работают эта два ключа больше года).

username=79284332024
password=blablabla

дУМАЮ все понятно))

-------------
Если наш пароль не валиден, то мы получим Username or password is incorrect.

3537571241.jpg


Или

d70e1de142.jpg


---------------------------------------------------
Итого:

18ada2e07d.jpg



http://zennolab.com/discussion/threads/sozdaem-cheker-akkauntov-vk-com.17291/ - Аригато годзаймасу за идею)
--------------------------------
Скачать: https://yadi.sk/d/E56fhPgMdWLQE
--------------------------------
Пароль: lexone
--------------------------------


Копируем видео из чужой группы в свою (vk.bot)

Наши действия:

  1. Запусаем Wincap Создаем рядом с vkbot.exe файлик proxy.txt и вписуем туда 127.0.0.1:8888
  2. Запускаем vkbot и идем на вкладку: Медиа --- Скопировать --- Скорпировать видео в сообщество
  3. Запускаем Fiddler
  4. Вводим id своей группы и чужой (от куда будем брать видео)
  5. Начинаем анализирвоать
======================================

При заходе в программу vk_bot, вас попросят ввести логин-пароль. После этого в сниффере вы увидите get/post запросы на авторизацию и получения кук. (они нам нужны будут для дальнейших действий).

n2YYed0Fex8W26.jpg


И

d59d988284.jpg



----------------

Теперь реализуем это в зеннопостере:

f8307fdbc6.jpg


---------------------------


Первые шаги vk_bota будет:

1. заходит на страничку группы
2. Парсит все ее видеозаписи
3. Извлекает из этих данных hesh и id видео с помощью регулярных выражений

ed6e0a6495.jpg


--------------------------
Повторяем в зенно

v297LOysp6BdrG.jpg


----------------------------------------------------

Действия Вк_бота на 3 шаге:Без имени-12.png

GrqV1YBhGavZmz.jpg



----------------------------------------------------
Адаптируем под зенку:

a4517dcb7f.jpg


Итого: мы за 230 секунд скопировали 200 видео.

--------------------------------
Скачать: https://yadi.sk/d/iOv1jZmEdWPxR
--------------------------------
 
Номер конкурса статей
  1. Второй конкурс статей
Тема статьи
  1. Нестандартные хаки
Последнее редактирование:
Аналог xpath на зенно (c#)

Наша задача:
  1. Перейти в компанию (названия каждый раз будет раномным.. поэтому под него не цепляемся)
  2. Внутри компании кликнуть на подкомпании.
  3. Скопировать каждое объявление c подкомпании в новую подкомпаниию
======================================

Скажу вам сразу.. если бы делал без c#, то пришлось бы реализовывать этот клик через очень большие костыли..

GrqV1YBhGa3Kmz.jpg


----------------------------------------------------
Наши действия:

  1. Ищем ограниченное пространство, где больше не будет совпадений по union_id=
  2. Начинаем искать по регулярному выражению в найденом куске. (этим мы отсечем разные блоки, где были такие же повторы).
  3. Вызываем в коде клик, если нашли нужный элемент.

4d7df1e96c.jpg


Код:
Развернуть Свернуть Копировать
var tab = instance.ActiveTab;

var theme_select = tab.FindElementByAttribute("tbody", "fulltag", "tbody", "text", 3);
if (!theme_select.IsVoid)
{
    var btn_click = theme_select.FindChildByAttribute("a", "href", @"http://vk\.com/ads\?act=office&union_id=", "regexp", 0);
    if (!btn_click.IsVoid)
    {
        btn_click.RiseEvent("click", "Full");
        while (tab.IsBusy)
            System.Threading.Thread.Sleep(1000);
        return 0;
    }
}

throw new Exception("не смог выбрать!");


======================================
Шаг 2:

Ничего интересного.. сразу нашли нужный нам аргумент.

--------------

Шаг 3:


Видим туже самую ситуацию + тут не один элемент, а сразу несколько (нужен перебор значений).

E2pMzentGZnZAY.jpg



======================================
Наши действия:

58f394b0eb.jpg




Код:
Развернуть Свернуть Копировать
int a = Convert.ToInt32(project.Variables["var"].Value);
var tab = instance.ActiveTab;

var theme_select = tab.FindElementByAttribute("tbody", "fulltag", "tbody", "text", 3);
if (!theme_select.IsVoid)
{
    var btn_click = theme_select.FindChildByAttribute("a", "href", @"http://vk\.com/ads\?act=office&union_id=", "regexp", a);
    if (!btn_click.IsVoid)
    {
        btn_click.RiseEvent("click", "Full");
        while (tab.IsBusy)
            System.Threading.Thread.Sleep(1000);
        return 0;
    }
}

throw new Exception("не смог выбрать!");

--------------------------------
Скачать: https://yadi.sk/d/iOv1jZmEdWPxR
--------------------------------
 
Последнее редактирование:
Налаживаем Watermark на картинки через c# сниппет

Rmzv9YQuMoYPmO.jpg


Начальные данные:

  1. картинка.png (наша Watermark)
  2. Папки (в папках должны быть только картинки)

Получаем названия папок:

Код:
Развернуть Свернуть Копировать
var textContains = project.Variables["var"].Value;
var subdir = System.IO.Directory.GetDirectories((textContains));
for(int i=0;i<subdir.Length;i++)
{
    project.Lists["list1"].Add(subdir[i]);
}

--------------------
Накладываем Watermark.

Код:
Развернуть Свернуть Копировать
    {
        using (Image image = Image.FromFile(@"{-Variable.new-}"))
        using (Image watermarkImage = Image.FromFile(@"{-Variable.leo-}"))
        using (Graphics imageGraphics = Graphics.FromImage(image))
        using (TextureBrush watermarkBrush = new TextureBrush(watermarkImage))
        {
            int x = (image.Width / 2 - watermarkImage.Width / 2);
            int y = (image.Height / 2 - watermarkImage.Height / 2);
            watermarkBrush.TranslateTransform(x, y);
            imageGraphics.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), new Size(watermarkImage.Width+1, watermarkImage.Height)));
            image.Save(@"{-Variable.line-}new\{-Variable.new1-}.jpg");
        }

    }
--------------------

На выходе

  • Папка1new
  • Папка2new

и.т.д (шаблон создает новые папки с именем старых (только приставку new добавляет) и перемещает туда уже обработанные изображения .

--------------------------------
Скачать: https://yadi.sk/d/CfybxDv2dWV7r
--------------------------------

Регер Ucoz аккаунтов на c#

a2X74WYs4XDemg.jpg




  1. Почему я решил делать регер именно на c# блоках?

Ответ: если вы не пропишите AdditionalHeaders, то Ucoz не даст вам отправить конечный post запрос. (видать на основе моих заголовках что-то генерирует).
В обычном get/post запросе зеннопостера это не прописать.. поэтому воспользуемся c#блоком

Код:
Развернуть Свернуть Копировать
var resultHttpPost = ZennoPoster.HttpPost("http://www.ucoz.ru/main",
   "a=checkemail&email=" + project.Variables["mail"].Value + "&v=2&_tp_=xml",
   "application/x-www-form-urlencoded", project.Variables["proxy"].Value,
   respType: ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderAndBody,
   Cookies: project.Variables["cookie"].Value,
   UserAgent: "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0",
   AdditionalHeaders: new[]
   {
     "Accept: application/xml, text/xml, */*",
     "Accept-Language: en-US,en;q=0.5",
     "X-Requested-With: XMLHttpRequest",
     "Referer: http://www.ucoz.ru/register",
     "Pragma: no-cache",
     "Cache-Control: no-cache",
   });
return resultHttpPost;

===============================

2. Ucoz ввел автоматическую защиту от спамеров.

LmG7aypslVJxml.jpg


Если глянуть по параметрку - otwtejv(каждый раз рандомное имя), то нам предлагают вот эту строку из исходника

HTML:
Развернуть Свернуть Копировать
<input type="hidden" name="otwtejv" value="828612">

Но если глянуть по "651470" :

E2pMzentGWGOAY.jpg


HTML:
Развернуть Свернуть Копировать
    var pwds = ['1234qwer','password','1234567','abc123','123abc','myspace','iloveyou','blink182','qwerty','baseball','adminadmin','administrator','202839','12345678','fuckyou','slipknot','651470','123456789','superman','football','123456','138470','access','soccer','monkey','liverpool','123123','123qwe','123qwer','princess','jordan','jordan23','229455','933730','591998','915161'];

Когда мы регаемся через браузер, то эта строка сама подтягивается неведомо каким образом.

Но не в нашем случае, так как мы напрямую должны отправлять уже заранее сформулированный post запрос.

====================

После несколько тестов мы выяснили, что значения для ответа берется из этого блока

['1234qwer','password','1234567','abc123','123abc','myspace','iloveyou','blink182','qwerty','baseball','adminadmin','administrator','202839','12345678','fuckyou','slipknot','651470','123456789','superman','football','123456','138470','access','soccer','monkey','liverpool','123123','123qwe','123qwer','princess','jordan','jordan23','229455','933730','591998','915161']

И всегда начинается на 6, а также состоит только из цифр.

После мы составим регулярку и будем потдягивать это число в наш post запрос

(?<=',')6[0-9]*?(?=',')
====================

Далее нас ждет новый сюрприз))

eAO5Le6SkLk8mo.jpg



Как видим, юкоз в post запросе отправляет метки всех своих полей (Имя, Фамилия, Мыло , ответ на капчу, город) - в режиме морфинга.

То_есть при каждой новой регистрации, юкоз будет просить совсем разные id полей.
====================

Для этого мы должны научится подтягивать новые id полей на автомате и подставлять в post запрос.

Делать это будем с помощью Регулярных выражений.
Смотрим в исходную страницу и определяем какие теги окружают наши id

nAyenY6FwowPAZ.jpg



В конечном итоге у меня получилось 26 регулярных выражений.

Код:
Развернуть Свернуть Копировать
"a=register2&" + project.Variables["z1"].Value + "=" + project.Variables["z2"].Value + "&" + project.Variables["milo"].Value + "=" + project.Variables["mail"].Value + "&" + project.Variables["pas_heh"].Value + "=" + project.Variables["password"].Value + "&" + project.Variables["name_reg"].Value + "=" + project.Profile.Name + "&" + project.Variables["famalu"].Value + "=" + project.Profile.Surname + "&" + project.Variables["niks"].Value + "=" + project.Profile.NickName + "&" + project.Variables["day"].Value + "="+ project.Profile.BornDay + "&" + project.Variables["mecyz"].Value + "=" + project.Profile.BornMonth + "&" + project.Variables["god"].Value + "=" + project.Profile.BornYear + "&" + project.Variables["gender"].Value + "=1&" + project.Variables["gorod1"].Value + "=" + project.Variables["gorod2"].Value + "&" + project.Variables["capths"].Value + "=" + project.Variables["otvet"].Value + "&" + project.Variables["pole_captha"].Value + "=" + project.Variables["pole_captha2"].Value + "&" + project.Variables["chec_bocs"].Value + "=1&" + project.Variables["chec_bocs_2"].Value + "=0&" + project.Variables["chec_bocs_3"].Value + "=&" + project.Variables["z5"].Value + "=" + project.Variables["z6"].Value,

Также в шаблоне показан метод, как скачать капчу с кукой + перекодировать ее в Base64 для дальнейшей отправки на сервис антикапчи.

ZrJEQejhnEnpAj.jpg


--------------------------------
Скачать: https://yadi.sk/d/342LWuAWdWVwU
--------------------------------

Регистрация mail аккаунтов на c#

YmEqKypsMpMgm6.jpg
Почти тоже самое, что и с Ucoz.. только без секретного вопроса в Post запросе.

На второй страницы этой темы все архивы доступны для скачивания

P.s.s: статья нон-стоп писалась более 10 часов..
Поэтому возможны косяки в оформлении, словах (днем почищу).
 
Последнее редактирование модератором:
Хорошая статья, за проксирование и сниффинг прог респект :-)
 
  • Спасибо
Реакции: Slava и lexone
То же понравилось.
 
  • Спасибо
Реакции: lexone
обалдеть
 
  • Спасибо
Реакции: LightWood и lexone
Спасибо! Все понятно и четко изложено!
 
  • Спасибо
Реакции: lexone
Чувствую, как мозг приятно напрягся от новой информации. Спасибо.
Одна из крутейших статей за два конкурса
 
  • Спасибо
Реакции: iBotovod, seomiks и lexone
Отличная статья.
 
  • Спасибо
Реакции: lexone
Всем снова привет :bt:

Времени было в обрез (вышел за дедлайн конкурса).. пришлось очень много примеров урезать.

Специально для всех заинтересовавшихся темой - Анализируем чужие программы в сниффере (перед этим проксируем их через 127.0.0.1:8888 - чтобы мог читать https наш снифер). И переписываем под зенку

Я опубликую в скором времени - C# Sharp vs WebBrowser. Часть 2, еще больше софта!!!!!
Пока остановлюсь на - "парсере картинок яндекса / гугла" - переписываем под многопоток и C#, || "зеброид" - постим в Web 2.0 на автомате. || ваши идеи.
Если есть идеи, какой еще софт анализировать.. кидайте его название в эту тему.
 
автор молодец!
мои 5 коп.
HdeSSsM.png
 
  • Спасибо
Реакции: lexone
Просто браво, все самое полезное и в нужное время.
3d806d713ee437c525f338914b4dd5af.gif
 
  • Спасибо
Реакции: Fedsas и lexone
что сказать, пять с плюсом, - однозначно.
 
  • Спасибо
Реакции: Roman* и lexone
Вот только ради таких статей и стоит купить Zennoposter. Админы, а у буржуев вы проводите такие конкурсы?
 
  • Спасибо
Реакции: lexone
Суперская статья, можно и мне пароль?
 
  • Спасибо
Реакции: lexone
можно и мне пароль.
 
  • Спасибо
Реакции: lexone
Супер! Отличная статья!
 
  • Спасибо
Реакции: lexone
Очень, очень МОЛОДЕЦ!
Про post и get подробно - то что нужно.
 
  • Спасибо
Реакции: lexone
Если буржуи будут такие статьи писать, то мы будем в переди планеты всей, а бабла будет у нас за счет их идей уух сколько)
 
  • Спасибо
Реакции: twitter и lexone
Вопрос собсно к Администрации.
Когда, как и где начнеца голосование за статьи?
Кто может, а кто не может учавствовать в этом?

Спасибо
 
Отличная статья, браво! Можно мне тоже пароль в лс 8-)
 
В смысле статус client? Это обладатель программы вы имеете ввиду?
 
Отличная статья!
и мне тоже пароль дайте.
 
Привет ) Архив нужно прикрепить к статье :)
 
Привет ) Архив нужно прикрепить к статье :-)
Видимо в правилах необходимо строго прописать что архив должен прикрепляться к статье, быть незапароленным и шаблоны не зашифрованные. А то получается сплошное попрашайничество и какой толк от зашифрованных шабов?
 
  • Спасибо
Реакции: lexone
Отлична мега работа ТС!!!
Молодец!!!!!
 
  • Спасибо
Реакции: lexone
Спасибо за разжевку по раскладке работы программ на зенку!
Плюсую!
 
  • Спасибо
Реакции: lexone
Однозначно +
Лучший материал!
 
  • Спасибо
Реакции: lexone
Жалко что по Авито шабы закрыты, не посмотреть что к чему.
 
  • Спасибо
Реакции: lexone

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)