
Kit de deepfake em tempo real para testes de penetração em sistemas de verificação de identidade e videoconferência. Suporta troca de rosto, animação de imagem e injeção de câmera virtual para operações de red team.
dot (também conhecido como Deepfake Offensive Toolkit) torna deepfakes em tempo real e controláveis prontos para injeção em câmeras virtuais. dot foi criado para realizar testes de penetração contra, por exemplo, sistemas de verificação de identidade e videoconferência, para uso por analistas de segurança, membros de Red Team e pesquisadores biométricos.
Se você quiser saber mais sobre como o dot é usado para testes de penetração com deepfakes na indústria, leia estes artigos do The Verge e Biometric Update.
dot é desenvolvido para fins de pesquisa e demonstração. Como usuário final, você tem a responsabilidade de obedecer a todas as leis aplicáveis ao usar este programa. Os autores e desenvolvedores contribuintes não assumem nenhuma responsabilidade e não se responsabilizam por qualquer uso indevido ou dano causado pelo uso deste programa.
Em poucas palavras, o dot funciona assim:
flowchart LR;
A(sua transmissão da webcam) --> B(conjunto de deepfakes em tempo real);
B(conjunto de deepfakes em tempo real) --> C(injeção em câmera virtual);
Todos os deepfakes suportados pelo dot não requerem treinamento adicional. Eles podem ser usados em tempo real, na hora, em uma foto que se torna o alvo da personificação facial. Métodos suportados:
224 e 512
256 e 512Baixe e execute o executável do dot para seu sistema operacional:
Windows (Testado no Windows 10 e 11):
dot.zip de aqui, descompacte-o e então execute dot.exeUbuntu:
Mac (Testado no Apple M2 Sonoma 14.0):
dot-m2.zip de aqui e descompacte-oxattr -cr dot-executable.app para remover quaisquer atributos estendidosMostrar Conteúdo do Pacotedot-executable a partir da pasta Contents/MacOSExemplo de uso:
source.target. Na maioria dos casos, 0 é o ID correto da câmera.config_file. Selecione uma configuração padrão na lista suspensa ou use um arquivo personalizado.use_gpu para usar a GPU.RUN para iniciar o deepfake.Para mais informações sobre cada campo, clique no menu Help/Usage.
Assista ao vídeo de demonstração a seguir para entender melhor a interface:
Linux
sudo apt install ffmpeg cmake
MacOS
brew install ffmpeg cmake
Windows
As instruções assumem que você tenha o Miniconda instalado na sua máquina. Caso não tenha, consulte este link para instruções de instalação.
conda env create -f envs/environment-gpu.yaml
conda activate dot
Instale as dependências torch e torchvision com base na versão do CUDA instalada na sua máquina:
Instale o CUDA 11.8 do link
Instale o cudatoolkit pelo conda: conda install cudatoolkit=<cuda_version_no> (substitua <cuda_version_no> pela versão na sua máquina)
Instale as dependências torch e torchvision: pip install torch==2.0.1+<cuda_tag> torchvision==0.15.2+<cuda_tag> torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118, onde <cuda_tag> é a tag CUDA definida pelo PyTorch. Por exemplo, pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118 para CUDA 11.8.
Nota: torch1.9.0+cu111 também pode ser usado.
Para verificar se torch e torchvision foram instalados corretamente, execute o seguinte comando: python -c "import torch; print(torch.cuda.is_available())". Se a saída for True, as dependências estão instaladas com suporte a CUDA.
conda env create -f envs/environment-apple-m2.yaml
conda activate dot
Para verificar se torch e torchvision foram instalados corretamente, execute o seguinte comando: python -c "import torch; print(torch.backends.mps.is_available())". Se a saída for True, as dependências estão instaladas com suporte ao framework de programação Metal.
conda env create -f envs/environment-cpu.yaml
conda activate dot
pip install -e .
Execute dot --help para obter uma lista completa das opções disponíveis.
Simswap
dot -c ./configs/simswap.yaml --target 0 --source "./data" --use_gpu
SimSwapHQ
dot -c ./configs/simswaphq.yaml --target 0 --source "./data" --use_gpu
FOMM
dot -c ./configs/fomm.yaml --target 0 --source "./data" --use_gpu
FaceSwap CV2
dot -c ./configs/faceswap_cv2.yaml --target 0 --source "./data" --use_gpu
Nota: Para ativar a super-resolução facial, use a flag --gpen_type gpen_256 ou --gpen_type gpen_512. Para usar o dot na CPU (não recomendado), não passe a flag --use_gpu.
Aviso: Usamos a técnica
SimSwappara a demonstração a seguir
Executar o dot por qualquer um dos métodos acima gera Deepfake em tempo real no fluxo de vídeo de entrada usando imagens de origem da pasta data/.
Ao executar o dot, uma lista de opções de controle disponíveis aparece na janela do terminal, conforme mostrado acima. Você pode alternar e selecionar diferentes imagens de origem pressionando a tecla de controle associada.
Assista ao vídeo de demonstração a seguir para entender melhor as opções de controle:
Construir o container
docker-compose up --build -d
Acessar o container
docker-compose exec dot "/bin/bash"
Construir o container
docker build -t dot -f Dockerfile .
Executar o container
xhost +
docker run -ti --gpus all \
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility \
-e NVIDIA_VISIBLE_DEVICES=all \
-e PYTHONUNBUFFERED=1 \
-e DISPLAY \
-v .:/dot \
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
--runtime nvidia \
--entrypoint /bin/bash \
-p 8080:8080 \
--device=/dev/video0:/dev/video0 \
dot
Siga as instruções aqui na seção Windows para configurar a webcam com o docker.
Construir o container
docker build -t dot -f Dockerfile .
Executar o container
docker run -ti --gpus all \
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility \
-e NVIDIA_VISIBLE_DEVICES=all \
-e PYTHONUNBUFFERED=1 \
-e DISPLAY=192.168.99.1:0 \
-v .:/dot \
--runtime nvidia \
--entrypoint /bin/bash \
-p 8080:8080 \
--device=/dev/video0:/dev/video0 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
dot
Siga as instruções aqui para configurar a webcam com o docker.
Construir o container
docker build -t dot -f Dockerfile .
Executar o container
docker run -ti --gpus all \
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility \
-e NVIDIA_VISIBLE_DEVICES=all \
-e PYTHONUNBUFFERED=1 \
-e DISPLAY=$IP:0 \
-v .:/dot \
-v /tmp/.X11-unix:/tmp/.X11-unix \
--runtime nvidia \
--entrypoint /bin/bash \
-p 8080:8080 \
--device=/dev/video0:/dev/video0 \
dot
As instruções variam de acordo com o seu sistema operacional.
Instale o OBS Studio.
Execute o OBS Studio.
Na seção Sources, pressione o botão Adicionar (sinal "+"),
selecione Windows Capture e pressione OK. Na janela que aparecer, escolha "[python.exe]: fomm" no menu suspenso Window e pressione OK. Em seguida, selecione Edit -> Transform -> Fit to screen.
No OBS Studio, vá em Tools -> VirtualCam. Marque AutoStart,
defina Buffered Frames para 0 e pressione Start.
Agora a câmera OBS-Camera deve estar disponível no Zoom
(ou em outro software de videoconferência).
sudo apt update
sudo apt install v4l-utils v4l2loopback-dkms v4l2loopback-utils
sudo modprobe v4l2loopback devices=1 card_label="OBS Cam" exclusive_caps=1
v4l2-ctl --list-devices
sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt install obs-studio
Abra o OBS Studio e verifique se tools --> v4l2sink existe.
Se não existir, siga estas instruções:
mkdir -p ~/.config/obs-studio/plugins/v4l2sink/bin/64bit/
ln -s /usr/lib/obs-plugins/v4l2sink.so ~/.config/obs-studio/plugins/v4l2sink/bin/64bit/
Use a câmera virtual com o OBS Studio:
OBS Studiotools --> v4l2sink/dev/video2 e YUV420startOBS Cam--use_cam para ativar o fluxo da câmeraSe você estiver realizando um teste contra um aplicativo móvel, as câmeras virtuais são muito mais difíceis de injetar. Uma alternativa é usar emuladores móveis e ainda recorrer à injeção de câmera virtual.
Execute o dot. Consulte executando o dot para mais informações.
Execute o OBS Studio e configure a câmera virtual. Consulte injeção em câmera virtual para mais informações.
Baixe e instale o Genymotion.
Abra o Genymotion e configure o emulador Android.
Configure o dot com o emulador Android:
câmera e selecione OBS-Camera como câmera frontal e traseira. Uma prévia da janela do dot deve aparecer.
Caso não haja prévia, reinicie o OBS e o emulador e tente novamente.
Se isso não funcionar, use um software de câmera virtual diferente, como e2eSoft VCam ou ManyCam.dot deve ser agora a câmera do telefone do emulador.Testado em um AMD Ryzen 5 2600 Six-Core Processor com uma NVIDIA GeForce RTX 2070
Simswap: FPS 13.0
Simswap + gpen 256: FPS 7.0
SimswapHQ: FPS 11.0
FOMM: FPS 31.0
Testado no Macbook Air M2 2022 16GB
Simswap: FPS 3.2
Simswap + gpen 256: FPS 1.8
SimswapHQ: FPS 2.7
FOMM: FPS 2.0
Este não é um produto comercial da Sensity, e é distribuído gratuitamente sem garantias
O software é distribuído sob a BSD 3-Clause. O dot utiliza diversas bibliotecas de código aberto. Se você usar o dot, certifique-se de concordar com suas licenças também. Em particular, este código é construído sobre os seguintes projetos de pesquisa:
Se você tem ideias para melhorar o dot, sinta-se à vontade para abrir Issues e PRs relevantes. Por favor, leia o CONTRIBUTING.md antes de contribuir com o repositório.
dot em arquivos de imagem e vídeo pré-gravadosdot é muito lento e não consigo executá-lo em tempo realCertifique-se de que está executando em uma placa GPU usando a flag --use_gpu. CPU não é recomendado.
Se ainda assim achar muito lento, pode ser porque está executando em um modelo de GPU antigo, com menos de 8GB de RAM.
dot funciona apenas com o feed da webcam ou também com um vídeo pré-gravado?Você pode usar o dot em um arquivo de vídeo pré-gravado por meio destes scripts ou testá-lo diretamente no Colab.