Исходник пригласителя в группу VК

Discussion in 'PHP' started by lukmus, 13 Mar 2010.

  1. lukmus

    lukmus Elder - Старейшина

    Joined:
    18 Nov 2009
    Messages:
    366
    Likes Received:
    115
    Reputations:
    23
    Уважаемые модераторы, я так посчитал, что эта тема больше относиться к кодингу, чем к соцсетям.
    Короче, заказывали у меня скрипт способный приглашать друзей в группу, а так же вступать самим аккам в группу для VК, я скрипт написал, а заказчик забил на эту тему.

    Code:
    #made by lukmus 06.03.2010
    #!/usr/bin/ruby
    require 'lib_fs.rb'
    
    #CONFIG=============================================
    $togrp=15 #count of friends for one invite attemp
    $wait_time=25 #time between invalid attemp
    $log_f='log.log' #log file
    #===================================================
    
    help=<<EOF
    <acc_file> <group_id> [-iaf]
    acc_file 	file with accounts, format: login:pass
    group_id 	group number, integer
    iaf		invite all friends
    
    made by lukmus 06.03.2010
    EOF
    
    if ARGV.size<2 or ARGV.size>3 
    	puts help
    	exit
    end
    
    $acc_f=ARGV[0]
    gr=ARGV[1].to_i
    invite_a_f=false
    
    if ARGV.size==3 and ARGV[2]=='-iaf' then invite_a_f=true end
    
    $all_f_count=0
    $all_if_count=0
    
    
    def log(str)
    	fl=File.new($log_f,'a')
    	fl.puts str
    	fl.close
    end
    
    def iaf(account,gr_id)
    	friends=account.get_all_friends_ids
    	suc_count=0
    	good=0
    	if friends==-1 then puts " get friends FAILED" else			
    			print " \ninviting"
    			$all_f_count+=friends.size
    			STDOUT.flush
    			end_p=$togrp
    			start_p=0
    			while start_p<friends.size do
    				end_p=start_p+$togrp
    				if end_p>friends.size-1 then end_p=friends.size-1 end
    				if account.invite_f_in_group(gr_id,friends[start_p..end_p])==0 then
    					 print '.' 
    					 $all_if_count+=end_p-start_p
    					 suc_count+=end_p-start_p
    					 good=1
    				else print '?' end
    				STDOUT.flush
    						
    				start_p+=$togrp
    				
    				
    			end
    	$all_if_count+=good
    	print " [suc_count=#{suc_count+good}/f_count=#{friends.size}]" 	
    		STDOUT.flush				
    	end
    end
    
    fil=File.new($acc_f,"r")
    while !fil.eof 
    	str=fil.gets
    	str.chop!
    	mail,pass=str.split(':')
    	print "\n #{mail} "
    	acc=Account.new(mail,pass)
    	if acc.logon==0 
    		if acc.enter_in_group(gr)==0 then print " OK " else print " WARNING: Can't enter in group " end
    		if invite_a_f==true then iaf(acc,gr) end
    	else 
    		puts " ERROR: Invalid login or password "
    		log("Invalid #{mail.gsub('%40','@')}:#{pass}")
    		wait($wait_time,1)
    	end
    end
    fil.close
    puts "\n[all_f_count=#{$all_f_count}/all_invite_f_count=#{$all_if_count}]"
    
    
    Как установить Ruby и как запустить скрипт
    библиотека необходимая для скрипта
    все файлы в одном архиве

    О работе скрипта
    Скрипт считывает из файла пару логин:пароль, каждая пара на новой строке. Далее логиниться и выполняет следующие действия:
    -вступает в группу с номером <group_id>
    -если указан параметр -iaf, то приглашает в группу всех своих друзей
    Последняя функция работает не всегда, принцип по которому VК отсеивает выяснить не удалось т.к. зачастую эта функция не работает и через браузер.

    Пару слов о библиотеке
    В файле так называемой библиотеки содержиться class Account, который собственно и содержит методы, которые реализуют функции скрипта.

    Для рубистов
    Насколько я знаю, на этом форуме их очень не много.
    Как я уже писал все самое интересное в библиотеке, в кратце опишу методы класса Account:
    -enter_in_group(gr_id)
    вступает в группу gr_id
    -invite_f_in_group(gr_id,user_ids)
    приглашает в группу gr_id, юзеров массива user_ids
    -count_of_users_in_grp(gr_id)
    возвращает количество акков в группе gr_id, данные берет с главной страницы группы, поэтому в случае быстрого инвайта запаздывает
    -get_all_friends_ids()
    возвращает массив с id друзей
    -logon()
    самая интересная функция, может пригодиться для брута, но только через прокси. логиниться.
    -get_my_id()
    возвращает id акка
    -get_friends_count()
    возвращает кол-во друзей акка
    -get_hash_4_invite_2_group(prehash)
    разгадывает загадку, по которой VК шифрует хэш для инвайта по prehash (якобы хэш выводящийся в явном виде)
    -get_hash(path,id,n)
    возвращает остальные бесхитростные хэши

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