Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
fickling — Um decompilador de pickling Python e analisador estático | Kitploit
Ferramentas/GitHubGitHub/trailofbits/fickling
Análise EstáticaAnálise de VulnerabilidadesAnálise de CódigoAnálise de MalwareAnálise de BináriosSegurança da Cadeia de SuprimentosAprendizado de MáquinaSegurança de IA
GitHubtrailofbits/fickling

fickling

Um decompilador de pickling Python e analisador estático

Ver Repositório
6707887há 15 diasRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Fickling

Fickling image

Fickling é um descompilador, analisador estático e reescritor de bytecode para serializações de objetos pickle do Python. Você pode usar o fickling para detectar, analisar, fazer engenharia reversa ou até mesmo criar arquivos pickle maliciosos ou baseados em pickle, incluindo arquivos PyTorch.

O Fickling pode ser usado tanto como biblioteca python quanto como CLI.

  • Instalação
  • Protegendo ambientes de IA/ML
  • Detecção genérica de arquivos maliciosos
  • Uso avançado
    • Rastrear execução de pickle
    • Injeção de código pickle
    • Descompilação de pickle
    • Poliglotas PyTorch
  • Mais informações
  • Contato

Instalação

Fickling foi testado no Python 3.9 até o Python 3.13 e tem muito poucas dependências. Tanto a biblioteca quanto o utilitário de linha de comando podem ser instalados via pip ou uv:

# Using pip
python -m pip install fickling

# Using uv
uv pip install fickling

PyTorch é uma dependência opcional do Fickling. Portanto, para usar os módulos pytorch e polyglot do Fickling, você deve executar:

# Using pip
python -m pip install fickling[torch]

# Using uv
uv pip install fickling[torch]

Protegendo ambientes de IA/ML

O Fickling pode ajudar a proteger bases de código de IA/ML ao escanear automaticamente arquivos pickle contidos em modelos. O Fickling intercepta o módulo pickle e verifica as importações feitas ao carregar um modelo. Ele verifica as importações apenas contra uma lista de permissões de importações de bibliotecas de ML consideradas seguras e bloqueia arquivos que contenham outras importações.

Adicione as seguintes linhas o mais cedo possível, antes de importar torch, numpy ou qualquer outra biblioteca que use pickle:

import fickling

# This sets global hooks on pickle
fickling.hook.activate_safe_ml_environment()

Para remover a proteção:

fickling.hook.deactivate_safe_ml_environment()

É possível que os modelos que você está usando contenham importações que não são permitidas pelo Fickling. Se você ainda quiser carregar o modelo, basta permitir importações adicionais para seu caso de uso específico com o argumento also_allow:

fickling.hook.activate_safe_ml_environment(
    also_allow=[
        "some.import",
        "another.allowed.import",
    ]
)

Importante: Você deve sempre garantir que importações adicionadas manualmente sejam realmente seguras e não possam permitir que atacantes executem código arbitrário. Se você não tiver certeza de como fazer isso, abra uma issue no repositório do Fickling no Github indicando as importações/modelos em questão, e nossa equipe poderá revisá-los e incluí-los na lista de permissões, se possível.

Detecção genérica de arquivos maliciosos

O Fickling pode ser integrado perfeitamente à sua base de código para detectar e interromper o carregamento de arquivos maliciosos em tempo de execução.

Abaixo mostramos as diferentes maneiras de usar o fickling para aplicar verificações de segurança em arquivos pickle. Internamente, ele intercepta a biblioteca pickle para adicionar verificações de segurança, de modo que carregar um arquivo pickle levanta uma exceção UnsafeFileError se conteúdo malicioso for detectado no arquivo.

Opção 1 (recomendada): verificar a segurança de todos os arquivos pickle carregados

# This enforces safety checks every time pickle is used to deserialize
fickling.always_check_safety()

# Attempt to load an unsafe file now raises an exception
with open("file.pkl", "rb") as f:
    try:
        pickle.load(f)
    except fickling.UnsafeFileError:
        print("Unsafe file!")

Opção 2: usar um gerenciador de contexto

with fickling.check_safety():
    # All pickle files loaded within the context manager are checked for safety
    try:
        with open("file.pkl", "rb") as f:
            pickle.load("file.pkl")
    except fickling.UnsafeFileError:
        print("Unsafe file!")

# Files loaded outside of context manager are NOT checked
pickle.load("file.pkl")

Ao sair, o gerenciador de contexto restaura o que estava instalado quando foi iniciado, de modo que um hook já existente permanece em vigor em vez de o pickle ficar sem hook.

Opção 3: verificar e carregar um único arquivo

# Use fickling.load() in place of pickle.load() to check safety and load a single pickle file
try:
    fickling.load("file.pkl")
except fickling.UnsafeFileError as e:
    print("Unsafe file!")

Opção 4: verificar apenas a segurança do arquivo pickle sem carregá-lo

# Perform a safety check on a pickle file without loading it
if not fickling.is_likely_safe("file.pkl"):
    print("Unsafe file!")

Acessando os resultados da análise de segurança

Você pode acessar os detalhes da análise de segurança do fickling a partir da exceção levantada:


>>> try:
...     fickling.load("unsafe.pkl")
... except fickling.UnsafeFileError as e:
...     print(e.info)

{
    "severity": "OVERTLY_MALICIOUS",
    "analysis": "Call to `eval(b'[5, 6, 7, 8]')` is almost certainly evidence of a malicious pickle file. Variable `_var0` is assigned value `eval(b'[5, 6, 7, 8]')` but unused afterward; this is suspicious and indicative of a malicious pickle file",
    "detailed_results": {
        "AnalysisResult": {
            "OvertlyBadEval": "eval(b'[5, 6, 7, 8]')",
            "UnusedVariables": [
                "_var0",
                "eval(b'[5, 6, 7, 8]')"
            ]
        }
    }
}

Se você estiver usando outra linguagem além de Python, ainda pode usar o CLI do fickling para verificar a segurança de arquivos pickle:

fickling --check-safety -p pickled.data

Uso avançado

Rastrear execução de pickle

O CLI do Fickling permite rastrear com segurança a execução da máquina virtual Pickle sem executar nenhum código malicioso:

fickling --trace file.pkl

Injeção de código pickle

O Fickling permite injetar código arbitrário em um arquivo pickle que será executado toda vez que o arquivo for carregado

fickling --inject "print('Malicious')" file.pkl > malicious.pkl

Descompilação de pickle

O Fickling pode ser usado para descompilar um arquivo pickle para análises adicionais

>>> import ast, pickle
>>> from fickling.fickle import Pickled
>>> fickled_object = Pickled.load(pickle.dumps([1, 2, 3, 4]))
>>> print(ast.dump(fickled_object.ast, indent=4))
Module(
    body=[
        Assign(
            targets=[
                Name(id='result', ctx=Store())],
            value=List(
                elts=[
                    Constant(value=1),
                    Constant(value=2),
                    Constant(value=3),
                    Constant(value=4)],
                ctx=Load()))],
    type_ignores=[])

Poliglotas PyTorch

O PyTorch contém vários formatos de arquivo com os quais é possível criar arquivos poliglotas, que são arquivos que podem ser interpretados validamente como mais de um formato de arquivo. O Fickling suporta identificar, inspecionar e criar poliglotas com os seguintes formatos de arquivo do PyTorch:

Baixar ferramenta