$25к+ на автоматизации nextplus

p-sergei

Client
Регистрация
20.12.2016
Сообщения
523
Благодарностей
255
Баллы
63
О вебсокетах отлично написано здесь . Может быть поможет с твоей ошибкой
да вопрос то не в вебсокетах, а что я не так делаю при компиляции библиотеки? С той темой я знаком, там автор судя по юзер-агенту тоже что-то там правил в коде как и ты! Из той темы и из твоей dll-ки работают, так же работает оригинальная dll-ка скаченная с https://www.nuget.org, а моя скомпилированная с оригинального кода не работает и вот в этом вопрос! Может я что-то при компиляции упускаю или не так делаю, вот что я спрашиваю!?
 

Kaspian

Client
Регистрация
23.12.2013
Сообщения
93
Благодарностей
132
Баллы
33
да вопрос то не в вебсокетах, а что я не так делаю при компиляции библиотеки? С той темой я знаком, там автор судя по юзер-агенту тоже что-то там правил в коде как и ты! Из той темы и из твоей dll-ки работают, так же работает оригинальная dll-ка скаченная с https://www.nuget.org, а моя скомпилированная с оригинального кода не работает и вот в этом вопрос! Может я что-то при компиляции упускаю или не так делаю, вот что я спрашиваю!?
С этим врятли помогу, я в c# мягко говоря не силен) Я свой вариант больше года назад компилировал, и это был первый и последний раз, когда я студию открывал)
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 165
Благодарностей
811
Баллы
113
В общем мему через проксифаер так и не работает. Кто может подсказать в чём может быть проблема? Борюсь уже недели 3, хз в чём проблема. Или как можно отловить вёбсокеты без использования проксифаера?
 

p-sergei

Client
Регистрация
20.12.2016
Сообщения
523
Благодарностей
255
Баллы
63
С этим врятли помогу, я в c# мягко говоря не силен) Я свой вариант больше года назад компилировал, и это был первый и последний раз, когда я студию открывал)
ясно, я думал дело было недавно.
короче утро вечера мудренее проблему решил! Копался копался на гитхабе, проблема была в протоколе. Видимо что-то где-то изменилось за год, наверно в исходниках раз твоя либа и либа из другой темы работают на протоколе по умолчанию.
Либу скомпилировал, теперь можно свой юзер агент указывать
70313


Библиотеку приложу, может кому и пригодиться такой вариант!
 

Вложения

  • Спасибо
Реакции: sw_sw, Kaspian и Koqpe

sijacz

Новичок
Регистрация
09.01.2021
Сообщения
1
Благодарностей
0
Баллы
1
Спасибо большое за такой годный материал!

Это также можно сделать с помощью приложения Text Me? Я проверил его на свой T-мобильный номер из США и получил сообщение со ссылкой, поэтому они еще не заблокировали его. Дайте мне знать, что вы думаете.
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 165
Благодарностей
811
Баллы
113
Гайз, ай нид хелп :-)
Уже месяц или больше бьюсь над проблемой запуска эмулятора вместе с локальной прокси фиддлера через проксифаер. Всё без проблем работает в связке фиддлер - мему, траф перехватывается, запросы вижу. Необходимо вставить в эту связку проксифаер, чтобы показывало скрытые вёбсокеты. На этом этапе всё ломается. Уже пробовал через nox - проблема та же.
Запускаю proxifier, добавляю локальный прокси от fiddler'a, ставлю правило для memu, в настройках сети в memu отключаю локальный прокси фиддлера - приложения, которые до этого работали через этот же самый прокси, но без проксифаера перестают видеть сеть. Эта же связка у меня успешно работает через project maker, как было описано несколько постов назад. Проблема именно в работе с эмулятором. Скорее всего решение лежит где-то на поверхности, но видимо уже замылился глаз и нужен свежий взгляд на эту проблему.
 

p-sergei

Client
Регистрация
20.12.2016
Сообщения
523
Благодарностей
255
Баллы
63
  • Спасибо
Реакции: kane16

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 165
Благодарностей
811
Баллы
113
я вот здесь ничего не отключал, а наоборот прокси фидлера оставлял.
Если в мему оставить прокси фиддлера, то всё ещё хуже, сыпет ошибкой в лог проксифаера:
memuheadless.exe (5072) - 192.168.100.2:8888 error : Could not connect through proxy 192.168.100.2(192.168.100.2):8888 - Proxy server cannot establish a connection with the target, status code 405
А если прокси убрать, то в логе проксифаера ошибки нет, но и сети тоже нет. Да и ТС говорил, что прокси из мему нужно отключать при подключении проксифаера.
 

myndeswx

Client
Регистрация
15.05.2017
Сообщения
399
Благодарностей
88
Баллы
28
Great article! Interested how do you generate the "fb․me∕messages" link? o_O
 

devffy

Client
Регистрация
16.03.2019
Сообщения
541
Благодарностей
188
Баллы
43
Если в мему оставить прокси фиддлера, то всё ещё хуже, сыпет ошибкой в лог проксифаера:
memuheadless.exe (5072) - 192.168.100.2:8888 error : Could not connect through proxy 192.168.100.2(192.168.100.2):8888 - Proxy server cannot establish a connection with the target, status code 405
А если прокси убрать, то в логе проксифаера ошибки нет, но и сети тоже нет. Да и ТС говорил, что прокси из мему нужно отключать при подключении проксифаера.
Из легкого: Vpn используй))) у меня тоже не работает проксифаер) надо копать глубже потом
 
  • Спасибо
Реакции: Zedx

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 165
Благодарностей
811
Баллы
113
Из легкого: Vpn используй))) у меня тоже не работает проксифаер) надо копать глубже потом
Спасибо за наводку. Но мне просто интересно уже стало, почему у автора работает этот способ с проксифаером, а у других нет
 

gregus

Client
Регистрация
17.09.2018
Сообщения
12
Благодарностей
0
Баллы
1
exvil любые капчи ломает
 

Fastdeal

Новичок
Регистрация
07.02.2021
Сообщения
2
Благодарностей
0
Баллы
3
Kaspian огромное спасибо за подробное описание, я ищу кто мне настроит этот сервис под мои нужды, я готов мериться с тем, что reCaptcha придётся решать в ручную. У меня объём не большой, 100-300 номеров в день.
Мне нужен авторег, который создаёт почту, потом TextPlus (можно и TextNow, но лучше TextPlus), и потом с этой почтой и номером, регистрируется в третьем приложении (пока его не называю), которое отсылает 4 значный код на номер, и его надо вводить в третьем приложении. В третьем приложении ни reCaptcha ни других ограничений нет. Сроки горят. Пишите в телегу, все кто может помочь @NewBaron
Бюджет зависит от уровня автоматизации, сроков и удобства использования. При успешном выполнении задачи, появятся и другие предложения.
 

bigloafer

Client
Регистрация
23.07.2020
Сообщения
234
Благодарностей
74
Баллы
28
А можно тоже самое сделать, но с WhatsApp?

Или там часто меняются запросы и нецелесообразно создавать такое решение?
 

Evgeni215873

Client
Регистрация
20.05.2022
Сообщения
19
Благодарностей
2
Баллы
3
Темка пашет?
 

palman67

Client
Регистрация
06.06.2020
Сообщения
28
Благодарностей
6
Баллы
3
96697


Пару дней назад все было хорошо, а теперь такое при установке Xposed на эмулятор Memu. Куда смотреть? Может кто подскажет?
 

sewer

Client
Регистрация
12.01.2019
Сообщения
55
Благодарностей
14
Баллы
8
Есть смысл на данный момент в проекте? кто юзает? есть потребность принимать 50-100 смс в день на USA номера ищу недорогие решения.
 

pro100dex

Client
Регистрация
20.02.2021
Сообщения
8
Благодарностей
2
Баллы
3

blackbyte

Client
Регистрация
05.09.2022
Сообщения
174
Благодарностей
98
Баллы
28

roman_fedorov

Новичок
Регистрация
15.11.2022
Сообщения
1
Благодарностей
0
Баллы
1
Kaspian скажи пожалуйста как с тобой связаться, есть коммерческий проект, в котором нужна твоя помощь.
 

romankhrist

Новичок
Регистрация
21.04.2023
Сообщения
3
Благодарностей
0
Баллы
1
Посмотреть вложение 68544

Вступление

С 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к номеров.
Регистрация состояла из нескольких запросов:
  1. Регистрация данных аккаунта
  2. Получение токена по логину и паролю
  3. Получение токена авторизации для работы
  4. Получение данных об аккаунте. Этот запрос не связан непосредственно с авторизацией, но данные из него, такие как JID и PersonaId в дальнейшем пригодятся.
Посмотреть вложение 68546

Регистрация данных аккаунта выглядела так:

Посмотреть вложение 68547

Не было каких-либо секретных токенов, каптчи и т.д. Как можно догадаться из названия udid и deviceUDID - это рандомный android id, platformOSVersion - версия андроид, model - модель телефона. Для массовой регистрации аккаунтов достаточно было генерировать эти параметры, а также логин и пароль.
Сейчас же регистрация выглядит следующим образом:

Посмотреть вложение 68554

Были добавлены два заголовка.
x-gsn-token - это токен полученный после прохождения каптчи, так называемой, safetynet recaptcha. Ее я обнаружил, когда писал статью. К сожалению, беглый поиск автоматизации ее решения не дал результатов.
!!! Без решения этой каптчи нет возможности для полной автоматизации регистрации в данный момент
x-reg-token - шифрование данного токена можно увидеть в панели inspeckage (данный момент я показываю в видео), во вкладке hash:

Алгоритм шифрования sha-512. Сделав несколько регистраций, узнаю, что меняется. Таким образом скелет выглядит так:

Еще для работы понадобятся такие данные как, модель, андроид ид, версия ос, версия приложения и т.д. Все это генерируется, либо берется из таблицы (файлы с данными в прикрепленных файлах):

Посмотреть вложение 68555

Теперь можно приступать к запросам. Так выглядит первый запрос в projectmaker:

Посмотреть вложение 68556

В случае успешной регистрации получим ответ с кодом 201. Далее нужно получить токен, который будет использоваться в заголовке во всех запросах к апи НП:
Посмотреть вложение 68557
Посмотреть вложение 68558
Посмотреть вложение 68559

Срок жизни токена небольшой, поэтому в дальнейшем при работе с аккаунтом я его обновлял с помощью запроса номер 3.
Таким образом не составляло проблемы массово регистрировать аккаунты. Но спустя время начали банить прокси, на любое действие связанное с регистрацией либо авторизацией я получал ошибку 401. Решалось использованием большего количества проксей.
А после начали банить (ошибка 403) и сами аккаунты, но я стал их просто больше регистрировать.

Получение номера

Как я уже писал, монетизировал НП путем смс рассылки. Для этого следующим шагом после регистрации, мне нужно было получить номер. Вот здесь я столкнулся с первой проблемой. Казалось бы запросы на получение номера выглядят очень просто:
  1. Получить список префиксов телефонных номеров с их id.
Посмотреть вложение 68560
Парсим id, добавляем в таблицу колонки localeid и available, удаляем из таблицы строки со значением false, так как это означает, что доступных номеров для этого кода нет:
Посмотреть вложение 68561

2. Когда я плотно работал с НП, каптчи на получении номера не было, теперь же она есть, и запрос выглядит так:
Посмотреть вложение 68564Посмотреть вложение 68569

DeviceUdid - это все тот же android id. localeId мы получили в предыдущем запросе и взяли случайный.
RecaptchaCode - токен решенной каптчи. Получить данный токен не составляет проблем, так как здесь обычная recaptcha v2. Все что нужно для решения, это воспользоваться стандартным кубиком recaptcha v2:

PushToken - это токен гугла, отвечающий за пуш уведомления. Вначале я пробовал генерировать случайный, но на стороне сервера есть проверка. Использовать один и тот же тоже не вариант, так как если в многопотоке (я запускал в 100-400 потоков) одновременно шли обращения за номером, то почти все потоки получали ошибку.
Пришлось разбираться, как он генерируется.

Посмотреть вложение 68565

Для генерации токенов понадобятся данные авторизации в заголовке Autorization, а также дополнительные данные в теле запроса:
X-appid - рандомный id.
device, info - зависимые от данных авторизации параметры.
Остальные параметры неизменяемые.
Чтобы получить недостающие параметры, нужно сделать запрос:

Посмотреть вложение 68566

Так просто не получится его повторить, так как здесь используется Protobuffers. Поэтому я воспользовался сторонним скриптом checkin.py в связке с Zennoposter. В папке с шаблоном будут полученные данные. Там их достаточно, чтобы потоки не пересекались.
Также в приложенных файлах есть дополнительный шаблон, который используется в основном шаблоне как “проект в проекте”, для получения токена. Для его работы понадобится python 2.7, а также модули protobuf и requests.

Посмотреть вложение 68567

Разгадав каптчу, и получив токен, можно взять номер.

Рассылка

Получив номер, приступаем к рассылке. При первом подходе, я не смог определить как отправляются смс в НП. Fiddler мне ничего не показывал, каким-то образом сообщения шли мимо него. Я попробовал Charles и в одном из тестов я заметил подключение к websocket. Больше мне не удалось повторить данный тест, подключение шло всегда напрямую и ни фидлер, ни чарлес его не видели. Поэтому пришлось пустить весь траффик через проксифаер, и вот оно подключение к вебсокету:

Посмотреть вложение 68570

Столкнулся я с websocket впервые. Нашел либу websocket-sharp, но в связи с особенностями протокола “из коробки” она не начала работать.

Посмотреть вложение 68571

Почитав документацию по данному субпротоколу, я предположил, что все отличие в дополнительных заголовках и форматах сообщений.
Sec-WebSocket-Key (его значение - рандомный uuid), Sec-WebSocket-Protocol и Sec-WebSocket-Version.
Пришлось править и компилировать либу под себя. В связи с тем, что visual studio я до этого в глаза не видел, на то, чтобы добавить эти заголовки и удачно собрать библиотеку, у меня ушли сутки. Файл dll присутствует в папке с шаблоном.
При подключении к websocket, для работы нужна авторизация:

Посмотреть вложение 68572

Здесь в base64 закодировано часть jid (это внутренний id аккаунта) и токен авторизации, полученный при регистрации в таком формате:

\0 - это терминальный нуль, он же null
После успешной авторизации, можно отправлять смс:

Посмотреть вложение 68573

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();    
}
Посмотреть вложение 68574

Опытным путем было выяснено, что существует лимит на 10 диалогов, каждые 6 часов.

Базы рассылки

Я пробовал покупать, парсить, но в итоге наилучший результат давал метод генерации номеров. Здесь на карте я искал большие города с густонаселенными районами. Брал коды этих районов, к примеру, 917 . Далее парсил по операторам коды со значением Wireless. Генерировал номера и рассылал по ним. На удивление, получалось лучше, чем с покупных, либо спаршеных баз.

Текст рассылки

Я пробовал свипы, гемблинг, товарку и т.д. Но как и ожидалось, что лучше всего заходил дейтинг. Использовался самый простой текст, наподобие “Привет, давай знакомиться”, либо “У вас 5 новых сообщений от Имя. Читать ссылка”. Я не раз уже убеждался на практике, что под микс траффик сообщение должно быть как можно короче.

Ничто не вечно

Раньше каждый раз, когда проект готов к полноценному запуску и масштабированию, я сталкиваюсь с дилеммой. Работать тихо и незаметно, но (возможно) долго, либо максимально быстро получить профит. В последнее время я все чаще выбираю второй вариант. Но тогда в случае с НП я остановился на чем-то среднем. И спустя месяц разработчики убрали возможность отправлять какие-либо активные ссылки. Еще пару дней я слал с доменами .рф, но и этот способ прикрыли. Проходят неактивные ссылки, что-то вроде этого: http:/fb․me∕messages∕t∕@%79%61%2e%72%75 , но даже отправляя их отдельным сообщением, траффик упал в десятки раз. Пришлось отложить этот проект.

Вернулся я к НП спустя месяц. И нашел крайне простой способ отправки, который проморгал в самом начале. В 2019 году в приложении была функция “Пригласи друга”. Можно было приглашать друзей путем отправки смс непосредственно из НП. Никаких вебсокетов, обычный пост запрос, ссылки проходят. Месяца через полтора разработчики просто вырезали эту функцию. И опять проект перешел в категорию “будет время, посмотрю”.

Время появилось через пару месяцев. К сожалению, я так и не нашел способа отправлять активные ссылки в смс. Но заметил, что сообщения между пользователями НП проходят через свой обработчик и ссылки работают.

Посмотреть вложение 68575

Т.е. можно попробовать разослать сообщения внутри самого мессенджера. Но как спарсить базу пользователей? Из поиска можно найти только по полному логину, id здесь - это md5 хэш.
Как я и писал, за время работы мне удалось получить около 200к номеров. Так как я все данные храню в бд, я сделал выборку, получил все эти номера, убрал последние 4 цифры и почистил от дублей. Так как при получения номера я всегда использовал рандомный localeId и при таком большом количестве данных, можно предположить, что я получил практически все диапазоны, из которых НП выдает номера для своего сервиса. Вышло 12к+ диапазонов.
В приложении при вводе номера получателя НП проверяет наличие пользователя с таким номером в своем сервисе:

Посмотреть вложение 68576

И, если номер в данный момент привязан к аккаунту, то будет такой ответ, из которого можно получить все данные о пользователе. Если аккаунт не активен в течение недели-двух, то сервис забирает номер. При бане аккаунта также. Сгенерировав все возможные номера и проверив их таким образом, я получил 2кк+ пользователей. Именно активных пользователей. Также плюсом к внутренней рассылки - это то, что не нужно получать номера.

Дважды в месяц я перечекивал эти 2кк+ номеров, получая примерно 400-500к новых пользователей, так как номера. Рассылка по ним приносила $1.5-3к в месяц. Но в мае этого года ввели фильтр на ссылки и для сообщений внутри НП. Еще была попытка рассылок картинками, но желаемого результата я не получил.

Статистика

Лил я на ЛП и монету:

Посмотреть вложение 68577
очень большое полотно получается, поэтому обрезал
Посмотреть вложение 68578

Посмотреть вложение 68579

Какой-то трафик доходит и по сей день. Вот стата из тдс с 1 сентября по 9 декабря:

Посмотреть вложение 68584

P.s. В прикрепленном архиве шаблон NPreger.zp. В нем я попытался собрать максимально упрощенный скелет методов и запросов для работы с НП. Перед публикацией я проверил, все работает, за исключением запроса на регистрацию. Если кто-то сможет разобраться с safetynet recaptcha, то еще вполне можно что-то выжимать из НП.
По поводу приема смс для активаций на эти номера. Большинство популярных сервисов блокируют активации на виртуальные номера. Также сам НП имеет свои фильтры. И тем не менее хватает малоизвестных сайтов и сервисов, которые можно активировать на номера НП.
А как можно сязаться с тобой?
 

Bobbi86

Новичок
Регистрация
22.06.2023
Сообщения
7
Благодарностей
5
Баллы
3
Шаб конечно уже не рабочий, а вот методика класс. Много где применить можно. После прочтения появилась идея, пойду обдумывать.:D
 

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