
Kit de herramientas deepfake en tiempo real para pruebas de penetración de sistemas de verificación de identidad y videoconferencias. Admite intercambio de rostros, animación de imágenes e inyección de cámara virtual para operaciones de equipo rojo.
dot (también conocido como Deepfake Offensive Toolkit) permite crear deepfakes en tiempo real y controlables, listos para ser inyectados en cámaras virtuales. dot fue creado para realizar pruebas de penetración contra sistemas como verificación de identidad y videoconferencias, para uso de analistas de seguridad, miembros de equipos Red e investigadores en biometría.
Si quieres saber más sobre cómo se usa dot en pruebas de penetración con deepfakes en la industria, lee estos artículos de The Verge y Biometric Update.
dot se desarrolla con fines de investigación y demostración. Como usuario final, tienes la responsabilidad de cumplir con todas las leyes aplicables al usar este programa. Los autores y desarrolladores colaboradores no asumen ninguna responsabilidad ni se hacen responsables de cualquier uso indebido o daño causado por el uso de este programa.
En pocas palabras, dot funciona así:
flowchart LR;
A(tu feed de cámara web) --> B(conjunto de deepfakes en tiempo real);
B(conjunto de deepfakes en tiempo real) --> C(inyección en cámara virtual);Todos los deepfakes compatibles con dot no requieren entrenamiento adicional. Se pueden usar en tiempo real, sobre la marcha, sobre una foto que se convierte en el objetivo de la suplantación facial. Métodos compatibles:
224 y 512
256 y 512Descarga y ejecuta el ejecutable de dot para tu sistema operativo:
Windows (probado en Windows 10 y 11):
dot.zip desde aquí, descomprímelo y luego ejecuta dot.exeUbuntu:
Mac (probado en Apple M2 Sonoma 14.0):
dot-m2.zip desde aquí y descomprímeloxattr -cr dot-executable.app para eliminar cualquier atributo extendidoShow Package Contentsdot-executable desde la carpeta Contents/MacOSEjemplo de uso:
source.target. En la mayoría de los casos, 0 es el ID correcto.config_file. Selecciona una configuración predeterminada de la lista desplegable o usa un archivo personalizado.use_gpu para usar la GPU.RUN para iniciar el deepfake.Para más información sobre cada campo, haz clic en el menú Help/Usage.
Mira el siguiente video de demostración para entender mejor la interfaz:
Linux
sudo apt install ffmpeg cmake
MacOS
brew install ffmpeg cmake
Windows
Las instrucciones asumen que tienes Miniconda instalado en tu máquina. Si no lo tienes, puedes consultar este enlace para las instrucciones de instalación.
conda env create -f envs/environment-gpu.yaml
conda activate dot
Instala las dependencias torch y torchvision según la versión de CUDA instalada en tu máquina:
Instala CUDA 11.8 desde enlace
Instala cudatoolkit desde conda: conda install cudatoolkit=<cuda_version_no> (reemplaza <cuda_version_no> con la versión de tu máquina)
Instala las dependencias torch y 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, donde <cuda_tag> es la etiqueta CUDA definida por PyTorch. Por ejemplo, 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 también se puede usar.
Para comprobar que torch y torchvision están instalados correctamente, ejecuta el siguiente comando: python -c "import torch; print(torch.cuda.is_available())". Si la salida es True, las dependencias están instaladas con soporte CUDA.
conda env create -f envs/environment-apple-m2.yaml
conda activate dot
Para comprobar que torch y torchvision están instalados correctamente, ejecuta el siguiente comando: python -c "import torch; print(torch.backends.mps.is_available())". Si la salida es True, las dependencias están instaladas con soporte del framework de programación Metal.
conda env create -f envs/environment-cpu.yaml
conda activate dot
pip install -e .
Ejecuta dot --help para obtener una lista completa de opciones disponibles.
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 habilitar la superresolución facial, usa la bandera --gpen_type gpen_256 o --gpen_type gpen_512. Para usar dot en CPU (no recomendado), no pases la bandera --use_gpu.
Descargo de responsabilidad: Usamos la técnica
SimSwappara la siguiente demostración.
Ejecutar dot mediante cualquiera de los métodos anteriores genera un deepfake en tiempo real sobre el feed de video de entrada utilizando imágenes de origen de la carpeta data/.
Al ejecutar dot, aparece una lista de opciones de control disponibles en la ventana de terminal, como se muestra arriba. Puedes navegar y seleccionar diferentes imágenes de origen presionando la tecla de control asociada.
Mira el siguiente video de demostración para entender mejor las opciones de control:
Construye el contenedor
docker-compose up --build -d
Accede al contenedor
docker-compose exec dot "/bin/bash"
Construye el contenedor
docker build -t dot -f Dockerfile .
Ejecuta el contenedor
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
Sigue las instrucciones aquí bajo Windows para configurar la cámara web con docker.
Construye el contenedor
docker build -t dot -f Dockerfile .
Ejecuta el contenedor
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
Sigue las instrucciones aquí para configurar la cámara web con docker.
Construye el contenedor
docker build -t dot -f Dockerfile .
Ejecuta el contenedor
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
Las instrucciones varían según tu sistema operativo.
Instala OBS Studio.
Ejecuta OBS Studio.
En la sección Sources, presiona el botón Add (signo "+"),
selecciona Windows Capture y presiona OK. En la ventana que aparece, elige "[python.exe]: fomm" en el menú desplegable Window y presiona OK. Luego selecciona Edit -> Transform -> Fit to screen.
En OBS Studio, ve a Tools -> VirtualCam. Marca AutoStart,
establece Buffered Frames en 0 y presiona Start.
Ahora la cámara OBS-Camera debería estar disponible en Zoom
(u otro software de videoconferencia).
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
Abre OBS Studio y verifica si existe tools --> v4l2sink.
Si no es así, sigue estas instrucciones:
mkdir -p ~/.config/obs-studio/plugins/v4l2sink/bin/64bit/
ln -s /usr/lib/obs-plugins/v4l2sink.so ~/.config/obs-studio/plugins/v4l2sink/bin/64bit/
Usa la cámara virtual con OBS Studio:
OBS Studiotools --> v4l2sink/dev/video2 y YUV420startOBS Cam--use_cam para habilitar el feed de la cámaraSi estás realizando una prueba contra una aplicación móvil, las cámaras virtuales son mucho más difíciles de inyectar. Una alternativa es usar emuladores móviles y seguir recurriendo a la inyección de cámara virtual.
Ejecuta dot. Consulta ejecutar dot para más información.
Ejecuta OBS Studio y configura la cámara virtual. Consulta inyección-de-cámara-virtual para más información.
Descarga e instala Genymotion.
Abre Genymotion y configura el emulador de Android.
Configura dot con el emulador de Android:
camera y selecciona OBS-Camera como cámara frontal y trasera. Debería aparecer una vista previa de la ventana de dot.
En caso de que no haya vista previa, reinicia OBS y el emulador y vuelve a intentarlo.
Si eso no funciona, usa un software de cámara virtual diferente como e2eSoft VCam o ManyCam.dot debería ser ahora la cámara del teléfono del emulador.Probado en un AMD Ryzen 5 2600 Six-Core Processor con una NVIDIA GeForce RTX 2070
Simswap: FPS 13.0
Simswap + gpen 256: FPS 7.0
SimswapHQ: FPS 11.0
FOMM: FPS 31.0
Probado en Macbook Air M2 2022 16GB
Simswap: FPS 3.2
Simswap + gpen 256: FPS 1.8
SimswapHQ: FPS 2.7
FOMM: FPS 2.0
Este no es un producto comercial de Sensity, y se distribuye libremente sin garantías
El software se distribuye bajo BSD 3-Clause. dot utiliza varias bibliotecas de código abierto. Si usas dot, asegúrate de aceptar también sus licencias. En particular, este código base está construido sobre los siguientes proyectos de investigación:
Si tienes ideas para mejorar dot, no dudes en abrir Issues y PRs relevantes. Por favor, lee CONTRIBUTING.md antes de contribuir al repositorio.
dot en archivos de imagen y video pregrabadosdot es muy lento y no puedo ejecutarlo en tiempo realAsegúrate de que lo estás ejecutando en una tarjeta GPU usando la bandera --use_gpu. No se recomienda la CPU.
Si aún lo encuentras demasiado lento, puede que lo estés ejecutando en un modelo de GPU antiguo, con menos de 8GB de RAM.
dot solo funciona con un feed de cámara web o también con un video pregrabado?Puedes usar dot en un archivo de video pregrabado mediante estos scripts o probarlo directamente en Colab.