В какой-то момент моей жизни я понял, что для счастья мне нужно создать 10 страниц-копий самого себя во Вконтакте и добавиться одновременно всеми в друзья к людям из френдлиста моей основной страницы. Для подробностей реализации идеи — прошу под кат.


Цели проекта


  • Сделать 10 страниц во Вконтакте
  • Скопировать аватар c основной страницы
  • Скопировать все посты с основной страницы
  • Скопировать все видео с основной страницы
  • Добавиться во все группы основной страницы
  • Сделать полный граф дружболайков среди ботов (лайкнуть каждую запись и добавить каждого бота в друзья)
  • Добавиться каждому из 80 людей из заранее составленного списка в друзья

Регистрация


Для создания страниц я использовал сервис sms-reg.com, подробнее о сервисах приема SMS хорошо написано тут.

Регистрируем все 10 страниц и записываем их логины/пароли в файл accounts.json (где id — id регистрируемой страницы, а zero_id — id нашей основной страницы):

{
  "zero_id": "21102****",
  "accounts": [
    {
      "phone": "7985002****",
      "password": "tTod********",
      "id": 53980****
    },
    {
      "phone": "7985317****",
      "password": "tglh********",
      "id": 53980****
    },

    ...

    {
      "phone": "7916033****",
      "password": "ZsRq********",
      "id": 54038****
    }
  ]
}

python + vk_api


Я буду работать с библиотекой vk_api.

pip install vk_api --user

Создадим файл bots.py, он нам пригодится для остальных скриптов:

import json
import vk
import vk_api
from captcha import captcha_handler

with open('accounts.json', 'r') as file:
	data = json.loads(file.read())
	accounts = data['accounts']
	zero_id = int(data['zero_id'])

vk_apis = []
def init_apis():
	current_id = 0
	for account in accounts:
		vk_session = vk_api.VkApi(account['phone'], account['password'], captcha_handler=captcha_handler)
		vk_session.auth()
		vk_apis.append(vk_session.get_api())
		print('account', current_id, 'successfully inited')
		current_id += 1
init_apis()

Он читает accounts.json и инициализирует api для каждого из аккаунтов.

Копирование аватара


def change_photo(vk):
	upload_url = vk.photos.getOwnerPhotoUploadServer()['upload_url']
	answer = json.loads(requests.post(upload_url, files={'photo': open('avatar.jpg', 'rb')}).text)
	vk.photos.saveOwnerPhoto(photo=answer['photo'], server=answer['server'], hash=answer['hash'])

counter = 0
for vk in vk_apis:
	change_photo(vk)
	print(counter, 'done')
	counter += 1

Копирование видео


videos = default_vk.video.get(owner_id=zero_id, count=100)

counter = 0
for vk in vk_apis:
	for video in videos['items']:
		vk.video.add(video_id=video['id'], owner_id=video['owner_id'])


Добавление в группы


from time import sleep
from bots import vk_apis, zero_id, accounts, default_vk

groups = default_vk.groups.get(user_id=zero_id, count=100)

counter = 0
for vk in vk_apis:
	for group in groups['items']:
		print('add to', group)
		vk.groups.join(group_id=group)
	print(counter)
	counter += 1

Создание полного графа друзей




counter = 0
for vk, account in zip(vk_apis, accounts):
	for friend in accounts:
		if friend['id'] == account['id']:
			continue
		vk.friends.add(user_id=friend['id'], captcha_handler=captcha_handler)
		print(counter, friend['id'], account['id'])
		counter += 1
		sleep(1)

Создание полного графа лайков



counter = 0
for vk, account in zip(vk_apis, accounts):
	for friend in accounts:
		if friend['id'] != account['id']:
			continue
		print(counter, friend['id'], account['id'])
		for post in vk.wall.get(owner_id=friend['id'])['items']:
			flag = True
			while flag:
				try: #иногда скрипт падал из-за большого количества запросов в секунду
					vk.likes.add(type='post', owner_id=post['owner_id'], item_id=post['id'])
					flag = False
				except:
					print('failed on', counter)
					sleep(10)
					pass
		counter += 1

Добавление в друзья


создаем файл friends, в котором в каждой сточке пишем

id_человека #ник_человека (для себя)

Вконтакте позволяет добавить примерно 80 человек в день.

friends_str = ''
with open('friends', 'r') as file:
	friends_str = file.read()

friends = [{'id': x.split(' #')[0], 'name': x.split(' #')[1]} for x in friends_str.split('\n')]

ids_ = ([x['id'] for x in (default_vk.users.get(user_ids=[x['id'] for x in friends]))])

for friend, id_ in zip(friends, ids_):
	print(friend['name'])
	print(friend)
	for vk in vk_apis:
		flag = True
		while flag:
			try:
				vk.friends.add(user_id=int(id_))
				flag = False
			except:
				print('error')
				sleep(10)

Обход капчи


Внимательный читатель уже увидел строчку

from captcha import captcha_handler

Поскольку Вконтакте не всегда нравится такое количество запросов, приходится обрабатывать капчу. Есть огромное количество сервисов, которые предоставляют такую возможность. Нужно просто отправить post запрос с капчей в base64 и подождать.



def uncapcha(url):
	imager = requests.get(url)
	r = requests.post('http://rucaptcha.com/in.php', data = {'method': 'base64', 'key': RUCAPTCHA_KEY, 'body': base64.b64encode(imager.content)})
	if (r.text[:3] != 'OK|'):
		print('captcha failed')
		return -1
	capid = r.text[3:]
	sleep(5)
	capanswer = requests.post('http://rucaptcha.com/res.php', data = {'key': RUCAPTCHA_KEY, 'id':capid, 'action':'get'}).text
	if (capanswer[:3] != 'OK|'):
		print('captcha failed')
		return -1
	return capanswer[3:]

Результаты


Вот несколько скриншотов того, что мне прислали люди
Скрытый текст


github
Главный вопрос остается открытым — зачем я это сделал? Понятия не имею.

Комментарии (33)


  1. DrAndyHunter
    26.04.2019 18:40
    +1

    Можно сделать троллейбус из буханки хлеба, но зачем?


    1. galqiwi Автор
      26.04.2019 18:42
      +1

      Понятия не имею.

      Рабочая версия заключается в том, чтобы люди видели 10 рекомендаций по добавлению в друзья при скроллинге ленты. Иногда хочется добавить немного сюра в жизнь.
      А вообще, как-то ведь надо проверять свой скилл.


      1. arandomic
        26.04.2019 18:50
        +1

        Я всё ожидал, что аватарки будут чуть различаться и на какой-то из вьюшек VK можно будет увидеть, как xkcd-man машет рукой


    1. Sabubu
      26.04.2019 21:11

      Думаю, что смысл этой затеи в том, чтобы создавать фейки каких-то других страниц. Например, есть какой-то специалист (например, специалист по ремонту), услуги которого часто ищут через вконтакте. если создать фейки его страницы, то люди будут находить их, после чего можно собирать с них деньги, перенаправлять к другому специалисту, или делать действия для разрушения репутации специалиста. Можно втираться в доверие, притворяясь другим человеком и выманивая деньги.

      В общем, раздолье для тех, кто не чист на руки. И хорошее напоминание, что не стоит верить информации в соцсетях.


      1. irondsd
        26.04.2019 22:58

        Это забанят через 5 минут после жалобы этого самого человека. Может сработать только эффект внезапности, когда человек об этом не знает и что-то можно будет срубить. Но ему быстро сообщат, он пожалуется, аккаунты забанят, и потом он будет регулярно проверять. Сомневаюсь в целесообразности этого.


        1. droidroot
          27.04.2019 00:33

          Только в статье указано, что человек решил сделать копии своей страницы, а не чужой. А вообще, это всё-таки один способов для создания фейков, накрутки и т.п.


  1. yarkov
    26.04.2019 20:56

    del


  1. zim32
    27.04.2019 00:08

    Недавно размышлял на тему что беда программиста как профессит в том, что это ремеслиничество. Ты ничего не знаешь кроме как переводить в код то вто другие скажут. Ну т.е. ни в какой предметной области ты не спец. Этот пост явное тому подтверждение.


    1. kAIST
      27.04.2019 14:13

      В посте как бы реализация своей собственной идеи, причем тут ремесло?


    1. QDeathNick
      27.04.2019 16:14

      Большинство людей, считающих себя спецами, не способны улучшить свою предметную область с помощью софта, для этого кроме знаний в предметной области требуется особый образ мышления.
      Сколько бы программисту не ставили ТЗ, пока он сам не въедет глубоко в предметную область ничего хорошего не сделает.
      Поэтому многие опытные программисты ещё и спецы в своих предметных областях, иначе не создать ничего хорошего.


      1. zim32
        28.04.2019 19:25

        Ну к примеру есть человек риелтор, который решил.сделать сервис по поиску квартир.или что-то еще такое. Он нанял разраба, тот ему запилил сервис. В итоге риелтор развил своё дело, а что получил программист? Он просто написал в очередной раз сайт апи или сайт ничего не зная.о предметной области. Ему дали четкое ТЗ с тестовой базой данных.


        1. Heinhain
          29.04.2019 08:44

          А риелтор, значит, привносит что-то стоящее, двигает вперед область перепродажи недвижимости. Смешно же, ну.


  1. AngReload
    27.04.2019 05:54

    Надо было их назвать Артур Артур


    1. Legomegger
      29.04.2019 09:00

      или Револьвер Оцелот


  1. vortupin
    27.04.2019 06:29

    Интересно, а есть ли сервис, подобный sms-reg.com, но только с американскими номерами, проходящими проверку Microsoft Live? Кто-нибудь может порекомендовать?


    1. karavan_750
      27.04.2019 10:17

      Ключевые слова для поисковика: "sms online".
      Далее смотри в найденных сервисах.
      Скорее всего, не с первого номера или не с первого сервиса будет удача, но найти можно.


      1. vortupin
        27.04.2019 18:03

        Бесплатные не работают с MS Live (а, в частности, с Microsoft Rewards), проверено неоднократно.


    1. pro100hikka98
      27.04.2019 13:23

      Есть конечно, даже бесплатно www.textnow.com


    1. Psychosynthesis
      27.04.2019 17:45

      Не уверен, насколько он подобный, это скорее полноценная телефония, но номера там почти для любой страны есть — Twilio. Правда платный.


    1. Vilgelm
      27.04.2019 17:58

      Вот тут 63 страны доступно, в том числе США. Насчет Microsoft Live не знаю правда. Самое сложное — это Google пожалуй, его проверку раньше обходил через звонок на номер МТТ, который он признавал за обычный landline, а не за IP телефонию. Не знаю пофиксили или нет.


      1. vortupin
        27.04.2019 18:12

        Номера IP-телефонии не подходят однозначно (кстати, интересно, каким образом это определяется? Но то, что определяется, это точно — пробовал от разных провайдеров, не катит). Вот если бы кто-нибудь подобную статью написал...), нужны именно «как бы настоящие» номера.


  1. mikechips
    27.04.2019 12:17
    +2

    Очень весело. Только с sms-reg будьте аккуратны — номера авторегов вносятся целыми диапазонами, так что ваши аккаунты скосят разом в коротком промежутке.


    1. nevzorofff
      27.04.2019 13:06
      -9

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


    1. pro100hikka98
      27.04.2019 13:29
      -5

      sms-reg принимает смс на номера хомячков с андроидом которые любят игры бесплатно без смс скачать. Как ты будешь это детектить?


      1. alex1478
        27.04.2019 15:23
        +1

        Можно получить какие-то подтверждения данной информации?


        1. pro100hikka98
          27.04.2019 15:29

          Скачай игру с какого нибудь сайта, и посмотри что будет дальше происходить.


          1. alex1478
            27.04.2019 16:06

            Я хочу получить какие-то статьи с разборами таких приложений, где будет видно что это приложение использует доступ к смс именно для того, чтобы продавать твой номер на подобных сервисах.


      1. mikechips
        30.04.2019 01:12

        Не знаю, что там они принимают, но я видел реальные подтверждения, что номера sms-reg'а банятся ДИАПАЗОНАМИ. Вряд ли это взлом.
        Хотя может я чего-то недопонял… это сложные аномалии.


  1. plm
    27.04.2019 17:08
    +4

    Главный вопрос остается открытым — зачем я это сделал?
    Что-то мне это напомнило древние времена: Сидишь на работе, у всех вокруг компы и аська. Замечаешь, что у коллеги колонки включены. Отключаешь на своей машине сеть, пишешь этому коллеге в аську 10 пустых сообщений, включаешь сеть. Коллега подпрыгивает от пулеметной очереди «ку-ку-ку(-ку)» из колонок.


  1. zxosa
    27.04.2019 18:28

    лучше подскажите, как отследить прямую трансляцию человека или группы. А то уведомления от самого вк приходят неудобно.


  1. SkyHunter
    27.04.2019 19:02

    Атака клонов )


  1. g0rd1as
    27.04.2019 19:09

    Из полезного, имхо, только uncapcha. Сохранил себе на подумать. :)


  1. ANIDEANI
    28.04.2019 15:32

    Лучше бы создали нейросеть для вычисления протеинов и для создания вечной автономной капсулы. Тогда была бы честь и хвала.