Added a lot to the doc and modified the pdf generation
This commit is contained in:
+132
-118
@@ -135,38 +135,18 @@
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="DriverGapToLeaderWindow.html">
|
||||
DriverGapToLeaderWindow.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="DriverPositionWindow.html">
|
||||
DriverPositionWindow.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="F1TVEmulator.html">
|
||||
F1TVEmulator.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="Program.html">
|
||||
Program.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="Window.html">
|
||||
Window.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="DriverData.html">
|
||||
DriverData.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="DriverLapTimeWindow.html">
|
||||
DriverLapTimeWindow.cs
|
||||
<a class="md-nav__link" href="DriverGapToLeaderWindow.html">
|
||||
DriverGapToLeaderWindow.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="DriverNameWindow.html">
|
||||
DriverNameWindow.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
@@ -175,13 +155,28 @@
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="F1TVEmulator.html">
|
||||
F1TVEmulator.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="Form1.html">
|
||||
Form1.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="Reader.html">
|
||||
Reader.cs
|
||||
<a class="md-nav__link" href="Program.html">
|
||||
Program.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="Settings.Designer.html">
|
||||
Settings.Designer.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="SqliteStorage.html">
|
||||
SqliteStorage.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
@@ -190,13 +185,23 @@
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="DataWrapper.html">
|
||||
DataWrapper.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="DriverDrsWindow.html">
|
||||
DriverDrsWindow.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="DriverNameWindow.html">
|
||||
DriverNameWindow.cs
|
||||
<a class="md-nav__link" href="DriverLapTimeWindow.html">
|
||||
DriverLapTimeWindow.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="DriverPositionWindow.html">
|
||||
DriverPositionWindow.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
@@ -210,10 +215,20 @@
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="Reader.html">
|
||||
Reader.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="Settings.html">
|
||||
Settings.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item">
|
||||
<a class="md-nav__link" href="Window.html">
|
||||
Window.cs
|
||||
</a>
|
||||
</li>
|
||||
<li class="md-nav__item md-nav__item--active">
|
||||
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" id="__toc" type="checkbox"/>
|
||||
<a class="md-nav__link md-nav__link--active" href="recoverCookiesCSV.html">
|
||||
@@ -239,98 +254,97 @@
|
||||
<div class="md-content" data-md-component="content">
|
||||
<article class="md-content__inner md-typeset">
|
||||
<h1 id="recovercookiescsvpy">recoverCookiesCSV.py</h1>
|
||||
<pre><code class="language-py"># Rohmer Maxime
|
||||
# RecoverCookies.py
|
||||
# Little script that recovers the cookies stored in the chrome sqlite database and then decrypts them using the key stored in the chrome files
|
||||
# This script has been created to be used by an other programm or for the data to not be used directly. This is why it stores all the decoded cookies in a csv. (Btw could be smart for the end programm to delete the csv after using it)
|
||||
# Parts of this cript have been created with the help of ChatGPT
|
||||
|
||||
import os
|
||||
import json
|
||||
import base64
|
||||
import sqlite3
|
||||
import win32crypt
|
||||
from Cryptodome.Cipher import AES
|
||||
from pathlib import Path
|
||||
import csv
|
||||
|
||||
def get_master_key():
|
||||
with open(
|
||||
os.getenv("localappdata") + "\\Google\\Chrome\\User Data\\Local State", "r"
|
||||
) as f:
|
||||
local_state = f.read()
|
||||
local_state = json.loads(local_state)
|
||||
master_key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])
|
||||
master_key = master_key[5:] # removing DPAPI
|
||||
master_key = win32crypt.CryptUnprotectData(master_key, None, None, None, 0)[1]
|
||||
print("MASTER KEY :")
|
||||
print(master_key)
|
||||
print(len(master_key))
|
||||
return master_key
|
||||
|
||||
def decrypt_payload(cipher, payload):
|
||||
return cipher.decrypt(payload)
|
||||
|
||||
def generate_cipher(aes_key, iv):
|
||||
return AES.new(aes_key, AES.MODE_GCM, iv)
|
||||
|
||||
def decrypt_password(buff, master_key):
|
||||
try:
|
||||
iv = buff[3:15]
|
||||
payload = buff[15:]
|
||||
cipher = generate_cipher(master_key, iv)
|
||||
decrypted_pass = decrypt_payload(cipher, payload)
|
||||
decrypted_pass = decrypted_pass[:-16].decode() # remove suffix bytes
|
||||
return decrypted_pass
|
||||
except Exception:
|
||||
# print("Probably saved password from Chrome version older than v80\n")
|
||||
# print(str(e))
|
||||
return "Chrome < 80"
|
||||
|
||||
|
||||
master_key = get_master_key()
|
||||
|
||||
cookies_path = Path(
|
||||
os.getenv("localappdata") + "\\Google\\Chrome\\User Data\\Default\\Network\\Cookies"
|
||||
)
|
||||
|
||||
if not cookies_path.exists():
|
||||
raise ValueError("Cookies file not found")
|
||||
|
||||
with sqlite3.connect(cookies_path) as connection:
|
||||
connection.row_factory = sqlite3.Row
|
||||
cursor = connection.cursor()
|
||||
cursor.execute("SELECT * FROM cookies")
|
||||
|
||||
with open('cookies.csv', 'a', newline='') as csvfile:
|
||||
fieldnames = ['host_key', 'name', 'value', 'path', 'expires_utc', 'is_secure', 'is_httponly']
|
||||
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
|
||||
|
||||
if csvfile.tell() == 0:
|
||||
writer.writeheader()
|
||||
|
||||
for row in cursor.fetchall():
|
||||
decrypted_value = decrypt_password(row["encrypted_value"], master_key)
|
||||
writer.writerow({
|
||||
'host_key': row["host_key"],
|
||||
'name': row["name"],
|
||||
'value': decrypted_value,
|
||||
'path': row["path"],
|
||||
'expires_utc': row["expires_utc"],
|
||||
'is_secure': row["is_secure"],
|
||||
'is_httponly': row["is_httponly"]
|
||||
})
|
||||
|
||||
print("Finished CSV")
|
||||
|
||||
</code></pre>
|
||||
<div class="language-py highlight"><pre><span></span><code><span id="__span-0-1"><a href="#__codelineno-0-1" id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="c1"># Rohmer Maxime</span>
|
||||
</span><span id="__span-0-2"><a href="#__codelineno-0-2" id="__codelineno-0-2" name="__codelineno-0-2"></a><span class="c1"># RecoverCookies.py</span>
|
||||
</span><span id="__span-0-3"><a href="#__codelineno-0-3" id="__codelineno-0-3" name="__codelineno-0-3"></a><span class="c1"># Little script that recovers the cookies stored in the chrome sqlite database and then decrypts them using the key stored in the chrome files</span>
|
||||
</span><span id="__span-0-4"><a href="#__codelineno-0-4" id="__codelineno-0-4" name="__codelineno-0-4"></a><span class="c1"># This script has been created to be used by an other programm or for the data to not be used directly. This is why it stores all the decoded cookies in a csv. (Btw could be smart for the end programm to delete the csv after using it)</span>
|
||||
</span><span id="__span-0-5"><a href="#__codelineno-0-5" id="__codelineno-0-5" name="__codelineno-0-5"></a><span class="c1"># Parts of this cript have been created with the help of ChatGPT</span>
|
||||
</span><span id="__span-0-6"><a href="#__codelineno-0-6" id="__codelineno-0-6" name="__codelineno-0-6"></a>
|
||||
</span><span id="__span-0-7"><a href="#__codelineno-0-7" id="__codelineno-0-7" name="__codelineno-0-7"></a><span class="kn">import</span> <span class="nn">os</span>
|
||||
</span><span id="__span-0-8"><a href="#__codelineno-0-8" id="__codelineno-0-8" name="__codelineno-0-8"></a><span class="kn">import</span> <span class="nn">json</span>
|
||||
</span><span id="__span-0-9"><a href="#__codelineno-0-9" id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="kn">import</span> <span class="nn">base64</span>
|
||||
</span><span id="__span-0-10"><a href="#__codelineno-0-10" id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="kn">import</span> <span class="nn">sqlite3</span>
|
||||
</span><span id="__span-0-11"><a href="#__codelineno-0-11" id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="kn">import</span> <span class="nn">win32crypt</span>
|
||||
</span><span id="__span-0-12"><a href="#__codelineno-0-12" id="__codelineno-0-12" name="__codelineno-0-12"></a><span class="kn">from</span> <span class="nn">Cryptodome.Cipher</span> <span class="kn">import</span> <span class="n">AES</span>
|
||||
</span><span id="__span-0-13"><a href="#__codelineno-0-13" id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="kn">from</span> <span class="nn">pathlib</span> <span class="kn">import</span> <span class="n">Path</span>
|
||||
</span><span id="__span-0-14"><a href="#__codelineno-0-14" id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="kn">import</span> <span class="nn">csv</span>
|
||||
</span><span id="__span-0-15"><a href="#__codelineno-0-15" id="__codelineno-0-15" name="__codelineno-0-15"></a>
|
||||
</span><span id="__span-0-16"><a href="#__codelineno-0-16" id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="k">def</span> <span class="nf">get_master_key</span><span class="p">():</span>
|
||||
</span><span id="__span-0-17"><a href="#__codelineno-0-17" id="__codelineno-0-17" name="__codelineno-0-17"></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span>
|
||||
</span><span id="__span-0-18"><a href="#__codelineno-0-18" id="__codelineno-0-18" name="__codelineno-0-18"></a> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">"localappdata"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\\</span><span class="s2">Google</span><span class="se">\\</span><span class="s2">Chrome</span><span class="se">\\</span><span class="s2">User Data</span><span class="se">\\</span><span class="s2">Local State"</span><span class="p">,</span> <span class="s2">"r"</span>
|
||||
</span><span id="__span-0-19"><a href="#__codelineno-0-19" id="__codelineno-0-19" name="__codelineno-0-19"></a> <span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
||||
</span><span id="__span-0-20"><a href="#__codelineno-0-20" id="__codelineno-0-20" name="__codelineno-0-20"></a> <span class="n">local_state</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
|
||||
</span><span id="__span-0-21"><a href="#__codelineno-0-21" id="__codelineno-0-21" name="__codelineno-0-21"></a> <span class="n">local_state</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">local_state</span><span class="p">)</span>
|
||||
</span><span id="__span-0-22"><a href="#__codelineno-0-22" id="__codelineno-0-22" name="__codelineno-0-22"></a> <span class="n">master_key</span> <span class="o">=</span> <span class="n">base64</span><span class="o">.</span><span class="n">b64decode</span><span class="p">(</span><span class="n">local_state</span><span class="p">[</span><span class="s2">"os_crypt"</span><span class="p">][</span><span class="s2">"encrypted_key"</span><span class="p">])</span>
|
||||
</span><span id="__span-0-23"><a href="#__codelineno-0-23" id="__codelineno-0-23" name="__codelineno-0-23"></a> <span class="n">master_key</span> <span class="o">=</span> <span class="n">master_key</span><span class="p">[</span><span class="mi">5</span><span class="p">:]</span> <span class="c1"># removing DPAPI</span>
|
||||
</span><span id="__span-0-24"><a href="#__codelineno-0-24" id="__codelineno-0-24" name="__codelineno-0-24"></a> <span class="n">master_key</span> <span class="o">=</span> <span class="n">win32crypt</span><span class="o">.</span><span class="n">CryptUnprotectData</span><span class="p">(</span><span class="n">master_key</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
|
||||
</span><span id="__span-0-25"><a href="#__codelineno-0-25" id="__codelineno-0-25" name="__codelineno-0-25"></a> <span class="nb">print</span><span class="p">(</span><span class="s2">"MASTER KEY :"</span><span class="p">)</span>
|
||||
</span><span id="__span-0-26"><a href="#__codelineno-0-26" id="__codelineno-0-26" name="__codelineno-0-26"></a> <span class="nb">print</span><span class="p">(</span><span class="n">master_key</span><span class="p">)</span>
|
||||
</span><span id="__span-0-27"><a href="#__codelineno-0-27" id="__codelineno-0-27" name="__codelineno-0-27"></a> <span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">master_key</span><span class="p">))</span>
|
||||
</span><span id="__span-0-28"><a href="#__codelineno-0-28" id="__codelineno-0-28" name="__codelineno-0-28"></a> <span class="k">return</span> <span class="n">master_key</span>
|
||||
</span><span id="__span-0-29"><a href="#__codelineno-0-29" id="__codelineno-0-29" name="__codelineno-0-29"></a>
|
||||
</span><span id="__span-0-30"><a href="#__codelineno-0-30" id="__codelineno-0-30" name="__codelineno-0-30"></a><span class="k">def</span> <span class="nf">decrypt_payload</span><span class="p">(</span><span class="n">cipher</span><span class="p">,</span> <span class="n">payload</span><span class="p">):</span>
|
||||
</span><span id="__span-0-31"><a href="#__codelineno-0-31" id="__codelineno-0-31" name="__codelineno-0-31"></a> <span class="k">return</span> <span class="n">cipher</span><span class="o">.</span><span class="n">decrypt</span><span class="p">(</span><span class="n">payload</span><span class="p">)</span>
|
||||
</span><span id="__span-0-32"><a href="#__codelineno-0-32" id="__codelineno-0-32" name="__codelineno-0-32"></a>
|
||||
</span><span id="__span-0-33"><a href="#__codelineno-0-33" id="__codelineno-0-33" name="__codelineno-0-33"></a><span class="k">def</span> <span class="nf">generate_cipher</span><span class="p">(</span><span class="n">aes_key</span><span class="p">,</span> <span class="n">iv</span><span class="p">):</span>
|
||||
</span><span id="__span-0-34"><a href="#__codelineno-0-34" id="__codelineno-0-34" name="__codelineno-0-34"></a> <span class="k">return</span> <span class="n">AES</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="n">aes_key</span><span class="p">,</span> <span class="n">AES</span><span class="o">.</span><span class="n">MODE_GCM</span><span class="p">,</span> <span class="n">iv</span><span class="p">)</span>
|
||||
</span><span id="__span-0-35"><a href="#__codelineno-0-35" id="__codelineno-0-35" name="__codelineno-0-35"></a>
|
||||
</span><span id="__span-0-36"><a href="#__codelineno-0-36" id="__codelineno-0-36" name="__codelineno-0-36"></a><span class="k">def</span> <span class="nf">decrypt_password</span><span class="p">(</span><span class="n">buff</span><span class="p">,</span> <span class="n">master_key</span><span class="p">):</span>
|
||||
</span><span id="__span-0-37"><a href="#__codelineno-0-37" id="__codelineno-0-37" name="__codelineno-0-37"></a> <span class="k">try</span><span class="p">:</span>
|
||||
</span><span id="__span-0-38"><a href="#__codelineno-0-38" id="__codelineno-0-38" name="__codelineno-0-38"></a> <span class="n">iv</span> <span class="o">=</span> <span class="n">buff</span><span class="p">[</span><span class="mi">3</span><span class="p">:</span><span class="mi">15</span><span class="p">]</span>
|
||||
</span><span id="__span-0-39"><a href="#__codelineno-0-39" id="__codelineno-0-39" name="__codelineno-0-39"></a> <span class="n">payload</span> <span class="o">=</span> <span class="n">buff</span><span class="p">[</span><span class="mi">15</span><span class="p">:]</span>
|
||||
</span><span id="__span-0-40"><a href="#__codelineno-0-40" id="__codelineno-0-40" name="__codelineno-0-40"></a> <span class="n">cipher</span> <span class="o">=</span> <span class="n">generate_cipher</span><span class="p">(</span><span class="n">master_key</span><span class="p">,</span> <span class="n">iv</span><span class="p">)</span>
|
||||
</span><span id="__span-0-41"><a href="#__codelineno-0-41" id="__codelineno-0-41" name="__codelineno-0-41"></a> <span class="n">decrypted_pass</span> <span class="o">=</span> <span class="n">decrypt_payload</span><span class="p">(</span><span class="n">cipher</span><span class="p">,</span> <span class="n">payload</span><span class="p">)</span>
|
||||
</span><span id="__span-0-42"><a href="#__codelineno-0-42" id="__codelineno-0-42" name="__codelineno-0-42"></a> <span class="n">decrypted_pass</span> <span class="o">=</span> <span class="n">decrypted_pass</span><span class="p">[:</span><span class="o">-</span><span class="mi">16</span><span class="p">]</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span> <span class="c1"># remove suffix bytes</span>
|
||||
</span><span id="__span-0-43"><a href="#__codelineno-0-43" id="__codelineno-0-43" name="__codelineno-0-43"></a> <span class="k">return</span> <span class="n">decrypted_pass</span>
|
||||
</span><span id="__span-0-44"><a href="#__codelineno-0-44" id="__codelineno-0-44" name="__codelineno-0-44"></a> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
||||
</span><span id="__span-0-45"><a href="#__codelineno-0-45" id="__codelineno-0-45" name="__codelineno-0-45"></a> <span class="c1"># print("Probably saved password from Chrome version older than v80\n")</span>
|
||||
</span><span id="__span-0-46"><a href="#__codelineno-0-46" id="__codelineno-0-46" name="__codelineno-0-46"></a> <span class="c1"># print(str(e))</span>
|
||||
</span><span id="__span-0-47"><a href="#__codelineno-0-47" id="__codelineno-0-47" name="__codelineno-0-47"></a> <span class="k">return</span> <span class="s2">"Chrome < 80"</span>
|
||||
</span><span id="__span-0-48"><a href="#__codelineno-0-48" id="__codelineno-0-48" name="__codelineno-0-48"></a>
|
||||
</span><span id="__span-0-49"><a href="#__codelineno-0-49" id="__codelineno-0-49" name="__codelineno-0-49"></a>
|
||||
</span><span id="__span-0-50"><a href="#__codelineno-0-50" id="__codelineno-0-50" name="__codelineno-0-50"></a><span class="n">master_key</span> <span class="o">=</span> <span class="n">get_master_key</span><span class="p">()</span>
|
||||
</span><span id="__span-0-51"><a href="#__codelineno-0-51" id="__codelineno-0-51" name="__codelineno-0-51"></a>
|
||||
</span><span id="__span-0-52"><a href="#__codelineno-0-52" id="__codelineno-0-52" name="__codelineno-0-52"></a><span class="n">cookies_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span>
|
||||
</span><span id="__span-0-53"><a href="#__codelineno-0-53" id="__codelineno-0-53" name="__codelineno-0-53"></a> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">"localappdata"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\\</span><span class="s2">Google</span><span class="se">\\</span><span class="s2">Chrome</span><span class="se">\\</span><span class="s2">User Data</span><span class="se">\\</span><span class="s2">Default</span><span class="se">\\</span><span class="s2">Network</span><span class="se">\\</span><span class="s2">Cookies"</span>
|
||||
</span><span id="__span-0-54"><a href="#__codelineno-0-54" id="__codelineno-0-54" name="__codelineno-0-54"></a><span class="p">)</span>
|
||||
</span><span id="__span-0-55"><a href="#__codelineno-0-55" id="__codelineno-0-55" name="__codelineno-0-55"></a>
|
||||
</span><span id="__span-0-56"><a href="#__codelineno-0-56" id="__codelineno-0-56" name="__codelineno-0-56"></a><span class="k">if</span> <span class="ow">not</span> <span class="n">cookies_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
||||
</span><span id="__span-0-57"><a href="#__codelineno-0-57" id="__codelineno-0-57" name="__codelineno-0-57"></a> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Cookies file not found"</span><span class="p">)</span>
|
||||
</span><span id="__span-0-58"><a href="#__codelineno-0-58" id="__codelineno-0-58" name="__codelineno-0-58"></a>
|
||||
</span><span id="__span-0-59"><a href="#__codelineno-0-59" id="__codelineno-0-59" name="__codelineno-0-59"></a><span class="k">with</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">cookies_path</span><span class="p">)</span> <span class="k">as</span> <span class="n">connection</span><span class="p">:</span>
|
||||
</span><span id="__span-0-60"><a href="#__codelineno-0-60" id="__codelineno-0-60" name="__codelineno-0-60"></a> <span class="n">connection</span><span class="o">.</span><span class="n">row_factory</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Row</span>
|
||||
</span><span id="__span-0-61"><a href="#__codelineno-0-61" id="__codelineno-0-61" name="__codelineno-0-61"></a> <span class="n">cursor</span> <span class="o">=</span> <span class="n">connection</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
|
||||
</span><span id="__span-0-62"><a href="#__codelineno-0-62" id="__codelineno-0-62" name="__codelineno-0-62"></a> <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"SELECT * FROM cookies"</span><span class="p">)</span>
|
||||
</span><span id="__span-0-63"><a href="#__codelineno-0-63" id="__codelineno-0-63" name="__codelineno-0-63"></a>
|
||||
</span><span id="__span-0-64"><a href="#__codelineno-0-64" id="__codelineno-0-64" name="__codelineno-0-64"></a> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'cookies.csv'</span><span class="p">,</span> <span class="s1">'a'</span><span class="p">,</span> <span class="n">newline</span><span class="o">=</span><span class="s1">''</span><span class="p">)</span> <span class="k">as</span> <span class="n">csvfile</span><span class="p">:</span>
|
||||
</span><span id="__span-0-65"><a href="#__codelineno-0-65" id="__codelineno-0-65" name="__codelineno-0-65"></a> <span class="n">fieldnames</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'host_key'</span><span class="p">,</span> <span class="s1">'name'</span><span class="p">,</span> <span class="s1">'value'</span><span class="p">,</span> <span class="s1">'path'</span><span class="p">,</span> <span class="s1">'expires_utc'</span><span class="p">,</span> <span class="s1">'is_secure'</span><span class="p">,</span> <span class="s1">'is_httponly'</span><span class="p">]</span>
|
||||
</span><span id="__span-0-66"><a href="#__codelineno-0-66" id="__codelineno-0-66" name="__codelineno-0-66"></a> <span class="n">writer</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">DictWriter</span><span class="p">(</span><span class="n">csvfile</span><span class="p">,</span> <span class="n">fieldnames</span><span class="o">=</span><span class="n">fieldnames</span><span class="p">)</span>
|
||||
</span><span id="__span-0-67"><a href="#__codelineno-0-67" id="__codelineno-0-67" name="__codelineno-0-67"></a>
|
||||
</span><span id="__span-0-68"><a href="#__codelineno-0-68" id="__codelineno-0-68" name="__codelineno-0-68"></a> <span class="k">if</span> <span class="n">csvfile</span><span class="o">.</span><span class="n">tell</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
</span><span id="__span-0-69"><a href="#__codelineno-0-69" id="__codelineno-0-69" name="__codelineno-0-69"></a> <span class="n">writer</span><span class="o">.</span><span class="n">writeheader</span><span class="p">()</span>
|
||||
</span><span id="__span-0-70"><a href="#__codelineno-0-70" id="__codelineno-0-70" name="__codelineno-0-70"></a>
|
||||
</span><span id="__span-0-71"><a href="#__codelineno-0-71" id="__codelineno-0-71" name="__codelineno-0-71"></a> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchall</span><span class="p">():</span>
|
||||
</span><span id="__span-0-72"><a href="#__codelineno-0-72" id="__codelineno-0-72" name="__codelineno-0-72"></a> <span class="n">decrypted_value</span> <span class="o">=</span> <span class="n">decrypt_password</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s2">"encrypted_value"</span><span class="p">],</span> <span class="n">master_key</span><span class="p">)</span>
|
||||
</span><span id="__span-0-73"><a href="#__codelineno-0-73" id="__codelineno-0-73" name="__codelineno-0-73"></a> <span class="n">writer</span><span class="o">.</span><span class="n">writerow</span><span class="p">({</span>
|
||||
</span><span id="__span-0-74"><a href="#__codelineno-0-74" id="__codelineno-0-74" name="__codelineno-0-74"></a> <span class="s1">'host_key'</span><span class="p">:</span> <span class="n">row</span><span class="p">[</span><span class="s2">"host_key"</span><span class="p">],</span>
|
||||
</span><span id="__span-0-75"><a href="#__codelineno-0-75" id="__codelineno-0-75" name="__codelineno-0-75"></a> <span class="s1">'name'</span><span class="p">:</span> <span class="n">row</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span>
|
||||
</span><span id="__span-0-76"><a href="#__codelineno-0-76" id="__codelineno-0-76" name="__codelineno-0-76"></a> <span class="s1">'value'</span><span class="p">:</span> <span class="n">decrypted_value</span><span class="p">,</span>
|
||||
</span><span id="__span-0-77"><a href="#__codelineno-0-77" id="__codelineno-0-77" name="__codelineno-0-77"></a> <span class="s1">'path'</span><span class="p">:</span> <span class="n">row</span><span class="p">[</span><span class="s2">"path"</span><span class="p">],</span>
|
||||
</span><span id="__span-0-78"><a href="#__codelineno-0-78" id="__codelineno-0-78" name="__codelineno-0-78"></a> <span class="s1">'expires_utc'</span><span class="p">:</span> <span class="n">row</span><span class="p">[</span><span class="s2">"expires_utc"</span><span class="p">],</span>
|
||||
</span><span id="__span-0-79"><a href="#__codelineno-0-79" id="__codelineno-0-79" name="__codelineno-0-79"></a> <span class="s1">'is_secure'</span><span class="p">:</span> <span class="n">row</span><span class="p">[</span><span class="s2">"is_secure"</span><span class="p">],</span>
|
||||
</span><span id="__span-0-80"><a href="#__codelineno-0-80" id="__codelineno-0-80" name="__codelineno-0-80"></a> <span class="s1">'is_httponly'</span><span class="p">:</span> <span class="n">row</span><span class="p">[</span><span class="s2">"is_httponly"</span><span class="p">]</span>
|
||||
</span><span id="__span-0-81"><a href="#__codelineno-0-81" id="__codelineno-0-81" name="__codelineno-0-81"></a> <span class="p">})</span>
|
||||
</span><span id="__span-0-82"><a href="#__codelineno-0-82" id="__codelineno-0-82" name="__codelineno-0-82"></a>
|
||||
</span><span id="__span-0-83"><a href="#__codelineno-0-83" id="__codelineno-0-83" name="__codelineno-0-83"></a><span class="nb">print</span><span class="p">(</span><span class="s2">"Finished CSV"</span><span class="p">)</span>
|
||||
</span></code></pre></div>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<footer class="md-footer">
|
||||
<nav aria-label="Footer" class="md-footer__inner md-grid">
|
||||
<a aria-label="Previous: Settings.cs" class="md-footer__link md-footer__link--prev" href="Settings.html" rel="prev">
|
||||
<a aria-label="Previous: Window.cs" class="md-footer__link md-footer__link--prev" href="Window.html" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"></path></svg>
|
||||
</div>
|
||||
@@ -339,7 +353,7 @@ print("Finished CSV")
|
||||
<span class="md-footer__direction">
|
||||
Previous
|
||||
</span>
|
||||
Settings.cs
|
||||
Window.cs
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
Reference in New Issue
Block a user