Advertisement
Guest User

Untitled

a guest
Jul 16th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.71 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import string
  4. import urllib
  5. import urllib2
  6. import time
  7. import re
  8. import base64
  9. import sys
  10. from PIL import Image
  11. import pytesseract
  12.  
  13. ## Settings
  14. URL_BASE = "http://51.15.73.163/BOT-WORLD/"
  15. URL_INDEX = URL_BASE + "index.php"
  16. URL_GENERATE = URL_BASE + "generate_captcha.php"
  17.  
  18. def is_ascii(s):
  19.     return all(ord(c) < 128 for c in s)
  20.  
  21. def getTitle(data):
  22.     result = re.search(r"<h4>(.+)</h4>", data, re.M|re.I)
  23.     title = result.group(1) if result else ""
  24.    
  25.     return title
  26.    
  27. def getWebsiteCode(data):
  28.     data = urllib.unquote(data).decode('utf8')
  29.    
  30.     result = re.search(r"data=(.+)\'", data, re.M|re.I)
  31.     website_code = result.group(1) if result else ""
  32.    
  33.     return website_code
  34.  
  35. """
  36.     Results get/save
  37. """
  38. def getResults():
  39.     list = {}
  40.    
  41.     with open('results.txt') as fp:
  42.         for line in fp:
  43.             result = re.search(r"(.+)   (.+)", line, re.M|re.I)
  44.            
  45.             ## Get website code
  46.             web = result.group(1)
  47.            
  48.             ## Get captcha code
  49.             cap = result.group(2)
  50.            
  51.             list[web] = cap
  52.    
  53.     return list
  54.    
  55. def saveResults(website_code, captcha_code):
  56.     f = open("results.txt","a+")
  57.    
  58.     if f:
  59.         f.write("{} {}\n".format(website_code, captcha_code))
  60.    
  61.         f.close()
  62.  
  63. """
  64.  
  65. """
  66. def createSession():
  67.     session = urllib2.build_opener()
  68.    
  69.     ## Go to index page
  70.     response = session.open(URL_INDEX)
  71.     data = response.read()
  72.    
  73.     ## Get Cookie
  74.     cookie = response.info().getheader('Set-cookie')
  75.     cookie = cookie[cookie.find("=")+1:cookie.find(";")]
  76.    
  77.     ## Set Cookie
  78.     session.addheaders.append(("Cookie", "PHPSESSID={}".format(cookie)))
  79.    
  80.     return session, getWebsiteCode(data)
  81.  
  82. def downloadImage(session, website_code):
  83.     website_code = urllib.quote(website_code, safe='')
  84.  
  85.     file_name = "download/{}.png".format(website_code)
  86.    
  87.     ## Download Picture
  88.     response = session.open(URL_GENERATE + "?data=" + website_code)
  89.     data = response.read()
  90.    
  91.     ## Save picture
  92.     f = open(file_name, "wb")
  93.     f.write(data)
  94.     f.close()
  95.  
  96. def removeNoice(website_code):
  97.     website_code = urllib.quote(website_code, safe='')
  98.    
  99.     infile_path = "download/{}.png".format(website_code)
  100.     outfile_path = "unfilter/{}.png".format(website_code)
  101.    
  102.     im = Image.open(infile_path)
  103.     im = im.convert('RGB')
  104.     pix = im.load()
  105.    
  106.     w = im.size[0]
  107.     h = im.size[1]
  108.    
  109.     gen_im = Image.new("RGB", (w, h), "white")
  110.     gen_pix = gen_im.load()
  111.    
  112.     # Patch pixels
  113.     for y in range(h):
  114.         for x in range(w):
  115.             if pix[x, y][0] != 15 and pix[x, y][1] != 15 and pix[x, y][2] != 15:
  116.                 gen_pix[x, y] = pix[x, y]
  117.    
  118.     gen_im.save(outfile_path, "PNG")
  119.    
  120.     return gen_im
  121.  
  122. def collectResults():
  123.     session, website_code = createSession()
  124.    
  125.     for i in range(1000):  
  126.         ## Download image
  127.         downloadImage(session, website_code)
  128.        
  129.         ## Remove noice out of picture
  130.         im = removeNoice(website_code)
  131.        
  132.         ## Generate captcha
  133.         captcha_code = pytesseract.image_to_string(im)
  134.         captcha_code = captcha_code if is_ascii(captcha_code) else ""
  135.        
  136.         ## Go to index page
  137.         post = urllib.urlencode({"captcha" : captcha_code, "Submit" : "Submit"})
  138.         response = session.open(URL_INDEX, post)
  139.        
  140.         data = response.read()
  141.         title = getTitle(data)
  142.        
  143.         if not "Incorrect solution" in title:
  144.             if not "Solve captchas to get invitation" in title:
  145.                 if title != "":
  146.                     saveResults(website_code, captcha_code)
  147.                
  148.                 print(data)
  149.                 print("---------------------------------------")
  150.                 print("title = {}".format(title))
  151.                 print("website_code = {}".format(website_code))
  152.                 print("captcha_code = {}".format(captcha_code))
  153.                 print("---------------------------------------")
  154.        
  155.        
  156.         ## Get website code
  157.         website_code = getWebsiteCode(data)
  158.        
  159.         ## Debug
  160.         ##print("website_code = {}".format(website_code))
  161.        
  162.         if website_code == "":
  163.             session, website_code = createSession()
  164.  
  165. """
  166.    
  167. """
  168. def genReverse(results):
  169.     reverse = [{} for x in range(10)]
  170.    
  171.     for website_code in results:
  172.         decode_web = base64.b64decode(website_code)
  173.         captcha_code = results[website_code]
  174.        
  175.         ## Create results
  176.         reverse[0][decode_web[0]] = captcha_code[0]
  177.         reverse[1][decode_web[1]] = captcha_code[1]
  178.         reverse[2][decode_web[2]] = captcha_code[2]
  179.         reverse[3][decode_web[3]] = captcha_code[3]
  180.         reverse[4][decode_web[4]] = captcha_code[4]
  181.         reverse[5][decode_web[5]] = captcha_code[5]
  182.         reverse[6][decode_web[6]] = captcha_code[6]
  183.         reverse[7][decode_web[7]] = captcha_code[7]
  184.         reverse[8][decode_web[8]] = captcha_code[8]
  185.         reverse[9][decode_web[9]] = captcha_code[9]
  186.        
  187.     return reverse
  188.  
  189. def decode(reverse, website_code):
  190.     decode_web = base64.b64decode(website_code)
  191.    
  192.     captcha_code = reverse[0][decode_web[0]]
  193.     captcha_code += reverse[1][decode_web[1]]
  194.     captcha_code += reverse[2][decode_web[2]]
  195.     captcha_code += reverse[3][decode_web[3]]
  196.     captcha_code += reverse[4][decode_web[4]]
  197.     captcha_code += reverse[5][decode_web[5]]
  198.     captcha_code += reverse[6][decode_web[6]]
  199.     captcha_code += reverse[7][decode_web[7]]
  200.     captcha_code += reverse[8][decode_web[8]]
  201.     captcha_code += reverse[9][decode_web[9]]
  202.    
  203.     return captcha_code
  204.    
  205. def test(results, reverse):
  206.     wrong = [ False for x in range(10)]
  207.    
  208.     for website_code in results:
  209.         captcha_code = decode(reverse, website_code)
  210.        
  211.         if captcha_code != results[website_code]:
  212.             print(website_code)
  213.             print(captcha_code)
  214.             print(results[website_code])
  215.             print("-------------")
  216.            
  217.             print("Oeps something went wrong! :O YOU FAILL!!!!")
  218.            
  219.             return False
  220.    
  221.     print("Passed all tests! Good Job! :D")
  222.    
  223.     return True
  224.    
  225. def analiseResults():
  226.     results = getResults()
  227.     reverse = genReverse(results)
  228.    
  229.     test(results, reverse)
  230.  
  231. def runChallange():
  232.     try:
  233.         results = getResults()
  234.         reverse = genReverse(results)
  235.        
  236.         session, website_code = createSession()
  237.        
  238.         for i in range(100):
  239.            
  240.                 captcha_code = decode(reverse, website_code)
  241.                
  242.                 ## Go to index page
  243.                 post = urllib.urlencode({"captcha" : captcha_code, "Submit" : "Submit"})
  244.                 response = session.open(URL_INDEX, post)
  245.                
  246.                 data = response.read()
  247.                 title = getTitle(data)
  248.                
  249.                 if not "Incorrect solution" in title:
  250.                     if not "Solve captchas to get invitation" in title:
  251.                         ##print(data)
  252.                         print("---------------------------------------")
  253.                         print("title = {}".format(title))
  254.                         print("website_code = {}".format(website_code))
  255.                         print("captcha_code = {}".format(captcha_code))
  256.                         print("---------------------------------------")
  257.                         print("{}/{}".format(i + 1, 100))
  258.                
  259.                 if "You have proved yourself bot" in title:
  260.                     return
  261.                
  262.                 ## Get website code
  263.                 website_code = getWebsiteCode(data)
  264.     except:
  265.         runChallange()
  266.    
  267. def main(argv):
  268.     if "-a" in argv:
  269.         analiseResults()
  270.    
  271.     if "-c" in argv:
  272.         collectResults()
  273.        
  274.     if "-r" in argv:
  275.         runChallange()
  276.        
  277. if __name__ == "__main__":
  278.    main(sys.argv[1:])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement