├── README.md ├── main.py ├── example.py └── argus.py /README.md: -------------------------------------------------------------------------------- 1 | # tiktok-api 2 | 3 | ⭐ TikTok Mobile Signature 手机签名 4 | * X-Argus 5 | * X-Ladon 6 | * X-Gorgon 7 | * X-Khronos 8 | * X-Cylons 9 | 10 | ⭐ TikTok Web Signature web签名 11 | * MSToken 12 | * _signature 13 | * X-Bogus 14 | 15 | ⭐ Device Registration 设备注册 16 | * TTEncrypt 17 | * MSSDK encrypt/decrypt 18 | * MSSDK /ri/report 19 | * Get seed 20 | * MSCC Common Setting 21 | 22 | ⭐ TikTok Api Endpoint 端点 23 | * ✅ Follow 24 | * ✅ Unfollow 25 | * ✅ Like 26 | * ✅ Unlike 27 | * ✅ Comment 28 | * ✅ Upload 29 | * ❌Message 30 | * ❌upload 31 | * ✅ Search 32 | * ✅ Video Aweme 33 | * ✅ User Info 34 | * ✅ Edit 35 | * ✅ Login 36 | * ❌ SignUP 37 | * ✅ Reset 38 | - All Algorithms Updated (01-03-2024) 39 | - Contact : https://t.me/edwin_aliy 40 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from utils.signer import Argus, Ladon, Gorgon, md5 2 | from utils.solver import Solver 3 | from urllib.parse import urlencode 4 | import requests, json, string 5 | import time, random, threading, re, secrets 6 | 7 | 8 | class TikTokAccountCreator: 9 | def __init__(self) -> None: 10 | self.registered = 0 11 | 12 | self.proxies = open("./proxies.txt", "r").read().splitlines() 13 | self.devices = open("./utils/devices.txt", "r").read().splitlines() 14 | print(random.choice(self.proxies)) 15 | self.threads = int(input("Threads: ")) 16 | 17 | def xor(self, string: str) -> str: 18 | return "".join([hex(ord(_) ^ 5)[2:] for _ in string]) 19 | 20 | def sign(self, params, payload: str = None, sec_device_id: str = "", cookie: str or None = None, aid: int = 1233, license_id: int = 1611921764, sdk_version_str: str = "v04.04.05-ov-android", sdk_version: int = 134744640, platform: int = 0, unix: int = None): 21 | x_ss_stub = md5(payload.encode('utf-8')).hexdigest() if payload != None else None 22 | if not unix: unix = int(time.time()) 23 | 24 | return Gorgon(params, unix, payload, cookie).get_value() | { 25 | "x-ladon" : Ladon.encrypt(unix, license_id, aid), 26 | "x-argus" : Argus.get_sign(params, x_ss_stub, unix, 27 | platform = platform, 28 | aid = aid, 29 | license_id = license_id, 30 | sec_device_id = sec_device_id, 31 | sdk_version = sdk_version_str, 32 | sdk_version_int = sdk_version 33 | ) 34 | } 35 | 36 | def base_params(self) -> str: 37 | return { 38 | "passport-sdk-version": "19", 39 | "iid": self.device["install_id"], 40 | "device_id": self.device["device_id"], 41 | "ac": "wifi", 42 | "channel": "googleplay", 43 | "aid": "1233", 44 | "app_name": "musical_ly", 45 | "version_code": "300904", 46 | "version_name": "30.9.4", 47 | "device_platform": "android", 48 | "os": "android", 49 | "ab_version": "30.9.4", 50 | "ssmix": "a", 51 | "device_type": "ASUS_Z01QD", 52 | "device_brand": "Asus", 53 | "language": "en", 54 | "os_api": "28", 55 | "os_version": "9", 56 | "openudid": "704713c0da01388a", 57 | "manifest_version_code": "2023009040", 58 | "resolution": "1600*900", 59 | "dpi": "300", 60 | "update_version_code": "2023009040", 61 | "_rticket": "1692845349183", 62 | "is_pad": "0", 63 | "current_region": "BE", 64 | "app_type": "normal", 65 | "sys_region": "US", 66 | "mcc_mnc": "20610", 67 | "timezone_name": "Asia/Shanghai", 68 | "residence": "BE", 69 | "app_language": "en", 70 | "carrier_region": "BE", 71 | "ac2": "wifi", 72 | "uoo": "0", 73 | "op_region": "BE", 74 | "timezone_offset": "28800", 75 | "build_number": "30.9.4", 76 | "host_abi": "arm64-v8a", 77 | "locale": "en", 78 | "region": "US", 79 | "ts": "1692845349", 80 | "cdid": "60c2140f-c112-491a-8c93-183fd1ea8acf", 81 | "support_webview": "1", 82 | "okhttp_version": "4.1.120.34-tiktok", 83 | "use_store_region_cookie": "1" 84 | } 85 | 86 | 87 | def send_code( 88 | self, 89 | email: str = None, 90 | password: str = None 91 | ) -> None: 92 | 93 | data = urlencode({ 94 | "password": self.xor(password), 95 | "account_sdk_source": "app", 96 | "rule_strategies": 2, 97 | "mix_mode": 1, 98 | "multi_login": 1, 99 | "type": 34, 100 | "email": self.xor(email) 101 | }) 102 | headers = { 103 | "sdk-version": "2", 104 | "user-agent": "com.zhiliaoapp.musically/2023009040 (Linux; U; Android 9; en; ASUS_Z01QD; Build/PI;tt-ok/3.12.13.1)", 105 | "host": "api16-normal-c-useast2a.tiktokv.com", 106 | } 107 | headers.update(self.sign(urlencode(self.base_params()), data)) 108 | response = requests.post( 109 | url = "https://api16-normal-c-useast2a.tiktokv.com/passport/email/send_code/", 110 | params = self.base_params(), 111 | data = data, 112 | headers = headers, 113 | proxies = { 114 | "http": f"http://{random.choice(self.proxies)}", 115 | "https": f"http://{random.choice(self.proxies)}" 116 | } 117 | ) 118 | 119 | if not response.text.__contains__("success"): 120 | print(response.content) 121 | 122 | def verify_code( 123 | self, 124 | code: int = None, 125 | email: str = None, 126 | password: str = None 127 | ) -> None: 128 | data = f"birthday={random.randint(1980, 2000)}-0{random.randint(1, 9)}-{random.randint(10, 25)}&code={code}&account_sdk_source=app&mix_mode=1&multi_login=1&type=34&email={self.xor(email)}" 129 | headers = { 130 | "accept-encoding": "gzip", 131 | "sdk-version": "2", 132 | "x-bd-kmsv": "0", 133 | "x-ss-req-ticket": "1692845388506", 134 | "multi_login": "1", 135 | "passport-sdk-version": "19", 136 | "x-tt-dm-status": "login=1;ct=1;rt=8", 137 | "x-tt-bypass-dp": "1", 138 | "x-vc-bdturing-sdk-version": "2.3.2.i18n", 139 | "user-agent": "com.zhiliaoapp.musically/2023009040 (Linux; U; Android 9; en; ASUS_Z01QD; Build/PI;tt-ok/3.12.13.1)", 140 | "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 141 | "host": "api16-normal-c-useast2a.tiktokv.com", 142 | "connection": "Keep-Alive" 143 | } 144 | headers.update(self.sign(urlencode(self.base_params()), data)) 145 | response = requests.post( 146 | url = "https://api16-normal-c-useast2a.tiktokv.com/passport/email/register_verify_login/", 147 | params = self.base_params(), 148 | data = data, 149 | headers = headers, 150 | proxies = { 151 | "http": f"http://{random.choice(self.proxies)}", 152 | "https": f"http://{random.choice(self.proxies)}" 153 | } 154 | ) 155 | 156 | if response.text.__contains__("session_key"): 157 | session_id = response.json()["data"]["session_key"] 158 | 159 | open("./output/accounts.txt", "a+").write(f"{email}:{password}:{session_id}\n") 160 | print(f"Registered Account | [Email: {email} - Password: {password} - Session ID: {session_id}]") 161 | else: 162 | print(response.content) 163 | 164 | 165 | def register(self) -> None: 166 | while True: 167 | self.device = eval(random.choice(self.devices)) 168 | Solver(self.device["device_id"], self.device["install_id"]).solve_captcha() 169 | email = f"{''.join(random.choices(string.ascii_letters.lower() + string.digits, k=10))}@txcct.com" 170 | password = ''.join(random.choices(string.ascii_letters + string.ascii_uppercase, k=11)) + "1!" 171 | print(email) 172 | print(password) 173 | self.send_code(email, password) 174 | 175 | while True: 176 | messages = requests.get(f"https://www.1secmail.com/api/v1/?action=getMessages&login={email.split('@')[0]}&domain={email.split('@')[1]}").json() 177 | if messages: 178 | break 179 | 180 | code = ''.join(re.findall(r'\b\d+\b', messages[0]["subject"])) 181 | self.verify_code(code, email, password) 182 | 183 | def start(self) -> None: 184 | for _ in range(self.threads): 185 | threading.Thread(target = self.register).start() 186 | 187 | 188 | if __name__ == "__main__": 189 | TikTokAccountCreator().start() 190 | -------------------------------------------------------------------------------- /example.py: -------------------------------------------------------------------------------- 1 | from signer import Argus, Ladon, Gorgon, md5 2 | from urllib.parse import urlencode 3 | import time, random 4 | import requests 5 | 6 | def get_Signature (params, payload: str = None, sec_device_id: str = "", cookie: str or None = None, aid: int = 1233, license_id: int = 1611921764, sdk_version_str: str = "v04.04.05-ov-android", sdk_version: int = 134744640, platform: int = 0, unix: int = None): 7 | x_ss_stub = md5(payload.encode('utf-8')).hexdigest() if payload != None else None 8 | if not unix: unix = int(time.time()) 9 | 10 | return Gorgon(params, unix, payload, cookie).get_value() | { 11 | "x-ladon" : Ladon.encrypt(unix, license_id, aid), 12 | "x-argus" : Argus.get_sign(params, x_ss_stub, unix, 13 | platform = platform, 14 | aid = aid, 15 | license_id = license_id, 16 | sec_device_id = sec_device_id, 17 | sdk_version = sdk_version_str, 18 | sdk_version_int = sdk_version 19 | ) 20 | } 21 | 22 | def get_devices(): 23 | devices = open("./utils/devices.txt", "r").read().splitlines() 24 | device = eval(random.choice(devices)) 25 | 26 | return device 27 | 28 | def tiktok_follow(user_id, sec_user_id): 29 | device = get_devices() 30 | print(device['device_id']) 31 | # urlQuery = urlencode(device) 32 | 33 | urlQuery = "user_id="+user_id+"&sec_user_id="+sec_user_id+"&type=1&channel_id=0&from=13&from_pre=13&item_id=7094730482549558570&enter_from=homepage_hot&action_time=1708456737042&is_network_available=true&iid="+device['install_id']+"&device_id="+device['device_id']+"&ac=wifi&channel=googleplay&aid=1233&app_name=musical_ly&version_code=320706&version_name=32.7.6&device_platform=android&os=android&ab_version=32.7.6&ssmix=a&device_type=MI+5s&device_brand=Xiaomi&language=en&os_api=26&os_version=8.0.0&openudid=94e04b4ae3020c26&manifest_version_code=2023207060&resolution=1080*1920&dpi=480&update_version_code=2023207060&_rticket=1708456737056&is_pad=0¤t_region=US&app_type=normal&sys_region=US&timezone_name=America%2FLos_Angeles&residence=US&app_language=en&ac2=wifi5g&uoo=0&op_region=US&timezone_offset=-28800&build_number=32.7.6&host_abi=arm64-v8a&locale=en®ion=US&ts=1708456766&cdid=4898160d-034d-48d0-a605-b198b9ab502e" 34 | 35 | url = "https://api16-normal-useast5.us.tiktokv.com/aweme/v1/commit/follow/user/?" + urlQuery 36 | 37 | payload = {} 38 | 39 | 40 | res = get_Signature(urlQuery) 41 | 42 | headers = { 43 | 'x-tt-multi-sids': '7289379146936861742%3A7015b5b61af5259e62fb9834fa2dc5ed%7C7289378818065843246%3Ad33529cae776bb3f253bda9787f7b73a', 44 | 'sdk-version': '2', 45 | 'x-bd-kmsv': '0', 46 | 'X-Tt-Token': 'your token', 47 | 'x-bd-client-key': '#CyGLqgQxFhj/nXQ42XTZHwjhjGHdgxBGrfSYb8F3dokZEk2fEeEopWqnpIGBCtXF/k46TjXqJJP2m5jj', 48 | 'multi_login': '1', 49 | 'passport-sdk-version': '19', 50 | 'x-tt-dm-status': 'login=1;ct=1;rt=1', 51 | 'x-vc-bdturing-sdk-version': '2.3.4.i18n', 52 | 'x-tt-store-region': 'us', 53 | 'x-tt-store-region-src': 'uid', 54 | 'User-Agent': 'com.zhiliaoapp.musically/2023207060 (Linux; U; Android 8.0.0; en; MI 5s; Build/OPR1.170623.032;tt-ok/3.12.13.4-tiktok)', 55 | 'X-SS-REQ-TICKET': res['x-ss-req-ticket'], 56 | 'X-Ladon': res['x-ladon'], 57 | 'X-Khronos': res['x-khronos'], 58 | 'X-Argus': res['x-argus'], 59 | 'X-Gorgon': res['x-gorgon'], 60 | 'Host': 'api16-normal-useast5.us.tiktokv.com', 61 | 'Cookie': 'your cookie' 62 | } 63 | 64 | response = requests.request("GET", url, headers=headers, data=payload) 65 | 66 | # print(response) 67 | print(response.text) 68 | # print(response.content) 69 | return response 70 | 71 | def tiktok_digg(aweme_id): 72 | urlQuery = "aweme_id="+aweme_id+"&enter_from=homepage_hot&friends_upvote=false&type=1&channel_id=0&iid=7339107689308079903&device_id=7319450450397906475&ac=wifi&channel=googleplay&aid=1233&app_name=musical_ly&version_code=330403&version_name=33.4.3&device_platform=android&os=android&ab_version=33.4.3&ssmix=a&device_type=MI+5s&device_brand=Xiaomi&language=en&os_api=26&os_version=8.0.0&openudid=94e04b4ae3020c26&manifest_version_code=2023304030&resolution=1080*1920&dpi=480&update_version_code=2023304030&_rticket=1708781003509&is_pad=0¤t_region=US&app_type=normal&sys_region=US&timezone_name=America%2FLos_Angeles&residence=US&app_language=en&ac2=wifi5g&uoo=0&op_region=US&timezone_offset=-28800&build_number=33.4.3&host_abi=arm64-v8a&locale=en®ion=US&ts=1708781032&cdid=4898160d-034d-48d0-a605-b198b9ab502e" 73 | url = "https://api16-normal-useast5.us.tiktokv.com/aweme/v1/commit/item/digg/?" + urlQuery 74 | 75 | res = get_Signature(urlQuery) 76 | 77 | payload = {} 78 | 79 | headers = { 80 | 'x-tt-multi-sids': '7289379146936861742%3A7015b5b61af5259e62fb9834fa2dc5ed%7C7289378818065843246%3Ad33529cae776bb3f253bda9787f7b73a%7C7325086086252905518%3Aa08c5ce7bb5f2f3e2b7ea27177c43b6c', 81 | 'sdk-version': '2', 82 | 'x-bd-kmsv': '0', 83 | 'x-tt-dm-status': 'login=1;ct=1;rt=1', 84 | 'X-Tt-Token': 'yout token', 85 | 'x-bd-client-key': '#1Tqwdw4Dg/WG+iWms7LxC5OOWfc4Ns9willeO1CGuH2dMorH6yi+XHIGWKTiDUhwFphOWnFhY0tZzbmQ', 86 | 'multi_login': '1', 87 | 'x-opti-ut': 'ClH4hLiYRSUWg2k0lHOVErlmGWQyOSXlDQ7hnAR6WNHrQdQGSnM-wPiIlU0l1vaLKVfcnatS40su9_CN26PP7CAxFLhvCN65Vglxa1-q4RCL59caSQo800KFBvXVIs3E4iir1JFGRqf_edv1PO2A0x9cONrrGtmEuJWD656BcGLq5jDSFrjTduKDWSfVhnrBskkNEJWgyg0Yi9bl1woiAQR2CfHa', 88 | 'passport-sdk-version': '19', 89 | 'pns_event_id': '121', 90 | 'x-vc-bdturing-sdk-version': '2.3.6.i18n', 91 | 'x-tt-store-region': 'us', 92 | 'x-tt-store-region-src': 'uid', 93 | 'User-Agent': 'com.zhiliaoapp.musically/2023304030 (Linux; U; Android 8.0.0; en; MI 5s; Build/OPR1.170623.032;tt-ok/3.12.13.4-tiktok)', 94 | 'X-SS-REQ-TICKET': res['x-ss-req-ticket'], 95 | 'X-Ladon': res['x-ladon'], 96 | 'X-Khronos': res['x-khronos'], 97 | 'X-Argus': res['x-argus'], 98 | 'X-Gorgon': res['x-gorgon'], 99 | 'Host': 'api16-normal-useast5.us.tiktokv.com', 100 | 'Cookie': 'your cookie' 101 | } 102 | 103 | response = requests.request("GET", url, headers=headers, data=payload) 104 | print(response.text) 105 | return response 106 | 107 | def get_tiktok_video_comments(aweme_id, cursor, count): 108 | t = time.time() 109 | ts = int(t) 110 | 111 | urlQuery = "aweme_id=7305007123568610592&cursor=0&count=8&forward_page_type=1&channel_id=0&user_avatar_shrink=96_96&ad_pricing_type=0&load_type=0&offline_pin_comment=1&author_relation_type=0&scenario=0&enter_from=homepage_hot&repost_insert_ids&is_non_personalized=false&suggest_words=%7B%22suggestWordsList%22%3A%5B%7B%22suggestWord%22%3A%5B%7B%22word%22%3A%22auto+accessories%22%7D%5D%2C%22scene%22%3A%22feed_bar%22%7D%5D%7D&shown_cnt=2730&iid=7319451158773335851&device_id=7319450450397906475&ac=wifi&channel=googleplay&aid=1233&app_name=musical_ly&version_code=320706&version_name=32.7.6&device_platform=android&os=android&ab_version=32.7.6&ssmix=a&device_type=MI+5s&device_brand=Xiaomi&language=en&os_api=26&os_version=8.0.0&openudid=94e04b4ae3020c26&manifest_version_code=2023207060&resolution=1080*1920&dpi=480&update_version_code=2023207060&_rticket=1704601169688&is_pad=0¤t_region=US&app_type=normal&sys_region=US&timezone_name=America%2FLos_Angeles&residence=US&app_language=en&ac2=wifi5g&uoo=0&op_region=US&timezone_offset=-28800&build_number=32.7.6&host_abi=arm64-v8a&locale=en®ion=US&ts="+str(ts)+"&cdid=4898160d-034d-48d0-a605-b198b9ab502e&is_landscape=0" 112 | 113 | res = get_Signature(urlQuery) 114 | 115 | url = "https://api16-normal-useast8.us.tiktokv.com/aweme/v2/comment/list/?" + urlQuery 116 | 117 | payload = {} 118 | headers = { 119 | 'Accept-Encoding': 'gzip', 120 | 'x-tt-app-init-region': 'carrierregion=;mccmnc=;sysregion=US;appregion=US', 121 | 'x-tt-multi-sids': '7289378818065843246%3Acb3465f53353502fde3ea16e61aec936%7C7289379146936861742%3A7015b5b61af5259e62fb9834fa2dc5ed', 122 | 'check_preload': 'true', 123 | 'sdk-version': '2', 124 | 'traceparent': 'unsampled_ttk_trace_span_76717-00', 125 | 'x-bd-kmsv': '0', 126 | 'x-bd-client-key': '#CyGLqgQxFhj/nXQ42XTZHwjhjGHdgxBGrfSYb8F3dokZEk2fEeEopWqnpIGBCtXF/k46TjXqJJP2m5jj', 127 | 'multi_login': '1', 128 | 'passport-sdk-version': '19', 129 | 'x-tt-dm-status': 'login=1;ct=1;rt=1', 130 | 'x-vc-bdturing-sdk-version': '2.3.4.i18n', 131 | 'x-tt-store-region': 'us', 132 | 'x-tt-store-region-src': 'uid', 133 | 'User-Agent': 'com.zhiliaoapp.musically/2023207060 (Linux; U; Android 8.0.0; en; MI 5s; Build/OPR1.170623.032;tt-ok/3.12.13.4-tiktok)', 134 | 'X-SS-REQ-TICKET': res['x-ss-req-ticket'], 135 | 'X-Ladon': res['x-ladon'], 136 | 'X-Khronos': res['x-khronos'], 137 | 'X-Argus': res['x-argus'], 138 | 'X-Gorgon': res['x-gorgon'], 139 | 'Host': 'api16-normal-useast8.us.tiktokv.com', 140 | 'Connection': 'Keep-Alive', 141 | 'Cookie': 'odin_tt=3d414f2af95b39318ac0baace099d883782281702e111d89f8f913fd4564e32a775e9213225e78a1e50fad1a690a6f7fab545ef1cab9f3101792ea1010d629f7f62af8c02835a8b6b15c453bd0750f13' 142 | } 143 | 144 | proxys = { 145 | "http": "http://192.177.98.101:9847", 146 | "https": "http://192.177.98.101:9847" 147 | } 148 | response = requests.request("GET", url, headers=headers, data=payload,proxies=proxys) 149 | # response = requests.request("GET", url, headers=headers, data=payload) 150 | 151 | return response.text 152 | # print(response.text) 153 | 154 | if __name__ == '__main__': 155 | 156 | videoComents = get_tiktok_video_comments("7305007123568610592", "0", "10") 157 | print(videoComents) 158 | 159 | tiktok_digg("7305217874866621704") 160 | 161 | tiktok_follow("7337318108808857000", "MS4wLjABAAAAj7kGC4Kk-1gMAOIpLStGjmFjAREam8yEy1MIahFA_tngDTl0GS_-tCdAH1FAI9Wu") 162 | -------------------------------------------------------------------------------- /argus.py: -------------------------------------------------------------------------------- 1 | class Argus: 2 | def __init__(self) -> None: 3 | return 4 | double = None 5 | __int64 = int 6 | __m128 = int 7 | def generate_xargus( 8 | self, 9 | a1: __int64, 10 | a2: __m128, 11 | a3: __m128, 12 | a4: __m128, 13 | a5: __m128, 14 | a6: double, 15 | a7: double, 16 | a8: __m128, 17 | a9: __m128, 18 | ) -> int: 19 | dest: int 20 | off_A3F30: int 21 | v18: int 22 | v19: int 23 | v20: int 24 | v21: int 25 | v45: int 26 | v47: int 27 | v48: int 28 | v49: int 29 | v50: int 30 | v51: int 31 | v52: int 32 | v53: int 33 | v54: int 34 | v55: int 35 | v57: int 36 | v58: int 37 | v59: int 38 | v60: int 39 | v61: int 40 | v62: int 41 | v63: int 42 | v64: int 43 | v65: int 44 | v66: int 45 | v68: int 46 | v69: int 47 | v70: int 48 | v71: int 49 | v72: int 50 | v73: int 51 | v74: int 52 | v75: int 53 | v78: int 54 | v79: int 55 | v80: int 56 | v81: int 57 | v82: int 58 | v83: int 59 | v84: int 60 | v85: int 61 | v86: int 62 | v87: int 63 | v88: int 64 | v89: int 65 | v91: int 66 | v92: int 67 | v93: int 68 | v94: int 69 | v95: int 70 | v96: int 71 | v97: int 72 | v98: int 73 | v99: int 74 | v100: int 75 | v103: int 76 | v104: int 77 | v105: int 78 | v106: int 79 | v107: int 80 | v108: int 81 | v109: int 82 | v110: int 83 | v111: int 84 | v139: int 85 | v140: int 86 | v141: int 87 | v142: int 88 | v143: int 89 | v144: int 90 | v144: int 91 | v145: int 92 | v146: int 93 | v147: int 94 | v148: int 95 | v149: int 96 | v150: int 97 | v151: int 98 | v104: int 99 | dword_0: int 100 | xmmword_A4020: int 101 | off_A4010: int 102 | v152 = _readfsqword(0x28) 103 | v9 = a1 104 | v10 = a1 + 8 105 | v70 = a1 + 16 106 | v68 = a1 + 24 107 | v73 = a1 + 32 108 | v74 = a1 + 40 109 | v75 = a1 + 48 110 | v72 = a1 + 56 111 | ptr = a1 + 72 112 | v77 = a1 + 80 113 | memcpy(dest, off_A3F30, 0xE0) 114 | v113 = 538970409 115 | self.more_mutex2(v100, v10) 116 | v116 = self.do_some_mutex3(v100.m128i_i64) + 16 117 | self.do_some_mutex(v100) 118 | v114 = 1 119 | v115 = rand_from_time() 120 | self.mutex_rwlock(v111, v10) 121 | if self.mutex_and_calc4(v111.m128i_i64): 122 | v11 = v109 123 | self.mutex_rwlock2(v109, v10) 124 | v12 = 1 125 | v13 = 0 126 | else: 127 | v11 = v110 128 | self.mutex_rwlock(v110, v10) 129 | v13 = 1 130 | v12 = 0 131 | v117 = self.do_some_mutex(v11.m128i_i64) + 16 132 | if v12: 133 | self.do_some_mutex(v109) 134 | if v13: 135 | self.do_some_mutex(v110) 136 | v14 = self.sub_43094(v10) 137 | v15 = 0 138 | if not v14: 139 | v15 = v9 140 | v132 = v15 141 | v16 = v10 + 10 142 | self.mutex_unlock_lock(v100, v16) 143 | v17 = self.mutex_unlock_lock2(v100.m128i_i64) 144 | self.mult1(v108, v17) 145 | self.mult2(v100) 146 | v118 = self.do_some_mutex3(v108) + 16 147 | self.mult3(v107, a2.m128_u64, a3, a4, a5, v18, v19, a8, a9) 148 | v119 = self.do_some_mutex3(v107.m128i_i64) + 16 149 | version_string = self.get_version_string() 150 | v120 = self.str_sig(a2, a3, a4, a5, v20, v21, a8, a9, v107, v17) 151 | v22 = v73 + 16 152 | v122 = v73 + 12 153 | v123 = v22 154 | v124 = 0 155 | v125 = v9 156 | self.sm3_hash(v105, v70) 157 | v126 = 6 158 | v127 = v106 159 | self.sm3_hash(v103, v68) 160 | v128 = 6 161 | v129 = v104 162 | v102 = dword_0 163 | v101 = xmmword_A4020 164 | v100 = off_A4010 165 | v23 = self.UND_pthread2(v103, v68) 166 | v24 = self.sub_45AF4(v23) 167 | self.malloc_shit(v150, "sign") 168 | # DWORD2(v101) = UND_pthread3(v24, v150) 169 | self.calc_smh3(v150) 170 | v25 = self.UND_pthread2(v150, v150) 171 | v26 = self.sub_45AF4(v25) 172 | self.malloc_shit(v150, "setting") 173 | # LODWORD(v102) = UND_pthread3(v26, v150) 174 | self.calc_smh3(v150) 175 | v27 = self.UND_pthread2(v150, v150) 176 | v28 = self.sub_45AF4(v27) 177 | self.malloc_shit(v150, "report") 178 | # HIDWORD(v101) = UND_pthread3(v28, v150) 179 | self.calc_smh3(v150) 180 | v130 = v100 181 | v131 = v74 + 16 182 | v138 = a1 + 64 183 | self.maybe_malloc_check(v97) 184 | self.maybe_malloc_check(v94) 185 | if self.calc7(v75) or self.calc7(v72): 186 | v137 = "none" 187 | else: 188 | v137 = v72 + 16 189 | self.calc_and_mutex(v150, v75, 0) 190 | v29 = self.do_some_mutex2(v150) 191 | self.calc_cool3_0(v97, v29) 192 | self.do_some_mutex(v150) 193 | v133 = v98 194 | v134 = v99 195 | self.call_more_calc1(v147, v68, v70) 196 | self.call_more_calc1(v150, v147, v72) 197 | self.calc_smh3(v147) 198 | self.sm3_hash(v147, v150) 199 | self.calc_cool3_0(v94, v147) 200 | self.calc_smh3(v147) 201 | v135 = v95 202 | v136 = v96 203 | self.calc_smh3(v150) 204 | v30 = self.j_UND_calc_smh6(dest) 205 | self.calc_checks2(v91, 0, v30) 206 | self.j_UND_calc_smh7(dest, v93) 207 | v31 = rand_from_time() 208 | v71 = HIWORD(v31) 209 | v90 = HIWORD(v31) 210 | self.mutex_unlock_lock(v144, v16) 211 | v32 = self.mutex_unlock_lock2(v144.m128i_i64) 212 | self.malloc_shit(v150, "sign_key") 213 | self.sub_8334E(v146, v32, v150) 214 | v33 = self.do_some_mutex2(v146) 215 | self.sub_7F908(v147, v33) 216 | v34 = self.do_some_mutex2(v147) 217 | self.calc_smh1(v87, v34) 218 | self.do_some_mutex(v147) 219 | self.do_some_mutex(v146) 220 | self.calc_smh3(v150) 221 | self.mult2(v144) 222 | self.calc_checks(v150, v89, 16) 223 | self.calc_and_mutex(v147, v150, 0) 224 | v35 = self.do_some_mutex2(v147) 225 | self.calc_smh1(v86, v35) 226 | self.do_some_mutex(v147) 227 | self.calc_smh3(v150) 228 | self.calc_checks(v150, v89 + 16, 16) 229 | self.calc_and_mutex(v147, v150, 0) 230 | v36 = self.do_some_mutex2(v147) 231 | self.calc_smh1(v85, v36) 232 | self.do_some_mutex(v147) 233 | self.calc_smh3(v150) 234 | v69 = v31 235 | # LODWORD(v150) = v31 236 | self.calc_checks(v146, v150, 4) 237 | self.call_more_calc1(v147, v87, v146) 238 | self.call_more_calc1(v150, v147, v87) 239 | self.sm3_hash(v83, v150) 240 | self.calc_smh3(v150) 241 | self.calc_smh3(v147) 242 | self.calc_smh3(v146) 243 | v82 = self.calc_tyhon(v89, v88) 244 | self.maybe_malloc_check(v81) 245 | self.calc_smh1(v139, v83) 246 | if v84 <= 31: 247 | self.calc_checks2(v150, 0, 32 - v84) 248 | self.calc_1_caller(v139, v150) 249 | self.calc_smh3(v150) 250 | v37 = v93 251 | v38 = v92 252 | v39 = v140 253 | v40 = 0 254 | self.calc_checks2(v147, 0, 576) 255 | self.calc_checks(v146, v39, 32) 256 | self.calc_checks(v144, v37, v38) 257 | v41 = v146[2] 258 | v42 = v148 259 | v151 = 0 260 | v150 = 0 261 | while v40 != 4: 262 | v150[v40] = v41[8 * v40] 263 | v40 += 1 264 | v42 = v150 # list()?? 265 | v150 = 0 266 | v151 = 0 267 | for i in range(0, 71): 268 | v44 = v151[1] 269 | v45 = v150 270 | for j in range(1, 4): 271 | v149[j] = v150[j] 272 | v47 = v45[1] ^ v44 << 61 273 | # v151 = v47 ^ ((0x3DC94C3A046D678B >> (i % 0x3E)) & 1 | 0xFFFFFFFFFFFFFFFC) ^ v45 ^ v47 >> 1 274 | # .c -> *(&v151 + 1) = v47 ^ ((0x3DC94C3A046D678BuLL >> (i % 0x3Eu)) & 1 | 0xFFFFFFFFFFFFFFFCLL) ^ v45 ^ __ROR8__(v47, 1) 275 | # v151[1] = v47 ^ ((0x3DC94C3A046D678BuLL >> (i % 0x3Eu)) & 1 | 0xFFFFFFFFFFFFFFFCLL) ^ v45 ^ __ROR8__(v47, 1) 276 | v151[1] = ( 277 | v47 278 | ^ ((0x3DC94C3A046D678B >> (i % 0x3E)) & 1 | 0xFFFFFFFFFFFFFFFC) 279 | ^ v45 280 | ^ __ROR8__(v47, 1) 281 | ) 282 | v42[i + 1] = v150 283 | v48 = 16 * ((v144.m128i_i32[3] + 16) / 16) 284 | v49 = v48 - v144.m128i_i8[12] 285 | self.maybe_malloc_check(v150) 286 | self.calc_smh2(v150, v49, v49) 287 | self.calc_1_caller(v144, v150) 288 | v50 = 0 289 | self.calc_checks2(v141, 0, v48) 290 | v51 = v148 291 | v52 = v145 292 | v53 = v143 293 | while v50 < v48: 294 | v54 = v52[v50] 295 | v55 = v52[v50 + 8] 296 | for k in range(0, 72): 297 | v57 = v55 298 | v55 = ( 299 | v51[8 * k] 300 | ^ ((v55 << 1) | (v55 >> 7)) & ((v55 << 8) | (v55 >> 8)) 301 | ^ v54 302 | ^ ((v55 << 2) | (v55 >> 6)) 303 | ) 304 | v54 = v57 305 | v53[v50] = v54 306 | v53[v50 + 8] = v55 307 | v50 += 16 308 | v58 = malloc(v48) 309 | v59 = v142 310 | v60 = v142 311 | memcpy(v58, v53, v142) 312 | self.calc_smh3(v141) 313 | self.calc_smh3(v150) 314 | self.calc_smh3(v144) 315 | self.calc_smh3(v146) 316 | self.calc_smh3(v147) 317 | if v58 and v59 > 0: 318 | self.calc_smh2(v81, v59, 0x20) 319 | memcpy(v81[2], v58, v60) 320 | # elif not v58: 321 | # goto LABEL_36 322 | # free(v58) 323 | # LABEL_36: 324 | if v58: 325 | free(v58) 326 | self.calc_smh3(v139) 327 | self.call_more_calc1(v150, v73, v81) 328 | # HIDWORD(v149) = _byteswap_ulong(calc_tyhon(v90, 2)) 329 | v61 = 0 330 | self.calc_checks2(v147, 0, v150 >> 32) 331 | v62 = v150 >> 32 332 | v63 = 0 333 | if v150 >= 0: 334 | v63 = v150 >> 32 335 | while True: 336 | v62 -= 1 337 | if v63 == v61: 338 | break 339 | v148[v61] = v151[v62] ^ v149[v61 & 3 + 4] 340 | v61 += 1 341 | v80 = 0x1800000000000000 342 | v64 = (((v104 & 0x3F) | 0x6000) << 46) | ((v106 & 0x3F) << 40) 343 | v80 = v64 | rand_from_time() 344 | self.calc_checks(v139, v82, 1) 345 | self.calc_checks(v79, v80, 8) 346 | self.call_more_calc1(v141, v139, v79) 347 | self.call_more_calc1(v144, v141, v147) 348 | self.sub_53A5C(v78, v71) 349 | self.call_more_calc1(v146, v144, v78) 350 | self.calc_smh3(v78) 351 | self.calc_smh3(v144) 352 | self.calc_smh3(v141) 353 | self.calc_smh3(v79) 354 | self.calc_smh3(v139) 355 | 356 | v139 = [1] 357 | self.sub_7FA8C(v141, v146, v86, v85, v139) 358 | v65 = self.do_some_mutex2(v141) 359 | self.calc_smh1(v144, v65) 360 | self.do_some_mutex(v141) 361 | self.sub_53A5C(v79, v69) 362 | self.call_more_calc1(v139, v79, v144) 363 | self.does_something_b64(v78, v139) 364 | v66 = self.do_some_mutex2(v78) 365 | self.calc_smh1(v141, v66) 366 | self.do_some_mutex(v78) 367 | self.calc_smh3(v139) 368 | self.calc_smh3(v79) 369 | # import ctypes 370 | # libc = ctypes.CDLL('libc.so.6') 371 | # buffer = ctypes.c_char_p() 372 | # r = libc.asprintf(ctypes.byref(buffer), b"The total is %d\n", 5+8) 373 | # libc.puts(buffer) 374 | # libc.printf(b"%d characters generated\n", r) 375 | ptr = "%s" % "X-Argus" 376 | v77 = "%s" % v143 377 | self.calc_smh3(v141) 378 | self.calc_smh3(v144) 379 | self.calc_smh3(v146) 380 | self.calc_smh3(v147) 381 | self.calc_smh3(v150) 382 | self.calc_smh3(v81) 383 | self.calc_smh3(v83) 384 | self.calc_smh3(v85) 385 | self.calc_smh3(v86) 386 | self.calc_smh3(v87) 387 | self.calc_smh3(v91) 388 | self.calc_smh3(v94) 389 | self.calc_smh3(v97) 390 | self.calc_smh3(v103) 391 | self.calc_smh3(v105) 392 | self.do_some_mutex(v107) 393 | self.do_some_mutex(v108) 394 | return _readfsqword(0x28) --------------------------------------------------------------------------------