natazx 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
natazx-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,6 @@
1
+ Metadata-Version: 2.4
2
+ Name: natazx
3
+ Version: 0.1.0
4
+ Summary: Project natazx by septianhdnatta
5
+ Author-email: septianhdnatta <septianhdnatta@example.com>
6
+ License: MIT
@@ -0,0 +1,17 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "natazx"
7
+ version = "0.1.0"
8
+ description = "Project natazx by septianhdnatta"
9
+ license = {text = "MIT"}
10
+ authors = [{name = "septianhdnatta", email = "septianhdnatta@example.com"}]
11
+ dependencies = []
12
+
13
+ [tool.setuptools.packages.find]
14
+ where = ["src"]
15
+
16
+ [project.scripts]
17
+ natazx = "natazx:main"
natazx-0.1.0/setup.cfg ADDED
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1 @@
1
+ from .natazx import main
@@ -0,0 +1,4 @@
1
+ from .natazx import main
2
+
3
+ if __name__ == "__main__":
4
+ main()
@@ -0,0 +1,749 @@
1
+ """
2
+ GLITXH-VIP GENERATOR V2.0 ULTRA
3
+ Credits : glitxh (tele : @glitxh4ff)
4
+ """
5
+
6
+ import sys, os, hashlib, hmac, zlib, random, time, threading, platform, json
7
+ import urllib.request
8
+ import urllib.error
9
+
10
+ DEVICE_CHECK_URL = "https://raw.githubusercontent.com/septianhdnatta/idd/refs/heads/main/device.json"
11
+
12
+ def _get_device_fingerprint():
13
+ fp = []
14
+
15
+ try:
16
+ import subprocess
17
+ serial = subprocess.check_output(['getprop', 'ro.serialno'], text=True).strip()
18
+ if not serial or serial == 'unknown':
19
+ serial = os.environ.get('ANDROID_SERIAL', '')
20
+ fp.append(serial)
21
+ except:
22
+ fp.append('')
23
+
24
+ try:
25
+ model = platform.machine()
26
+ fp.append(model)
27
+ except:
28
+ fp.append('')
29
+
30
+ try:
31
+ brand = platform.system()
32
+ fp.append(brand)
33
+ except:
34
+ fp.append('')
35
+
36
+ try:
37
+ with open('/system/build.prop', 'r') as f:
38
+ for line in f:
39
+ if 'ro.build.fingerprint' in line:
40
+ fp.append(line.split('=')[1].strip())
41
+ break
42
+ except:
43
+ fp.append('')
44
+
45
+ try:
46
+ import subprocess
47
+ man = subprocess.check_output(['getprop', 'ro.product.manufacturer'], text=True).strip()
48
+ fp.append(man)
49
+ except:
50
+ fp.append('')
51
+
52
+ try:
53
+ hw = platform.processor()
54
+ fp.append(hw)
55
+ except:
56
+ fp.append('')
57
+
58
+ try:
59
+ tz = time.tzname[0] if time.tzname else ''
60
+ fp.append(tz)
61
+ except:
62
+ fp.append('')
63
+
64
+ try:
65
+ uid = str(os.getuid())
66
+ fp.append(uid)
67
+ except:
68
+ fp.append('')
69
+
70
+ raw = '|'.join(fp).encode()
71
+
72
+ h1 = hashlib.sha3_512(raw).digest()
73
+ h2 = hashlib.blake2b(h1).digest()
74
+ final = hashlib.sha256(h1 + h2).hexdigest()
75
+
76
+ return '-'.join([final[i:i+4] for i in range(0, 32, 4)]).upper()
77
+
78
+ _DEVICE_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), '.deviceid')
79
+ _XOR_KEY = bytes([0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0])
80
+
81
+ def _xor_encrypt(data):
82
+ return bytes([data[i] ^ _XOR_KEY[i % len(_XOR_KEY)] for i in range(len(data))])
83
+
84
+ def _save_device_id(fingerprint, use_count=0):
85
+ data = {
86
+ 'fp': fingerprint,
87
+ 'use': use_count,
88
+ 'ts': int(time.time())
89
+ }
90
+ json_str = json.dumps(data)
91
+ compressed = zlib.compress(json_str.encode())
92
+ encrypted = _xor_encrypt(compressed)
93
+ import base64
94
+ encoded = base64.b64encode(encrypted).decode()
95
+ sig = hmac.new(_XOR_KEY, encrypted, hashlib.blake2b).hexdigest()
96
+ with open(_DEVICE_FILE, 'w') as f:
97
+ f.write(encoded + '|' + sig)
98
+
99
+ def _load_device_id():
100
+ if not os.path.exists(_DEVICE_FILE):
101
+ return None
102
+ try:
103
+ import base64
104
+ with open(_DEVICE_FILE, 'r') as f:
105
+ content = f.read().strip()
106
+ if '|' not in content:
107
+ return None
108
+ encoded, sig = content.split('|')
109
+ encrypted = base64.b64decode(encoded.encode())
110
+ expected = hmac.new(_XOR_KEY, encrypted, hashlib.blake2b).hexdigest()
111
+ if not hmac.compare_digest(sig, expected):
112
+ return None
113
+ decrypted = _xor_encrypt(encrypted)
114
+ decompressed = zlib.decompress(decrypted)
115
+ data = json.loads(decompressed.decode())
116
+ return data
117
+ except:
118
+ return None
119
+
120
+ def _verify_online():
121
+ try:
122
+ fp = _get_device_fingerprint()
123
+
124
+ print(f"\nHello user. We will check your device ID status! Please wait a moment...")
125
+
126
+ req = urllib.request.Request(DEVICE_CHECK_URL, headers={'User-Agent': 'Mozilla/5.0'})
127
+ with urllib.request.urlopen(req, timeout=10) as response:
128
+ content = response.read().decode()
129
+ data = json.loads(content)
130
+
131
+ if isinstance(data, list):
132
+ allowed_devices = [str(device).strip() for device in data if device]
133
+ else:
134
+ print(f"Format JSON salah! Diharapkan array, mendapat {type(data)}")
135
+ return False
136
+
137
+ if fp in allowed_devices:
138
+ return True
139
+ else:
140
+ print("\nHello user. Welcome to the glitxh script. We believe you haven't verified your device ID. Please contact the admin and send your device ID to them.")
141
+ print(f"Device ID: {fp}")
142
+ print("Send it to Telegram at t.me/natazaxz to use the script.")
143
+ return False
144
+
145
+ except urllib.error.URLError as e:
146
+ print("\nGAGAL KONEKSI KE SERVER")
147
+ print(f"Error: {str(e)}")
148
+ print("Pastikan koneksi internet Anda aktif.")
149
+ return False
150
+ except json.JSONDecodeError as e:
151
+ print("\nERROR FORMAT JSON")
152
+ print(f"Format JSON tidak valid: {str(e)}")
153
+ return False
154
+ except Exception as e:
155
+ print("\nVERIFIKASI GAGAL")
156
+ print(f"Error: {str(e)}")
157
+ return False
158
+
159
+ def _run_protection():
160
+ os.system('cls' if os.name == 'nt' else 'clear')
161
+
162
+ if not _verify_online():
163
+ print("\n")
164
+ time.sleep(3)
165
+ sys.exit(1)
166
+
167
+ fingerprint = _get_device_fingerprint()
168
+ stored = _load_device_id()
169
+ if stored is None:
170
+ _save_device_id(fingerprint, 1)
171
+
172
+ print("\nWelcome back sir!..\n")
173
+ time.sleep(1)
174
+
175
+ _run_protection()
176
+
177
+ # ============================================================
178
+ # LANJUTAN SCRIPT ASLI
179
+ # ============================================================
180
+
181
+ import subprocess, base64
182
+
183
+ def _pip(p, m=None):
184
+ try: __import__(m or p.replace("-","_"))
185
+ except ImportError:
186
+ subprocess.check_call([sys.executable,"-m","pip","install",p,"-q"],
187
+ stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
188
+
189
+ for _p,_m in [("colorama",None),("requests",None),("pycryptodome","Crypto"),
190
+ ("urllib3",None),("cfonts",None)]:
191
+ _pip(_p,_m)
192
+
193
+ import time, threading, socket, re, json, hmac, hashlib
194
+ import string, random, codecs, base64, itertools
195
+ from datetime import datetime
196
+ from concurrent.futures import ThreadPoolExecutor, wait, FIRST_COMPLETED
197
+ from queue import Queue, Empty
198
+
199
+ import requests, urllib3
200
+ from Crypto.Cipher import AES
201
+ from Crypto.Util.Padding import pad
202
+ from colorama import Fore, Style, init
203
+ from cfonts import render
204
+
205
+ init(autoreset=True)
206
+ urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
207
+
208
+ R=Fore.RED; G=Fore.GREEN; Y=Fore.YELLOW; C=Fore.CYAN
209
+ M=Fore.MAGENTA; LG=Fore.LIGHTGREEN_EX; W=Fore.RESET; B=Style.BRIGHT
210
+
211
+ def fmt(sec):
212
+ sec=max(0,int(sec))
213
+ d,sec=divmod(sec,86400); h,sec=divmod(sec,3600); m,s=divmod(sec,60)
214
+ p=[]
215
+ if d: p.append(f"{d}hari")
216
+ if h: p.append(f"{h}jam")
217
+ if m: p.append(f"{m}menit")
218
+ if s or not p: p.append(f"{s}detik")
219
+ return " ".join(p)
220
+
221
+ VALID = {"ME","IND","ID","VN","TH","BD","PK","TW","EU","CIS","NA","SAC","BR","SG"}
222
+ LANG = {"ME":"ar","IND":"hi","ID":"id","VN":"vi","TH":"th","BD":"bn",
223
+ "PK":"ur","TW":"zh","EU":"en","CIS":"ru","NA":"en","SAC":"es","BR":"pt","SG":"en"}
224
+
225
+ TIER_E = {"NORMAL":"🍀","LOW":"😬","MEDIUM":"🤩","HIGH":"☠️","LEGEND":"❤️‍🔥"}
226
+ TIER_C = {"LEGEND":R+B,"HIGH":M+B,"MEDIUM":C+B,"LOW":Y,"NORMAL":G}
227
+
228
+ _AK = bytes([89,103,38,116,99,37,68,69,117,104,54,37,90,99,94,56])
229
+ _AI = bytes([54,111,121,90,68,114,50,50,69,51,121,99,104,106,77,37])
230
+ HEX_KEY = "32656534343831396539623435393838343531343130363762323831363231383734643064356437616639643866376530306331653534373135623764316533"
231
+ KEY = bytes.fromhex(HEX_KEY)
232
+
233
+ def aes_bytes(h: str) -> bytes:
234
+ return AES.new(_AK,AES.MODE_CBC,_AI).encrypt(pad(bytes.fromhex(h),16))
235
+
236
+ def aes_hex(h: str) -> str:
237
+ return aes_bytes(h).hex()
238
+
239
+ def ev(n):
240
+ r=[]
241
+ while True:
242
+ b=n&0x7F; n>>=7
243
+ if n: b|=0x80
244
+ r.append(b)
245
+ if not n: break
246
+ return bytes(r)
247
+
248
+ def pb(fields):
249
+ o=bytearray()
250
+ for f,v in fields.items():
251
+ if isinstance(v,dict): o+=ev((f<<3)|2)+ev(len(p:=pb(v)))+p
252
+ elif isinstance(v,int): o+=ev((f<<3)|0)+ev(v)
253
+ else:
254
+ p=v.encode() if isinstance(v,str) else v
255
+ o+=ev((f<<3)|2)+ev(len(p))+p
256
+ return bytes(o)
257
+
258
+ def enc_oid(s):
259
+ k=[0x30,0x30,0x30,0x32,0x30,0x31,0x37,0x30,0x30,0x30,0x30,0x30,0x32,0x30,0x31,0x37,
260
+ 0x30,0x30,0x30,0x30,0x30,0x32,0x30,0x31,0x37,0x30,0x30,0x30,0x30,0x30,0x32,0x30]
261
+ return {"open_id":s,"field_14":"".join(chr(ord(c)^k[i%32]) for i,c in enumerate(s))}
262
+
263
+ def ue(s): return "".join(c if 32<=ord(c)<=126 else f"\\u{ord(c):04x}" for c in s)
264
+
265
+ def jwt_id(t):
266
+ try:
267
+ p=t.split(".")[1]; p+="="*((4-len(p)%4)%4)
268
+ d=json.loads(base64.urlsafe_b64decode(p))
269
+ for k in("account_id","external_id","user_id","uid"):
270
+ if d.get(k): return str(d[k])
271
+ except: pass
272
+ return "N/A"
273
+
274
+ def decode_resp(text):
275
+ PREFIX="eyJhbGciOiJIUzI1NiIsInN2ciI6IjEiLCJ0eXAiOiJKV1QifQ"
276
+ for start_str in (PREFIX,"eyJ"):
277
+ i=text.find(start_str)
278
+ if i==-1: continue
279
+ t=text[i:]
280
+ d1=t.find("."); d2=t.find(".",d1+1) if d1!=-1 else -1
281
+ if d2==-1: continue
282
+ aid=jwt_id(t[:d2+44])
283
+ if aid!="N/A": return aid
284
+ return "N/A"
285
+
286
+ _TOR_PROC = None
287
+ _TOR_READY = False
288
+ _TOR_REN = False
289
+ _TOR_LK = threading.Lock()
290
+
291
+ def _tor_setup():
292
+ global _TOR_PROC, _TOR_READY
293
+ for p in ['/data/data/com.termux/files/usr/etc/resolv.conf','/etc/resolv.conf']:
294
+ try:
295
+ os.makedirs(os.path.dirname(p),exist_ok=True)
296
+ open(p,'w').write("nameserver 1.1.1.1\nnameserver 1.0.0.1\noptions rotate timeout:1 attempts:1\n")
297
+ break
298
+ except: pass
299
+ try: subprocess.run(['pkill','-9','tor'],capture_output=True); time.sleep(1)
300
+ except: pass
301
+ rc=("SocksPort 127.0.0.1:9050\nControlPort 127.0.0.1:9051\nCookieAuthentication 0\n"
302
+ "MaxCircuitDirtiness 8\nUseEntryGuards 0\nNumEntryGuards 8\nSafeLogging 0\n"
303
+ "Log notice stdout\nClientUseIPv4 1\nCircuitBuildTimeout 8\n"
304
+ "LearnCircuitBuildTimeout 0\nMaxOnionsPending 2048\n")
305
+ tp='/tmp/torrc'
306
+ for p in ['/data/data/com.termux/files/usr/etc/tor/torrc','/tmp/torrc']:
307
+ try: os.makedirs(os.path.dirname(p),exist_ok=True); open(p,'w').write(rc); tp=p; break
308
+ except: pass
309
+ _TOR_PROC=subprocess.Popen(['tor','-f',tp],stdout=subprocess.DEVNULL,
310
+ stderr=subprocess.DEVNULL,start_new_session=True)
311
+ for _ in range(25):
312
+ time.sleep(1)
313
+ if subprocess.run(['pgrep','-x','tor'],capture_output=True).returncode==0:
314
+ _TOR_READY=True; break
315
+
316
+ def _tor_renew():
317
+ global _TOR_REN
318
+ with _TOR_LK:
319
+ if _TOR_REN: return
320
+ _TOR_REN=True
321
+ try:
322
+ s=socket.socket(); s.settimeout(4); s.connect(('127.0.0.1',9051))
323
+ s.sendall(b'AUTHENTICATE ""\r\nSIGNAL NEWNYM\r\nQUIT\r\n'); s.recv(256); s.close()
324
+ time.sleep(1)
325
+ except: pass
326
+ finally: _TOR_REN=False
327
+
328
+ threading.Thread(target=_tor_setup,daemon=True).start()
329
+ time.sleep(5)
330
+
331
+ WS = [
332
+ "http://gajuiica:wo29gu5sa2sh@31.59.20.176:6754/",
333
+ "http://gajuiica:wo29gu5sa2sh@92.113.242.158:6742/",
334
+ "http://gajuiica:wo29gu5sa2sh@198.23.239.134:6540/",
335
+ "http://gajuiica:wo29gu5sa2sh@45.38.107.97:6014/",
336
+ "http://gajuiica:wo29gu5sa2sh@107.172.163.27:6543/",
337
+ ]
338
+ _N_WS = len(WS)
339
+ _pidx = 0
340
+ _plock = threading.Lock()
341
+ _ustor = time.time()
342
+ _utor = False
343
+ _local = threading.local()
344
+
345
+ def _sess():
346
+ global _utor, _ustor, _pidx
347
+ now=time.time()
348
+ if now-_ustor>=5:
349
+ _utor=not _utor; _ustor=now
350
+ if _utor: threading.Thread(target=_tor_renew,daemon=True).start()
351
+ if not hasattr(_local,'n'): _local.n=0; _local.s=None
352
+ _local.n+=1
353
+ if _local.s is None or _local.n%12==0:
354
+ s=requests.Session(); s.verify=False
355
+ a=requests.adapters.HTTPAdapter(pool_connections=8,pool_maxsize=16,max_retries=0)
356
+ s.mount('http://',a); s.mount('https://',a)
357
+ if _utor and _TOR_READY:
358
+ s.proxies={'http':'socks5h://127.0.0.1:9050','https':'socks5h://127.0.0.1:9050'}
359
+ else:
360
+ with _plock: p=WS[_pidx%_N_WS]; _pidx+=1
361
+ s.proxies={'http':p,'https':p}
362
+ _local.s=s
363
+ return _local.s
364
+
365
+ UA=[
366
+ "GarenaMSDK/4.0.39(SM-A325M;Android 13;en;HK;)",
367
+ "GarenaMSDK/4.0.39(Poco F3;Android 12;en;SG;)",
368
+ "GarenaMSDK/4.0.39(Redmi Note 10;Android 11;en;ID;)",
369
+ ]
370
+ _ui=0; _ul=threading.Lock()
371
+ def _ua():
372
+ global _ui
373
+ with _ul: u=UA[_ui%len(UA)]; _ui+=1; return u
374
+
375
+ def _nm(): return 'N4taza'+''.join(random.choices(string.ascii_uppercase+string.digits,k=6))
376
+ def _pw(): return "N4TAZA-"+''.join(random.choices(string.ascii_uppercase+string.digits,k=9))+"-VVIP"
377
+
378
+ BASE_DIR = "/sdcard/GLITXH-VIP"
379
+ BASE = BASE_DIR # <-- INI PERBAIKANNYA
380
+
381
+ _tf={}; _fl=threading.Lock()
382
+
383
+ def _tfiles(region):
384
+ ru=region.upper(); rd=os.path.join(BASE,ru)
385
+ for d in[rd,f"{rd}/LEGENDA",f"{rd}/High",f"{rd}/Medium",f"{rd}/Low",f"{rd}/Normal"]:
386
+ os.makedirs(d,exist_ok=True)
387
+ return {t:os.path.join(rd,sub,f"Account-{ru}.json")
388
+ for t,sub in[("LEGEND","LEGENDA"),("HIGH","High"),("MEDIUM","Medium"),
389
+ ("LOW","Low"),("NORMAL","Normal")]}
390
+
391
+ def tf(r):
392
+ if r not in _tf: _tf[r]=_tfiles(r)
393
+ return _tf[r]
394
+
395
+ def save(entry,tier,region):
396
+ fp=tf(region).get(tier)
397
+ if not fp: return
398
+ with _fl:
399
+ try:
400
+ d=json.load(open(fp,encoding='utf-8')) if os.path.exists(fp) else []
401
+ if not isinstance(d,list): d=[d]
402
+ d.append(entry)
403
+ json.dump(d,open(fp,'w',encoding='utf-8'),indent=2,ensure_ascii=False)
404
+ except: pass
405
+
406
+ def tier(aid):
407
+ if not aid or aid=="N/A": return "NORMAL"
408
+ s=0
409
+ if len(aid)>=6:
410
+ rem=aid[3:]
411
+ if len(set(aid))==1: s+=30
412
+ elif len(set(rem))==1: s+=25
413
+ elif aid[:3] in{"154","155","156","157","158","159"} and len(set(rem))==1: s+=28
414
+ for pat,pts in[(r'(\d)\1{5,}',10),(r'(\d)\1{4,}',8),(r'(\d)\1{3,}',6),(r'(\d)\1{2,}',3)]:
415
+ if re.search(pat,aid): s+=pts; break
416
+ if re.search(r'(12345|23456|34567|45678|56789|98765|87654|76543|65432|54321)',aid): s+=7
417
+ elif re.search(r'(1234|2345|3456|4567|5678|6789|9876|8765|7654|6543|5432|4321)',aid): s+=4
418
+ if len(aid)>=6 and aid==aid[::-1]: s+=8
419
+ elif len(aid)>=4 and aid[:2]==aid[-1:-3:-1]: s+=4
420
+ if len(aid)>=6 and len(set(aid[::2]))==1 and len(set(aid[1::2]))==1: s+=6
421
+ for sn in['888','999','666','777','000','123','321','111','222','333','444','555']:
422
+ if sn in aid: s+=2
423
+ if len(aid)<=8: s+=5
424
+ elif len(aid)<=9: s+=3
425
+ if s>=20: return "LEGEND"
426
+ if s>=12: return "HIGH"
427
+ if s>=6: return "MEDIUM"
428
+ if s>=2: return "LOW"
429
+ return "NORMAL"
430
+
431
+ _boost_on = False
432
+ _boost_end = 0.0
433
+ _boost_tgt = None
434
+ _boost_desc = ""
435
+ _boost_lk = threading.Lock()
436
+ _last_aid = None
437
+
438
+ def _find_target(aid):
439
+ try: cur=int(aid)
440
+ except: return None
441
+ s=str(cur); pre=s[:2]; sl=len(s)-2
442
+ best=None
443
+ for rlen in range(9,4,-1):
444
+ for d in '9876543210':
445
+ suf=d*rlen
446
+ if rlen<sl:
447
+ for f in '9876543210':
448
+ full=f*(sl-rlen)+suf
449
+ if len(full)!=sl: continue
450
+ tgt=int(pre+full); gap=tgt-cur
451
+ if 0<gap<=800000:
452
+ score=rlen*10+(800000-gap)//100000
453
+ if not best or score>best[3]: best=(tgt,gap,f"{pre}{full}({rlen}x{d})",score)
454
+ else:
455
+ full=suf[:sl]; tgt=int(pre+full); gap=tgt-cur
456
+ if 0<gap<=800000:
457
+ score=rlen*10+(800000-gap)//100000
458
+ if not best or score>best[3]: best=(tgt,gap,f"{pre}{full}({rlen}x{d})",score)
459
+ for st in range(10):
460
+ for dr in(1,-1):
461
+ seq=''.join(str((st+i*dr)%10) for i in range(sl))
462
+ try:
463
+ tgt=int(pre+seq); gap=tgt-cur
464
+ if 0<gap<=400000:
465
+ score=50+(400000-gap)//50000
466
+ if not best or score>best[3]: best=(tgt,gap,f"{pre}{seq}(seq)",score)
467
+ except: pass
468
+ return best
469
+
470
+ def _check_boost(aid):
471
+ global _boost_on,_boost_end,_boost_tgt,_boost_desc,_last_aid
472
+ _last_aid=aid
473
+ r=_find_target(aid)
474
+ if not r: return
475
+ tgt,gap,desc,score=r
476
+ trigger=(gap<=50000) or (gap<=300000 and score>=75) or (gap<=800000 and score>=90)
477
+ if not trigger: return
478
+ with _boost_lk:
479
+ if _boost_on and _boost_tgt==tgt: return
480
+ _boost_on=True; _boost_end=time.time()+10
481
+ _boost_tgt=tgt; _boost_desc=desc
482
+ with _plock:
483
+ print(f"\n{R}{B}[ ! ] Mode boost! Mengejar ID {desc} | Gap: {gap:,}{W}")
484
+ print(f" {R}Active selama 10 detik, dimulai..{W}\n")
485
+
486
+ def boosting():
487
+ global _boost_on
488
+ if not _boost_on: return False
489
+ if time.time()>_boost_end:
490
+ with _boost_lk: _boost_on=False; _boost_tgt=None
491
+ return False
492
+ return True
493
+
494
+ _RU="https://100067.connect.garena.com/api/v2/oauth/guest:register"
495
+ _TU="https://100067.connect.garena.com/api/v2/oauth/guest/token:grant"
496
+ _AT=b'afcfbf13334be42036e4f742c80b956344bed760ac91b3aff9b607a610ab4390'
497
+ _OI=b'1d8ec0240ede109973f3321b9354b44d'
498
+
499
+ _LP=(b'\x1a\x132025-08-30 05:19:21"\tfree fire(\x01:\x081.114.13B2Android OS 9 / API-28'
500
+ b' (PI/rel.cjw.20220518.114133)J\x08HandheldR\nATM MobilsZ\x04WIFI`\xb6\nh\xee\x05'
501
+ b'r\x03300z\x1fARMv7 VFPv3 NEON VMH | 2400 | 2\x80\x01\xc9\x0f\x8a\x01\x0fAdreno (TM) 640'
502
+ b'\x92\x01\rOpenGL ES 3.2\x9a\x01+Google|dfa4ab4b-9dc4-454e-8065-e70c733fa53f'
503
+ b'\xa2\x01\x0e105.235.139.91\xaa\x01\x02')
504
+ _LP2=(b'\xb2\x01 1d8ec0240ede109973f3321b9354b44d'
505
+ b'\xba\x01\x014\xc2\x01\x08Handheld\xca\x01\x10Asus ASUS_I005DA'
506
+ b'\xea\x01@afcfbf13334be42036e4f742c80b956344bed760ac91b3aff9b607a610ab4390'
507
+ b'\xf0\x01\x01\xca\x02\nATM Mobils\xd2\x02\x04WIFI'
508
+ b'\xca\x03 7428b253defc164018c604a1ebbfebdf'
509
+ b'\xe0\x03\xa8\x81\x02\xe8\x03\xf6\xe5\x01\xf0\x03\xaf\x13\xf8\x03\x84\x07'
510
+ b'\x80\x04\xe7\xf0\x01\x88\x04\xa8\x81\x02\x90\x04\xe7\xf0\x01\x98\x04\xa8\x81\x02'
511
+ b'\xc8\x04\x01\xd2\x04=/data/app/com.dts.freefireth-PdeDnOilCSFn37p1AH_FLg==/lib/arm'
512
+ b'\xe0\x04\x01\xea\x04_2087f61c19f57f2af4e7feff0b24d9d9'
513
+ b'|/data/app/com.dts.freefireth-PdeDnOilCSFn37p1AH_FLg==/base.apk'
514
+ b'\xf0\x04\x03\xf8\x04\x01\x8a\x05\x0232\x9a\x05\n2019118692'
515
+ b'\xb2\x05\tOpenGLES2\xb8\x05\xff\x7f\xc0\x05\x04\xe0\x05\xf3F'
516
+ b'\xea\x05\x07android'
517
+ b'\xf2\x05pKqsHT5ZLWrYljNb5Vqh//yFRlaPHSO9NWSQsVvOmdhEEn7W+VHNUK+Q+fduA3pt'
518
+ b'NrGB0Ll0LRz3WW0jOwesLj6aiU7sZ40p8BfUE/FI/jzSTwRe2'
519
+ b'\xf8\x05\xfb\xe4\x06\x88\x06\x01\x90\x06\x01\x9a\x06\x014\xa2\x06\x014'
520
+ b'\xb2\x06"GQ@O\x00\x0e^\x00D\x06UA\x0ePM\r\x13hZ\x07T\x06\x0cm\\V\x0ejYV;\x0bU5')
521
+
522
+ def _reg(pw):
523
+ bj=json.dumps({"app_id":100067,"client_type":2,"password":pw,"source":2},separators=(",",":"))
524
+ sig=hmac.new(KEY,bj.encode(),hashlib.sha256).hexdigest()
525
+ h={"User-Agent":_ua(),"Authorization":f"Signature {sig}",
526
+ "Content-Type":"application/json; charset=utf-8","Accept":"application/json",
527
+ "Connection":"Keep-Alive","Host":"100067.connect.garena.com"}
528
+ for _ in range(4):
529
+ try:
530
+ r=_sess().post(_RU,headers=h,data=bj,timeout=10)
531
+ if r.status_code in(403,429): time.sleep(0.5); continue
532
+ b=r.json(); d=b.get("data",b)
533
+ uid=d.get("uid") or b.get("uid")
534
+ if uid: return uid
535
+ except: pass
536
+ time.sleep(0.2)
537
+ return None
538
+
539
+ def _tok(uid,pw):
540
+ bj=json.dumps({"client_id":100067,"client_secret":KEY.decode("ascii"),"client_type":2,
541
+ "password":pw,"response_type":"token","uid":uid},separators=(",",":"))
542
+ sig=hmac.new(KEY,bj.encode(),hashlib.sha256).hexdigest()
543
+ h={"User-Agent":_ua(),"Authorization":f"Signature {sig}",
544
+ "Content-Type":"application/json; charset=utf-8","Accept":"application/json",
545
+ "Connection":"Keep-Alive","Host":"100067.connect.garena.com"}
546
+ for _ in range(3):
547
+ try:
548
+ r=_sess().post(_TU,headers=h,data=bj,timeout=10)
549
+ if r.status_code in(403,429): time.sleep(0.5); continue
550
+ b=r.json(); d=b.get("data",b)
551
+ if "open_id" in d:
552
+ oi=d["open_id"]; at=d["access_token"]
553
+ res=enc_oid(oi)
554
+ fld=codecs.decode(ue(res["field_14"]),"unicode_escape").encode("latin1")
555
+ return oi,at,fld
556
+ except: pass
557
+ time.sleep(0.2)
558
+ return None,None,None
559
+
560
+ def _mreg(at,oi,fld,region):
561
+ nm=_nm(); lang=LANG.get(region,"en")
562
+ if region in("ME","TH"):
563
+ url="https://loginbp.common.ggbluefox.com/MajorRegister"; host="loginbp.common.ggbluefox.com"
564
+ else:
565
+ url="https://loginbp.ggblueshark.com/MajorRegister"; host="loginbp.ggblueshark.com"
566
+ pl=pb({1:nm,2:at,3:oi,5:102000007,6:4,7:1,13:1,14:fld,15:lang,16:1,17:1})
567
+ try:
568
+ _sess().post(url,headers={"Accept-Encoding":"gzip","Authorization":"Bearer",
569
+ "Connection":"Keep-Alive","Content-Type":"application/x-www-form-urlencoded",
570
+ "Expect":"100-continue","Host":host,"ReleaseVersion":"OB53",
571
+ "User-Agent":_ua(),"X-GA":"v1 1","X-Unity-Version":"2018.4."},
572
+ data=aes_bytes(pl.hex()),verify=False,timeout=10)
573
+ except: pass
574
+ return nm
575
+
576
+ def _mlogin(at,oi,region):
577
+ lang=LANG.get(region,"en")
578
+ if region in("ME","TH"):
579
+ url="https://loginbp.common.ggbluefox.com/MajorLogin"; host="loginbp.common.ggbluefox.com"
580
+ else:
581
+ url="https://loginbp.ggblueshark.com/MajorLogin"; host="loginbp.ggblueshark.com"
582
+ raw=_LP+lang.encode()+_LP2
583
+ raw=raw.replace(_AT,at.encode()).replace(_OI,oi.encode())
584
+ fp=bytes.fromhex(aes_hex(raw.hex()))
585
+ h={"Accept-Encoding":"gzip","Authorization":"Bearer","Connection":"Keep-Alive",
586
+ "Content-Type":"application/x-www-form-urlencoded","Expect":"100-continue",
587
+ "Host":host,"ReleaseVersion":"OB53","User-Agent":_ua(),
588
+ "X-GA":"v1 1","X-Unity-Version":"2018.4.11f1"}
589
+ for _ in range(3):
590
+ try:
591
+ r=_sess().post(url,headers=h,data=fp,verify=False,timeout=12)
592
+ if r.status_code==200 and len(r.text)>10:
593
+ aid=decode_resp(r.text)
594
+ if aid!="N/A": return aid
595
+ except: pass
596
+ time.sleep(0.3)
597
+ return "N/A"
598
+
599
+ def _bind(at,region):
600
+ rk="RU" if region=="CIS" else region
601
+ if region in("ME","TH"): url="https://loginbp.common.ggbluefox.com/ChooseRegion"
602
+ else: url="https://loginbp.ggblueshark.com/ChooseRegion"
603
+ pl=bytes.fromhex(aes_hex(pb({1:rk}).hex()))
604
+ try:
605
+ _sess().post(url,data=pl,headers={"User-Agent":_ua(),"Connection":"Keep-Alive",
606
+ "Accept-Encoding":"gzip","Content-Type":"application/x-www-form-urlencoded",
607
+ "Expect":"100-continue","Authorization":f"Bearer {at}",
608
+ "X-Unity-Version":"2018.4.11f1","X-GA":"v1 1","ReleaseVersion":"OB53"},
609
+ verify=False,timeout=8)
610
+ except: pass
611
+
612
+ def make(region):
613
+ pw=_pw(); uid=_reg(pw)
614
+ if not uid: return None
615
+ oi,at,fld=_tok(uid,pw)
616
+ if not oi: return None
617
+ nm=_mreg(at,oi,fld,region)
618
+ aid=_mlogin(at,oi,region)
619
+ if aid=="N/A": return None
620
+ if region!="BR": threading.Thread(target=_bind,args=(at,region),daemon=True).start()
621
+ return {"uid":uid,"pw":pw,"name":nm,"aid":aid}
622
+
623
+ _cnt=0; _cnt_lk=threading.Lock()
624
+ _ts={"NORMAL":0,"LOW":0,"MEDIUM":0,"HIGH":0,"LEGEND":0}; _ts_lk=threading.Lock()
625
+ _stuck_t=time.time(); _stuck_lk=threading.Lock()
626
+ _stuck_on=True
627
+ _print_lk=threading.Lock()
628
+ _total=0; _nw=800
629
+ _t0=time.time(); _p100t=time.time(); _p100c=0
630
+
631
+ def _stuck_loop():
632
+ while _stuck_on:
633
+ time.sleep(5)
634
+ with _stuck_lk: idle=time.time()-_stuck_t
635
+ if _total>0 and _cnt>=_total: break
636
+ if idle>=25: threading.Thread(target=_tor_renew,daemon=True).start(); _stuck_reset()
637
+
638
+ def _stuck_reset():
639
+ with _stuck_lk: globals()['_stuck_t']=time.time()
640
+
641
+ threading.Thread(target=_stuck_loop,daemon=True).start()
642
+
643
+ def out(res,region):
644
+ global _cnt,_p100t,_p100c
645
+ uid=res["uid"]; pw=res["pw"]; nm=res["name"]; aid=res["aid"]
646
+ t=tier(aid); te=TIER_E[t]; tc=TIER_C[t]; ts=datetime.now().strftime('%H:%M:%S')
647
+ with _ts_lk: _ts[t]+=1
648
+ with _cnt_lk: _cnt+=1; cur=_cnt
649
+ _stuck_reset()
650
+ save({"uid":uid,"password":pw,"account_id":aid,"name":nm,"region":region,
651
+ "tier":t,"created_at":datetime.now().strftime('%Y-%m-%d %H:%M:%S')},t,region)
652
+ _check_boost(aid)
653
+ with _print_lk:
654
+ print(f"[{ts}] {G}✅{W} {cur} | {tc}ID:{aid}({te}){W} | {uid} | {pw}")
655
+ if cur%100==0:
656
+ now=time.time(); el=now-_t0; r=cur/el if el>0 else 0
657
+ el100=now-_p100t if _p100c>0 else el; tot=f"/{_total}" if _total>0 else ""
658
+ with _ts_lk: ts2=dict(_ts)
659
+ print(f"\n{C}{B}▶ {cur}{tot} | +100:{fmt(el100)} | total:{fmt(el)} | {r:.2f}/s{W}")
660
+ print(f" {G}🍀:{ts2['NORMAL']}{W} {Y}😬:{ts2['LOW']}{W} "
661
+ f"{C}🤩:{ts2['MEDIUM']}{W} {M}☠️:{ts2['HIGH']}{W} "
662
+ f"{R}❤️‍🔥:{ts2['LEGEND']}{W}\n")
663
+ _p100t=now; _p100c=cur
664
+
665
+ def worker(region):
666
+ while True:
667
+ with _cnt_lk:
668
+ if _total>0 and _cnt>=_total: return
669
+ try:
670
+ res=make(region)
671
+ except:
672
+ res=None
673
+ if not res: continue
674
+ with _cnt_lk:
675
+ if _total>0 and _cnt>=_total: return
676
+ out(res,region)
677
+
678
+ def main():
679
+ global _cnt, _nw, _stuck_on, _t0, _p100t, _p100c, _ts
680
+
681
+ while True:
682
+ os.system('cls' if os.name == 'nt' else 'clear')
683
+ print(f"{render('N4TAZA', colors=['white', 'red'], align='center')}\n")
684
+
685
+ while True:
686
+ region = input(f" {B}[+] Region ({'/'.join(sorted(VALID))}) >>> ").upper().strip()
687
+ if region in VALID:
688
+ break
689
+ print(f"Region tidak valid.")
690
+
691
+ while True:
692
+ try:
693
+ j = input(f" {B}[+] Jumlah ID (0=∞) >>> ").strip()
694
+ if j.isdigit() and int(j) >= 0:
695
+ total_accounts = int(j)
696
+ break
697
+ except:
698
+ pass
699
+
700
+ num_workers = _nw
701
+
702
+ success_count = 0
703
+ _stuck_on = True
704
+ _boost_on = False
705
+
706
+ _cnt = 0
707
+ _t0 = time.time()
708
+ _p100t = time.time()
709
+ _p100c = 0
710
+ _total = total_accounts
711
+
712
+ for k in _ts:
713
+ _ts[k] = 0
714
+ tf(region)
715
+
716
+ print(f"\n Starting..")
717
+
718
+ try:
719
+ with ThreadPoolExecutor(max_workers=num_workers) as ex:
720
+ futures = [ex.submit(worker, region) for _ in range(num_workers)]
721
+ for f in futures:
722
+ f.result()
723
+ except KeyboardInterrupt:
724
+ print(f"\nDihentikan.")
725
+
726
+ _stuck_on = False
727
+ elapsed = time.time() - _t0
728
+ spd = _cnt / elapsed if elapsed > 0 else 0
729
+
730
+ print(f"\nSelesai! {_cnt}{'/' + str(total_accounts) if total_accounts else ''} akun")
731
+ print(f"Waktu: {fmt(elapsed)} | Kecepatan: {spd:.2f} akun/detik")
732
+ print(f"Folder: {BASE}/{region}/")
733
+ print(f"\nFinal: "
734
+ f"🍀{_ts['NORMAL']} 😬{_ts['LOW']} "
735
+ f"🤩{_ts['MEDIUM']} ☠️{_ts['HIGH']} "
736
+ f"❤️‍🔥{_ts['LEGEND']}")
737
+
738
+ try:
739
+ input(f"\nTekan enter untuk generate ulang.. ")
740
+ except (KeyboardInterrupt, EOFError):
741
+ if _TOR_PROC:
742
+ try:
743
+ _TOR_PROC.terminate()
744
+ except:
745
+ pass
746
+ break
747
+
748
+ if __name__ == "__main__":
749
+ main()
@@ -0,0 +1,6 @@
1
+ Metadata-Version: 2.4
2
+ Name: natazx
3
+ Version: 0.1.0
4
+ Summary: Project natazx by septianhdnatta
5
+ Author-email: septianhdnatta <septianhdnatta@example.com>
6
+ License: MIT
@@ -0,0 +1,9 @@
1
+ pyproject.toml
2
+ src/natazx/__init__.py
3
+ src/natazx/__main__.py
4
+ src/natazx/natazx.py
5
+ src/natazx.egg-info/PKG-INFO
6
+ src/natazx.egg-info/SOURCES.txt
7
+ src/natazx.egg-info/dependency_links.txt
8
+ src/natazx.egg-info/entry_points.txt
9
+ src/natazx.egg-info/top_level.txt
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ natazx = natazx:main
@@ -0,0 +1 @@
1
+ natazx