import random
import requests
import json
import time
import base64
from threading import Thread
import hmac
import base64
from hashlib import sha1
from uuid import uuid4
import names
from hashlib import sha1
from functools import reduce
from base64 import b85decode, b64decode
import platform,socket,re,uuid
proxies_file = 'p.txt' #Proxy file name
write_file = 'd.txt' #File for recording accounts
rucaptcha_key = 'key' #Rukapchi API Key
nickname = 'dichhk' #Account nickname
password = 'tempmail' #Account password
threads = 70 #Number of threads
def dev():
hw=(names.get_full_name()+str(random.randint(0,10000000))+platform.version()+platform.machine()+names.get_first_name()+socket.gethostbyname(socket.gethostname())+':'.join(re.findall('..', '%012x' % uuid.getnode()))+platform.processor())
identifier=sha1(hw.encode('utf-8')).digest()
key='02b258c63559d8804321c5d5065af320358d366f'
mac = hmac.new(bytes.fromhex(key), b"\x42" + identifier, sha1)
return (f"42{identifier.hex()}{mac.hexdigest()}").upper()
def generate_sig_func(data):
key='f8e7a61ac3f725941e3ac7cae2d688be97f30b93'
mac = hmac.new(bytes.fromhex(key), data.encode("utf-8"), sha1)
digest = bytes.fromhex("42") + mac.digest()
return base64.b64encode(digest).decode("utf-8")
class Register:
def __init__(self):
self.api = 'https://service.narvii.com/api/v1'
self.proxies = None
def set_device(self, deviceId):
self.device_id = deviceId
self.s_headers = {"NDCDEVICEID": f"{self.device_id}"}
def set_proxy(self, proxy):
proxy = proxy.replace('\n','')
proxies = {'http':str('http://'+str(proxy)),'https':str('http://'+str(proxy))}
self.proxies = proxies
def register(self, nickname: str, email: str, password: str, verificationCode: str):
data = json.dumps({
"secret": f"0 {password}",
"deviceID": self.device_id,
"email": email,
"clientType": 100,
"nickname": nickname,
"latitude": 0,
"longitude": 0,
"address": None,
"clientCallbackURL": "narviiapp://relogin",
"validationContext": {
"data": {
"code": verificationCode
},
"type": 1,
"identity": email
},
"type": 1,
"identity": email,
"timestamp": int(time.time() * 1000)
})
d_headers = {
"NDCDEVICEID": f"{self.device_id}",
"NDC-MSG-SIG": generate_sig_func(data),
"Accept-Language": "en-US",
"Content-Type": "text/javascript; charset=UTF-8",
"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 7.1.2; SM-G965N Build/star2ltexx-user 7.1.; com.narvii.amino.master/3.4.33592)",
"Host": "service.narvii.com",
"Accept-Encoding": "gzip",
"Connection": "Upgrade"
}
try:
response = requests.post(f"{self.api}/g/s/auth/register", data=data, headers=d_headers, proxies=self.proxies, timeout=10).json()
return response
except:
return False
def request_verify_code(self, email: str, resetPassword: bool = False):
data = {
"identity": email,
"type": 1,
"deviceID": self.device_id
}
if resetPassword is True:
data["level"] = 2
data["purpose"] = "reset-password"
data = json.dumps(data)
d_headers = {
"NDCDEVICEID": f"{self.device_id}",
"NDC-MSG-SIG": generate_sig_func(data),
"Accept-Language": "en-US",
"Content-Type": "text/javascript; charset=UTF-8",
"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 7.1.2; SM-G965N Build/star2ltexx-user 7.1.; com.narvii.amino.master/3.4.33592)",
"Host": "service.narvii.com",
"Accept-Encoding": "gzip",
"Connection": "Upgrade"
}
try:
response = requests.post(f"{self.api}/g/s/auth/request-security-validation", data=data, headers=d_headers, timeout=10).json()
return response
except Exception as e:
print(e)
return False
class Mail:
def __init__(self, mail):
self.mail = mail
self.api = "https://www.1secmail.com/api/v1/"
self.login, self.domain = self.mail.split("@")
def get_email_messages(self):
msg_id = requests.get(f"{self.api}?action=getMessages&login={self.login}&domain={self.domain}").json()[0]['id']
return msg_id
def get_email_link(self, msg_id: str):
body = requests.get(f"{self.api}?action=readMessage&login={self.login}&domain={self.domain}&id={msg_id}").json()['body']
msg = body.split()
link = msg[49].split('"')
return link[1]
class RuCaptcha:
def __init__(self, api_key):
self.key = api_key
def decrypting_captchas(self,url: str):
return requests.post("https://captcha-do-mega.herokuapp.com/", data={"text": url}).json()['captcha']
def send_failed_captcha(self, taskId: str):
requests.post(url = f'http://rucaptcha.com/res.php?key={self.key}&action=reportbad&id={taskId}')
def generate_mail():
chars = 'abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
email = ''
for _ in range(16): email += random.choice(chars)
return f'{email}@wwjmp.com'
def main():
proxy_list = []
proxies = open(proxies_file, 'r', encoding='utf-8')
for proxy in proxies.readlines():
proxy_list.append(proxy)
client = Register()
client.set_proxy(random.choice(proxy_list))
rucaptcha_client = RuCaptcha(rucaptcha_key)
while True:
deviceId = dev()
client.set_device(deviceId)
try:
for i in range(3):
email = generate_mail()
mail_client = Mail(email)
response = client.request_verify_code(email = email)
if response['api:message'] == 'OK':
while True:
try:
msg_id = mail_client.get_email_messages()
break
except:
pass
code = mail_client.get_email_link(msg_id)
print(code)
captcha = rucaptcha_client.decrypting_captchas(code)
print(captcha)
while True:
try:
if captcha:
response = client.register(nickname = nickname, email = email, password = password, verificationCode=captcha)
if response:
if 'account' in response:
with open(write_file, "a") as file:
acc = f'\n{{"email": "{email}","password":"{password}","secret":f"{response["secret"]}","device": "{client.device_id}"}},'
file.write(acc)
print(f"{email} {password}")
break
else:
code = response["api:statuscode"]
if code == 110:
try:
proxy_list.remove(client.proxies)
except:
pass
client.set_proxy(random.choice(proxy_list))
print('Change proxy.')
continue
elif code == 219:
client.set_device(random.choice(deviceId))
print('Change device ID.')
continue
elif code == 270:
try:
proxy_list.remove(client.proxies)
except:
pass
client.set_proxy(random.choice(proxy_list))
print('Change proxy.')
elif code == 3102:
print('Incorrect code. I am sending a message to the site')
break
else:
print(response)
else:
try:
proxy_list.remove(client.proxies)
except:
pass
client.set_proxy(random.choice(proxy_list))
else:
print('No money rucaptcha...')
exit()
except requests.exceptions.ProxyError:
print('Change proxy.')
try:
proxy_list.remove(client.proxies)
except:
pass
client.set_proxy(random.choice(proxy_list))
else:
print(response)
try:
proxy_list.remove(client.proxies)
except:
pass
client.set_proxy(random.choice(proxy_list))
print('Change proxy.')
except:
pass
if __name__ == "__main__":
for i in range(threads):
Thread(target = main).start()