diff --git a/newbiecontest/prog/configs/configs.py b/newbiecontest/prog/configs/configs.py
new file mode 100755
index 0000000..9233ba2
--- /dev/null
+++ b/newbiecontest/prog/configs/configs.py
@@ -0,0 +1,191 @@
+#!/usr/bin/env python
+
+# imports ######################################################################
+import sqlite3
+import sys
+import urllib.request
+import re
+
+# functions ####################################################################
+# extract cookie to jar
+def extract_cookies_to_jar(cookie_db):
+ try:
+
+ # Connection
+ conn = sqlite3.connect(cookie_db)
+
+ # Execute SELECT query
+ cur = conn.cursor()
+ r = cur.execute("SELECT name, value FROM moz_cookies WHERE host LIKE '%newbiecontest.org%' AND name LIKE '%SMFCookie%'")
+
+ cookie = r.fetchone()
+
+ conn.close()
+
+ return cookie
+
+ except sqlite3.Error as e:
+ print("An error occurred:", e.args[0])
+
+# send request using the cookie
+def send_resquest(url, cookie):
+ opener = urllib.request.build_opener()
+ # add cookie to http header
+ opener.addheaders.append(('Cookie', cookie[0] + "=" + cookie[1]))
+
+ f = opener.open(url)
+
+ return f
+
+# extract line containing the configs
+def extract_config_line(f):
+
+ for line in f:
+ if re.findall(r'a un processeur', line.decode("utf-8")):
+ return line.decode("utf-8")
+
+ return None
+
+# extract memory prices
+def extract_memory_prices(f):
+ # create the hashtable
+ memory_hashtable = {}
+
+ # for each line
+ for line in f:
+
+ # find ram name
+ ram_name = re.findall(r'\d+ Mo [DS]DRAM', line.decode("utf-8"))
+
+ # save ram_name
+ if ram_name:
+ ram_name_cur = ram_name[0]
+ continue
+
+ # save ram_price
+ ram_price = re.findall(r'
(\d+)', line.decode("utf-8"))
+ # if ram_price is not None
+ if ram_price:
+ # add entry to memory_hashtable
+ memory_hashtable[ram_name_cur] = ram_price
+
+ # If all the prices are in the hashtable, just return it
+ if re.findall(r'Trop chère ;\)', line.decode("utf-8")):
+ return memory_hashtable
+
+ return memory_hash_table;
+
+# extract cpu price
+def extract_cpu_prices(f):
+ # create the cpu_hashtable
+ cpu_hashtable = {}
+
+ # for earch line
+ for line in f:
+
+ # find cpu name
+ cpu_name = re.findall(r'\d+.\d+ [MG]Hz', line.decode("utf-8"))
+
+ # save cpu name to cpu_name_cur
+ if cpu_name:
+ cpu_name_cur = cpu_name[0]
+ continue
+
+ # find price
+ cpu_price = re.findall(r' | (\d+)', line.decode("utf-8"))
+ # if cpu_price is not None
+ if cpu_price:
+ # add an entry to the hashtable
+ cpu_hashtable[cpu_name_cur] = cpu_price
+
+ # return the hashtable
+ return cpu_hashtable
+
+# calculate config prices
+def config_price_calc(line, memory_hashtable, cpu_hashtable):
+ # crete the hashtable containing the configs
+ configs = {}
+ i = 0
+
+ # extract the config for each people
+ config_array = re.findall(r'(\w+) a un processeur de (\d+.\d+ [MG]Hz) et dispose de (\d+ Mo [DS]DRAM)', line)
+
+ # for all the configs, determine the prices
+ for item in config_array:
+ try:
+ config_price = int(memory_hashtable[item[2]][0]) +\
+ int(cpu_hashtable[item[1]][0])
+
+ configs[i] = [item[0], config_price]
+ i += 1
+
+ except Exception as e:
+ raise e
+
+ # return the hashtable
+ return configs
+
+# find the most expensive config
+def find_most_expensive_config(configs):
+
+ i = 0
+
+ # for all the configs
+ for index in configs:
+
+ # init
+ if i == 0:
+ name = configs[index][0]
+ price = configs[index][1]
+ id = i
+
+ i += 1
+
+ # if a new max if found
+ if price < configs[index][1]:
+ # change the max value, to the current value in the loop
+ name = configs[index][0]
+ price = configs[index][1]
+ id = i
+
+ return name, price
+
+def send_response(url, cookie, name, price):
+ opener = urllib.request.build_opener()
+ opener.addheaders.append(('Cookie', cookie[0] + "=" + cookie[1]))
+
+ f = opener.open(url + "?prenom=" + name + "&prix=" + str(price))
+
+ print(f.read().decode('utf-8'))
+
+# main #########################################################################
+if __name__ == '__main__':
+
+ # if arguments are missing
+ if len(sys.argv) != 4:
+ print("[i] Usage : cookie.db url_in url_out")
+ print("Get. The. Fuck. Out")
+
+ # extract related cookies from db
+ cookie = extract_cookies_to_jar(sys.argv[1])
+
+ # send request, get the challenge page
+ f = send_resquest(sys.argv[2], cookie)
+
+ line = extract_config_line(f)
+
+ if line == None:
+ os.exit(0)
+
+ memory_hashtable = extract_memory_prices(f)
+
+ cpu_hashtable = extract_cpu_prices(f)
+
+ configs = config_price_calc(line, memory_hashtable, cpu_hashtable)
+
+ name, price = find_most_expensive_config(configs)
+
+ send_response(sys.argv[3], cookie, name, price)
+
+ print("Done.")
+
|