Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
xtekky
GitHub Repository: xtekky/tiktok-viewbot
Path: blob/main/old/v1/viewbot.py
619 views
1
# do not spam or it will kill devices and ruin fun for others
2
3
import base64
4
from pystyle import *
5
import os
6
import sys
7
import ssl
8
import re
9
import time
10
import random
11
import threading
12
import requests
13
import hashlib
14
import json
15
16
from urllib3.exceptions import InsecureRequestWarning
17
from http import cookiejar
18
19
class BlockCookies(cookiejar.CookiePolicy):
20
return_ok = set_ok = domain_return_ok = path_return_ok = lambda self, *args, **kwargs: False
21
netscape = True
22
rfc2965 = hide_cookie2 = False
23
24
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
25
ssl._create_default_https_context = ssl._create_unverified_context
26
27
r = requests.Session()
28
r.cookies.set_policy(BlockCookies())
29
30
class Gorgon:
31
def __init__(self,params:str,data:str,cookies:str,unix:int)->None:self.unix=unix;self.params=params;self.data=data;self.cookies=cookies
32
def hash(self,data:str)->str:
33
try:_hash=str(hashlib.md5(data.encode()).hexdigest())
34
except Exception:_hash=str(hashlib.md5(data).hexdigest())
35
return _hash
36
def get_base_string(self)->str:base_str=self.hash(self.params);base_str=base_str+self.hash(self.data)if self.data else base_str+str('0'*32);base_str=base_str+self.hash(self.cookies)if self.cookies else base_str+str('0'*32);return base_str
37
def get_value(self)->json:base_str=self.get_base_string();return self.encrypt(base_str)
38
def encrypt(self,data:str)->json:
39
unix=self.unix;len=20;key=[223,119,185,64,185,155,132,131,209,185,203,209,247,194,185,133,195,208,251,195];param_list=[]
40
for i in range(0,12,4):
41
temp=data[8*i:8*(i+1)]
42
for j in range(4):H=int(temp[j*2:(j+1)*2],16);param_list.append(H)
43
param_list.extend([0,6,11,28]);H=int(hex(unix),16);param_list.append((H&4278190080)>>24);param_list.append((H&16711680)>>16);param_list.append((H&65280)>>8);param_list.append((H&255)>>0);eor_result_list=[]
44
for (A,B) in zip(param_list,key):eor_result_list.append(A^B)
45
for i in range(len):C=self.reverse(eor_result_list[i]);D=eor_result_list[(i+1)%len];E=C^D;F=self.rbit_algorithm(E);H=(F^4294967295^len)&255;eor_result_list[i]=H
46
result=''
47
for param in eor_result_list:result+=self.hex_string(param)
48
return{'X-Gorgon':'0404b0d30000'+result,'X-Khronos':str(unix)}
49
def rbit_algorithm(self,num):
50
result='';tmp_string=bin(num)[2:]
51
while len(tmp_string)<8:tmp_string='0'+tmp_string
52
for i in range(0,8):result=result+tmp_string[7-i]
53
return int(result,2)
54
def hex_string(self,num):
55
tmp_string=hex(num)[2:]
56
if len(tmp_string)<2:tmp_string='0'+tmp_string
57
return tmp_string
58
def reverse(self,num):tmp_string=self.hex_string(num);return int(tmp_string[1:]+tmp_string[:1],16)
59
60
def send(did, iid, cdid, openudid):
61
global reqs, _lock, success, fails
62
63
for x in range(10):
64
try:
65
params = f"device_id={did}&iid={iid}&device_type=SM-G973N&app_name=musically_go&host_abi=armeabi-v7a&channel=googleplay&device_platform=android&version_code=160904&device_brand=samsung&os_version=9&aid=1340"
66
payload = f"item_id={__aweme_id}&play_delta=1"
67
sig = Gorgon(params=params, cookies=None, data=None, unix=int(time.time())).get_value()
68
69
proxy = random.choice(proxies) if config['proxy']['use-proxy'] else ""
70
response = requests.post(
71
url = (
72
"https://api16-va.tiktokv.com/aweme/v1/aweme/stats/?" + params
73
),
74
data = payload,
75
headers = {'cookie':'sessionid=90c38a59d8076ea0fbc01c8643efbe47','x-gorgon':sig['X-Gorgon'],'x-khronos':sig['X-Khronos'],'user-agent':'okhttp/3.10.0.1'},
76
verify = False,
77
proxies = {"http": proxy_format+proxy, "https": proxy_format+proxy} if config['proxy']['use-proxy'] else {}
78
)
79
reqs += 1
80
try:
81
_lock.acquire()
82
print(Colorate.Horizontal(Colors.green_to_white, f"+ - sent views {response.json()['log_pb']['impr_id']} {__aweme_id} {reqs}"))
83
_lock.release()
84
success += 1
85
except:
86
if _lock.locked():_lock.release()
87
fails += 1
88
continue
89
90
except Exception as e:
91
pass
92
93
def rpsm_loop():
94
global rps, rpm
95
while True:
96
initial = reqs
97
time.sleep(1.5)
98
rps = round((reqs - initial) / 1.5, 1)
99
rpm = round(rps * 60, 1)
100
101
def title_loop():
102
global rps, rpm, success, fails, reqs
103
104
if os.name == "nt":
105
while True:
106
os.system(f'title TikTok Viewbot by @xtekky ^| success: {success} fails: {fails} reqs: {reqs} rps: {rps} rpm: {rpm}')
107
time.sleep(0.1)
108
109
if __name__ == "__main__":
110
os.system("cls" if os.name == "nt" else "clear"); os.system("title TikTok Viewbot by @xtekky" if os.name == "nt" else "")
111
txt = """\n\n╦ ╦╦╔═╗╦ ╦╔╗ ╔═╗╔╦╗\n╚╗╔╝║║╣ ║║║╠╩╗║ ║ ║ \n ╚╝ ╩╚═╝╚╩╝╚═╝╚═╝ ╩ \n"""
112
print(
113
Colorate.Vertical(
114
Colors.DynamicMIX((Col.light_blue, Col.purple)), Center.XCenter(txt)
115
)
116
)
117
118
try:
119
link = str(Write.Input("\n\n ? - Video Link > ", Colors.yellow_to_red, interval=0.0001))
120
__aweme_id = str(
121
re.findall(r"(\d{18,19})", link)[0]
122
if len(re.findall(r"(\d{18,19})", link)) == 1
123
else re.findall(
124
r"(\d{18,19})",
125
requests.head(link, allow_redirects=True, timeout=5).url
126
)[0]
127
)
128
except:
129
os.system("cls" if os.name == "nt" else "clear")
130
input(Col.red + "x - Invalid link, try inputting video id only" + Col.reset)
131
sys.exit(0)
132
133
os.system("cls" if os.name == "nt" else "clear")
134
print("loading...")
135
136
_lock = threading.Lock()
137
reqs = 0
138
success = 0
139
fails = 0
140
rpm = 0
141
rps = 0
142
143
threading.Thread(target=rpsm_loop).start()
144
threading.Thread(target=title_loop).start()
145
146
with open('devices.txt', 'r') as f:
147
devices = f.read().splitlines()
148
149
with open('config.json', 'r') as f:
150
config = json.load(f)
151
proxy_format = f'{config["proxy"]["proxy-type"].lower()}://{config["proxy"]["credential"]+"@" if config["proxy"]["auth"] else ""}' if config['proxy']['use-proxy'] else ''
152
if config['proxy']['use-proxy']:
153
with open('proxies.txt', 'r') as f:
154
proxies = f.read().splitlines()
155
156
while True:
157
device = random.choice(devices)
158
159
if eval(base64.b64decode("dGhyZWFkaW5nLmFjdGl2ZV9jb3VudCgpIDwgMTAwICMgZG9uJ3QgY2hhbmdlIGNvdW50IG9yIHUgd2lsbCBraWxsIGRldmljZXMgYW5kIHJ1aW4gZnVuIGZvciBvdGhlcnM=")):
160
did, iid, cdid, openudid = device.split(':')
161
eval(base64.b64decode('dGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VuZCxhcmdzPVtkaWQsaWlkLGNkaWQsb3BlbnVkaWRdKS5zdGFydCgp'))
162