- Регистрация
- 23.12.2013
- Сообщения
- 93
- Благодарностей
- 132
- Баллы
- 33
Вступление
С nextplus/textplus (это приложения клоны) я познакомился еще году этак 2013-2014, когда мы массово регали на него аккаунты вайбера. Думаю, о nextplus (далее НП) многие слышали и использовали, как источник бесплатных номеров для регистраций. Но в этой статье я опишу способ монетизации не связанный с приемом смс.
Для тех, кто не знаком с данным приложением, то поясню, что в НП можно получить бесплатно американский номер и, опять же бесплатно, слать смс на другие американские телефонные номера.
Эту возможность я и использовал для монетизации - рассылка смс. Работал с этим сервисом в общем чуть более года (май 2019 - июнь 2020), а фактически несколько месяцев. НП закручивал гайки, я, не находя решения в лоб, бросал это дело и возвращался, когда появлялось время. Иногда приходилось покопаться, чтобы придумать способ обхода тех или иных ограничений. Когда я только начал работать с НП, там еще не было каптч и фильтров на ссылки. Единственная каптча на реге была только для вида, ее решение для работы на запросах не требовалось.
В этой статье я хотел бы рассказать о том, как с помощью Zennoposter, практически без знаний языков программирования, можно решать задачи по автоматизации на примере работы с НП. Основная информация из статьи не утратила актуальность и на данный момент, но есть нюансы.
Инструменты
Работу с любым приложением я начинаю с ручного теста. Смотрю возможности, ищу касания с аудиторией, пытаюсь достигнуть каких либо лимитов, получить бан. Раньше работал с nox'ом, теперь перешел на эмулятор memu. Но также нужно иметь и реальное устройство для тестов, их у меня тоже несколько. Для НП сейчас хватит memu с андроидом 7.1. На 2019й год приложение работало и на андроиде 5.1.
Fiddler. Мой любимый софт для мониторинга трафика, особенно мне он нравится за возможность писать свои скрипты для обработки запросов.
В эмуляторе обязательно xposed с модулями Inspeckage, TrustMeAlready, changer(com.bigsing.changer).
Приложения для тестов я беру либо со сторонних источников, либо с плеймаркета с другого эмулятора. Потому что стараюсь проводить тесты на максимально чистом эмуле, без входов в акк гугла и т.д.
И, конечно, для автоматизации я использую ZennoPoster.
О настройке софта я подробнее рассказываю в видео.
Регистрация аккаунтов
За время работы с НП я зарегистрировал более 400к аккаунтов и получил около 200к номеров.
Регистрация состояла из нескольких запросов:
- Регистрация данных аккаунта
- Получение токена по логину и паролю
- Получение токена авторизации для работы
- Получение данных об аккаунте. Этот запрос не связан непосредственно с авторизацией, но данные из него, такие как JID и PersonaId в дальнейшем пригодятся.
Регистрация данных аккаунта выглядела так:
Не было каких-либо секретных токенов, каптчи и т.д. Как можно догадаться из названия udid и deviceUDID - это рандомный android id, platformOSVersion - версия андроид, model - модель телефона. Для массовой регистрации аккаунтов достаточно было генерировать эти параметры, а также логин и пароль.
Сейчас же регистрация выглядит следующим образом:
Были добавлены два заголовка.
x-gsn-token - это токен полученный после прохождения каптчи, так называемой, safetynet recaptcha. Ее я обнаружил, когда писал статью. К сожалению, беглый поиск автоматизации ее решения не дал результатов.
!!! Без решения этой каптчи нет возможности для полной автоматизации регистрации в данный момент
x-reg-token - шифрование данного токена можно увидеть в панели inspeckage (данный момент я показываю в видео), во вкладке hash:
Алгоритм шифрования sha-512. Сделав несколько регистраций, узнаю, что меняется. Таким образом скелет выглядит так:Algorithm(SHA-512) [polsdcrvfe0070b1bea20559212.6.97.1.2nextplusrZdC!UX+2VJu+p*A-ENZpmbyFJ+SYK52$gkVWWWzwxIv7ks=rJITpKHqJu5HQkF8F : 3ea8b8b04a1915a97a908a24bc1a34ce706d5c6d3602f9bf5959555319ab1137dac7bb5cf518881447109026469dd58b782ad8d7e9c2adfc309224616a7c1222f]
Еще для работы понадобятся такие данные как, модель, андроид ид, версия ос, версия приложения и т.д. Все это генерируется, либо берется из таблицы (файлы с данными в прикрепленных файлах):[логин][android_id][версия_apk][версия_os]nextplusrZdC!UX+2VJu+p*A-ENZpmbyFJ+SYK52$gkVWWWzwxIv7ks=rJITpKHqJu5HQkF8F
[polsdcrvfe][0070b1bea2055921][2.6.9][7.1.2]nextplusrZdC!UX+2VJu+p*A-ENZpmbyFJ+SYK52$gkVWWWzwxIv7ks=rJITpKHqJu5HQkF8F
Теперь можно приступать к запросам. Так выглядит первый запрос в projectmaker:
В случае успешной регистрации получим ответ с кодом 201. Далее нужно получить токен, который будет использоваться в заголовке во всех запросах к апи НП:
Срок жизни токена небольшой, поэтому в дальнейшем при работе с аккаунтом я его обновлял с помощью запроса номер 3.
Таким образом не составляло проблемы массово регистрировать аккаунты. Но спустя время начали банить прокси, на любое действие связанное с регистрацией либо авторизацией я получал ошибку 401. Решалось использованием большего количества проксей.
А после начали банить (ошибка 403) и сами аккаунты, но я стал их просто больше регистрировать.
Получение номера
Как я уже писал, монетизировал НП путем смс рассылки. Для этого следующим шагом после регистрации, мне нужно было получить номер. Вот здесь я столкнулся с первой проблемой. Казалось бы запросы на получение номера выглядят очень просто:
- Получить список префиксов телефонных номеров с их id.
Парсим id, добавляем в таблицу колонки localeid и available, удаляем из таблицы строки со значением false, так как это означает, что доступных номеров для этого кода нет:
2. Когда я плотно работал с НП, каптчи на получении номера не было, теперь же она есть, и запрос выглядит так:
DeviceUdid - это все тот же android id. localeId мы получили в предыдущем запросе и взяли случайный.
RecaptchaCode - токен решенной каптчи. Получить данный токен не составляет проблем, так как здесь обычная recaptcha v2. Все что нужно для решения, это воспользоваться стандартным кубиком recaptcha v2:
PushToken - это токен гугла, отвечающий за пуш уведомления. Вначале я пробовал генерировать случайный, но на стороне сервера есть проверка. Использовать один и тот же тоже не вариант, так как если в многопотоке (я запускал в 100-400 потоков) одновременно шли обращения за номером, то почти все потоки получали ошибку.url - http://events.nextplus.me/recaptcha/index.html
data-sitekey - 6LdgjRwTAAAAABVQtYZ9T2MiOyBG4K1fNNV-awry
Пришлось разбираться, как он генерируется.
Для генерации токенов понадобятся данные авторизации в заголовке Autorization, а также дополнительные данные в теле запроса:
X-appid - рандомный id.
device, info - зависимые от данных авторизации параметры.
Остальные параметры неизменяемые.
Чтобы получить недостающие параметры, нужно сделать запрос:
Так просто не получится его повторить, так как здесь используется Protobuffers. Поэтому я воспользовался сторонним скриптом checkin.py в связке с Zennoposter. В папке с шаблоном будут полученные данные. Там их достаточно, чтобы потоки не пересекались.
Также в приложенных файлах есть дополнительный шаблон, который используется в основном шаблоне как “проект в проекте”, для получения токена. Для его работы понадобится python 2.7, а также модули protobuf и requests.
Разгадав каптчу, и получив токен, можно взять номер.
Рассылка
Получив номер, приступаем к рассылке. При первом подходе, я не смог определить как отправляются смс в НП. Fiddler мне ничего не показывал, каким-то образом сообщения шли мимо него. Я попробовал Charles и в одном из тестов я заметил подключение к websocket. Больше мне не удалось повторить данный тест, подключение шло всегда напрямую и ни фидлер, ни чарлес его не видели. Поэтому пришлось пустить весь траффик через проксифаер, и вот оно подключение к вебсокету:
Столкнулся я с websocket впервые. Нашел либу websocket-sharp, но в связи с особенностями протокола “из коробки” она не начала работать.
Почитав документацию по данному субпротоколу, я предположил, что все отличие в дополнительных заголовках и форматах сообщений.
Sec-WebSocket-Key (его значение - рандомный uuid), Sec-WebSocket-Protocol и Sec-WebSocket-Version.
Пришлось править и компилировать либу под себя. В связи с тем, что visual studio я до этого в глаза не видел, на то, чтобы добавить эти заголовки и удачно собрать библиотеку, у меня ушли сутки. Файл dll присутствует в папке с шаблоном.
При подключении к websocket, для работы нужна авторизация:
Здесь в base64 закодировано часть jid (это внутренний id аккаунта) и токен авторизации, полученный при регистрации в таком формате:
\0 - это терминальный нуль, он же null\0[JID]\0[TOKEN]
После успешной авторизации, можно отправлять смс:
message id - случайное 32-х символьное значение
to - номер_получателя@sms.nextplus.com
thread - смотрим значение в inspeckage. Это строка формата [номер_получателя][JID] закодированная в md5
body - текст сообщения.
В шаблоне у меня отправка построена так:
я записываю в список строки с сообщениями, а после подключаюсь к вебсокету и отправляю их:
C#:
var rand0 = Macros.TextProcessing.RandomText(6, "dc", ""); // случайные значения, которые понадобятся в работе
var rand1 = Macros.TextProcessing.RandomText(6, "dc", "");
var rand2 = Macros.TextProcessing.RandomText(6, "dc", "");
var msg = "";
var inboxmsg = "";
var proxy = project.Variables["proxy"].Value; //прокси формата http://ip:port, соксы не поддерживаются
using (var ws = new WebSocket("wss://35.201.97.43/")) // подключение к вебсокету
{
ws.SslConfiguration.EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12;
ws.SetProxy (proxy,"","");
ws.OnMessage += (sender, e) => {
inboxmsg = e.Data;
};
ws.Connect();
System.Threading.Thread.Sleep(2000);
ws.Send("<open to='app.nextplus.me' version='1.0' xmlns='urn:ietf:params:xml:ns:xmpp-framing'/>"); // стандартные сообщения при подключении
System.Threading.Thread.Sleep(2000);
ws.Send(@"<auth xmlns=""urn:ietf:params:xml:ns:xmpp-sasl"" mechanism=""PLAIN"">" + project.Variables["authbase64"].Value + "</auth>"); //авторизация
System.Threading.Thread.Sleep(3000);
var goodauth = System.Text.RegularExpressions.Regex.Match(inboxmsg, "success").Value; // проверка успешного подключения
if (goodauth == "") {
project.Variables["badwebsocketauth"].Value = "bad";
project.Variables["websomsgerror"].Value = inboxmsg;
goto end;
}
ws.Send("<open to='app.nextplus.me' version='1.0' xmlns='urn:ietf:params:xml:ns:xmpp-framing'/>");
System.Threading.Thread.Sleep(1500);
ws.Send(@"<iq xmlns=""jabber:client"" id=""" + rand0 + @""" type=""set""><bind xmlns=""urn:ietf:params:xml:ns:xmpp-bind""><resource>" + project.Variables["device_id"].Value + "</resource></bind></iq>"); // переменная device_id - это тот же android id
System.Threading.Thread.Sleep(1500);
ws.Send(@"<iq id=""" + rand1 + @""" type=""set""><enable xmlns=""urn:xmpp:carbons:2""/></iq>");
System.Threading.Thread.Sleep(1500);
ws.Send(@"<iq xmlns=""jabber:client"" id=""" + rand2 + @""" type=""set""><session xmlns=""urn:ietf:params:xml:ns:xmpp-session""/></iq>");
System.Threading.Thread.Sleep(1500);
ws.Send(@"<iq id=""" + rand1 + @""" type=""set""><enable xmlns=""urn:xmpp:carbons:2""/></iq>");
System.Threading.Thread.Sleep(1500);
while (project.Lists["msgs"].Count != 0) //сообщения берутся из списка msgs и отправляются по очереди
{
msg = project.Lists["msgs"][0].Trim();
ws.Send(msg);
System.Threading.Thread.Sleep(700);
project.Lists["msgs"].RemoveAt(0);
}
System.Threading.Thread.Sleep(5000);
end:
ws.Close();
}
Опытным путем было выяснено, что существует лимит на 10 диалогов, каждые 6 часов.
Базы рассылки
Я пробовал покупать, парсить, но в итоге наилучший результат давал метод генерации номеров. Здесь на карте я искал большие города с густонаселенными районами. Брал коды этих районов, к примеру, 917 . Далее парсил по операторам коды со значением Wireless. Генерировал номера и рассылал по ним. На удивление, получалось лучше, чем с покупных, либо спаршеных баз.
Текст рассылки
Я пробовал свипы, гемблинг, товарку и т.д. Но как и ожидалось, что лучше всего заходил дейтинг. Использовался самый простой текст, наподобие “Привет, давай знакомиться”, либо “У вас 5 новых сообщений от Имя. Читать ссылка”. Я не раз уже убеждался на практике, что под микс траффик сообщение должно быть как можно короче.
Ничто не вечно
Раньше каждый раз, когда проект готов к полноценному запуску и масштабированию, я сталкиваюсь с дилеммой. Работать тихо и незаметно, но (возможно) долго, либо максимально быстро получить профит. В последнее время я все чаще выбираю второй вариант. Но тогда в случае с НП я остановился на чем-то среднем. И спустя месяц разработчики убрали возможность отправлять какие-либо активные ссылки. Еще пару дней я слал с доменами .рф, но и этот способ прикрыли. Проходят неактивные ссылки, что-то вроде этого: http:/fb․me∕messages∕t∕@%79%61%2e%72%75 , но даже отправляя их отдельным сообщением, траффик упал в десятки раз. Пришлось отложить этот проект.
Вернулся я к НП спустя месяц. И нашел крайне простой способ отправки, который проморгал в самом начале. В 2019 году в приложении была функция “Пригласи друга”. Можно было приглашать друзей путем отправки смс непосредственно из НП. Никаких вебсокетов, обычный пост запрос, ссылки проходят. Месяца через полтора разработчики просто вырезали эту функцию. И опять проект перешел в категорию “будет время, посмотрю”.
Время появилось через пару месяцев. К сожалению, я так и не нашел способа отправлять активные ссылки в смс. Но заметил, что сообщения между пользователями НП проходят через свой обработчик и ссылки работают.
Т.е. можно попробовать разослать сообщения внутри самого мессенджера. Но как спарсить базу пользователей? Из поиска можно найти только по полному логину, id здесь - это md5 хэш.
Как я и писал, за время работы мне удалось получить около 200к номеров. Так как я все данные храню в бд, я сделал выборку, получил все эти номера, убрал последние 4 цифры и почистил от дублей. Так как при получения номера я всегда использовал рандомный localeId и при таком большом количестве данных, можно предположить, что я получил практически все диапазоны, из которых НП выдает номера для своего сервиса. Вышло 12к+ диапазонов.
В приложении при вводе номера получателя НП проверяет наличие пользователя с таким номером в своем сервисе:
И, если номер в данный момент привязан к аккаунту, то будет такой ответ, из которого можно получить все данные о пользователе. Если аккаунт не активен в течение недели-двух, то сервис забирает номер. При бане аккаунта также. Сгенерировав все возможные номера и проверив их таким образом, я получил 2кк+ пользователей. Именно активных пользователей. Также плюсом к внутренней рассылки - это то, что не нужно получать номера.
Дважды в месяц я перечекивал эти 2кк+ номеров, получая примерно 400-500к новых пользователей, так как номера. Рассылка по ним приносила $1.5-3к в месяц. Но в мае этого года ввели фильтр на ссылки и для сообщений внутри НП. Еще была попытка рассылок картинками, но желаемого результата я не получил.
Статистика
Лил я на ЛП и монету:
очень большое полотно получается, поэтому обрезал
Какой-то трафик доходит и по сей день. Вот стата из тдс с 1 сентября по 9 декабря:
P.s. В прикрепленном архиве шаблон NPreger.zp. В нем я попытался собрать максимально упрощенный скелет методов и запросов для работы с НП. Перед публикацией я проверил, все работает, за исключением запроса на регистрацию. Если кто-то сможет разобраться с safetynet recaptcha, то еще вполне можно что-то выжимать из НП.
По поводу приема смс для активаций на эти номера. Большинство популярных сервисов блокируют активации на виртуальные номера. Также сам НП имеет свои фильтры. И тем не менее хватает малоизвестных сайтов и сервисов, которые можно активировать на номера НП.
- Тема статьи
- Способы заработка
- Номер конкурса статей
- Четырнадцатый конкурс статей
Вложения
-
369,8 КБ Просмотры: 657
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование модератором: