> For the complete documentation index, see [llms.txt](https://mysther.gitbook.io/knowledge-base/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mysther.gitbook.io/knowledge-base/forense-digital/esteganografia.md).

# Esteganografia

### **Conceitos Básicos Sobre Imagens**

* Uma imagem é composta de X linhas e Y colunas;
* O ponto das coordenadas `[a, b]` com 0⩽a \<X e 0⩽b \<Y, é chamado de Pixel;
* `Pixel` representa o menor elemento endereçável de uma imagem;
* Cada Pixel é associado a uma cor, geralmente composta em 3 cores principais (vermelho, verde e azul), que chamamos de RGB (Red, Green e Blue). As intensidades dessas cores, podem variar de `0` a `255`, sendo o `Branco` representado por `255,2555,255` e o `Preto` por `0,0,0`.
* Cada Pìxel, ocupa `3 bytes` de memória, 1 para cada componente principal (daí o valor máximo de 255)
* Um `byte` consiste em `8 bits`, representando um número binário, como `1010 0101`. O valor mais alto que um byte pode receber é `1111 1111`, que equivale a `255` em decimal

###

### Magic Numbers

Os `Magic Numbers` (Números Mágicos) são os 8 primeiros bytes do arquivos (como um cabeçalho), que define o tipo do arquivo.\
O Magic Number de um arquivo `ELF` é `0x7F 0x45 0x4C 0x46`, que pode ser convertido no Python com o seguinte comando:

```python
python -c 'print "\x7F\x45\x4C\x46"' > <output>
```

Para gerar um arquivo GIF, podemos utilizar o comando:

```bash
echo 'GIF8;sdcsd' > <output.gif>
```

###

### Chunk (Arquivos PNG)

São esses alguns chunks críticos:\
`IHDR` = Image Header. Este é o primeiro pedaço\
`PLTE` = Palette Table. Este é um pedaço opcional\
`IDAT` = Chunk de dados da imagem. As informações de pixels está contida aqui\
`IEND` = Trailer. Marca o final do fluxo de dados PNG

**DICA:** Um método comum de ocultar flags, é colocar mensagens após o bloco `IEND`. Os dados adicionados após este bloco não mudarão nada além do tamanho do arquivo

Podemos criar um arquivo com o cabeçalho PNG utilizando o comando:

```bash
echo '89 50 4E 47 0D 0A 1A 0A' | xxd -p -r > <image.png>
```

###

### LSB

```
gem install zsteg
zsteg -E b1,rgb,lsb,xy <file.png> | xxd | less
```

###

### Hexdump

```bash
hexdump -C -n 8 <file.png>
```

###

### Strings

Pegando todas as strings de uma imagem

```bash
strings -n 7 -t x <file.jpg>
```

| PARÂMETRO | DESCRIÇÃO                                 |
| --------- | ----------------------------------------- |
| `-n`      | Quantidade mínima de caracteres por linha |
| `-t`      | Posição da string retornada               |

Encodando strings&#x20;

```
strings -e l <file>
```

### Exiftool

```bash
# Limpando todos os metadados
exiftool -all=* <img.png>

# Inserindo metadados no comentário de uma imagem (útil para esconder informações ou fazer injections)
exiftool -Comment="<comentario>" <img.png>
```

Também podemos uma thumb diferente da imagem que vimos quando abrimos em seu tamanho real. Então pdoe ser útil fazer da imagem thumb, uma imagem maior.

```
exiftool -b -Thumbnailimage <image> > <new_image>
```

### StegSolve

Ferramenta GUI desenvolvida em JAVA com diversos recurso para esteganografia em imagens

### BinWalk

Removendo arquivos ocultos incorporados em um arquivo (trabalha com outros tipos de arquivo). Assim que extração for concluída, será criado um diretório chamado `_<filename>`.

```bash
binwalk -Me <file.jpg>
```

###

### PngCheck

Procura por partes quebradas opcionais/corretas. Isso é útil se a imagem parecer corrompida

```bash
# -v = Verbose
# t / 7 = Para exibir pedaços de textos
# p = Exibe conteúdo de mais pedaços adicionais 
# f = Força a continuação mesmo após retornar alguns erros
pngcheck -vtp7f <file.png>
```

| PARÂMETRO | DESCRIÇÃO                                            |
| --------- | ---------------------------------------------------- |
| `-v`      | Verbose                                              |
| `t / 7`   | Para exibir pedaços de textos                        |
| `p`       | Exibe conteúdo de mais pedaços adicionais            |
| `f`       | Força a continuação mesmo após retornar alguns erros |

###

### Steghide

```bash
# Mostra informações do arquivo
steghide info <file>

# Caso o arquivo de imagem peça uma senha para mostrar arquivos que estão embutidos (ocultos)
steghide extract -sf <file>
steghide extract -sf <file> -p n30
```

### zbarimg

Realiza scan e decode de código de barras e QR Code.

```
zbarimg <qrcode.png>
```

### Stegbrute

```
# Python2
python stegbrute.py --image <image.jpg> --output <output.txt> --wordlist <wordlist.txt>

# Python3
python3 stegbrute.py --image <image.jpg> --output <output.txt> --wordlist <wordlist.txt>

```

####

### steg\_brute

```
python steg_brute.py -b -d <wordlist.txt> -f <file.wav> > <output.txt>
```

### Change\_Pallet.py

Gerando várias imagens alterando sua paleta de cores

```bash
for i in {0..255}; do ./change_palette.py <file.png> "single-color-${i}.png" "${i}"; done
```

###

### Zsteg

Extraindo dados ocultos (utilize somente em imagens PNG e BMP)

```
zsteg <file>
```

**OBS:** Para instalar, basta baixar e executar o comando `sudo gem install zsteg`.

###

### Steganography

```bash
# Inserindo arquivo de texto em um arquivo de áudio
stegolsb wavsteg -h -i <file.wav> -s <arquivo_que_sera_ocultado.txt> -o <output_file.wav> -n 1

# Extraindo arquivo de texto de um arquivo de áudio
stegolsb wavsteg -r -i <file.wav> -o <output_result.txt> -n 1 -b 1000
```

###

### Exploração de Planos de Cores e Bits

As imagens podem ser ocultadas dentro dos planos de cores/bits. Na seção de sites (no fim da desta página) temos o site `georgeom`, que nos permites alterar os Bits/Cores

####

#### Sites

```bash
# Realiza diversos tipos de conversões e quebra de ofuscações de mensagens
https://dcode.fr

# Explicação sobre recontrução de QR Code (Broken QRCode)
https://www.datagenetics.com/blog/november12013/index.html

# Converte QR Code em Text
https://zxing.org/w/decode.jspx

# Extrai metadados de imagens
https://georgeom.net/StegOnline/upload
https://incoherency.co.uk/image-steganography/#unhide
https://29a.ch/photo-forensics/#forensic-magnifier
http://exif.regex.info/exif.cgi

# Tutorial em Português do BinWalk
https://brunoizidorio.com.br/forense-analisando-arquivos-com-binwalk/ 

# Tutorial sobre Stego
https://media.blackhat.com/bh-ad-11/Ortiz/bh-ad-11-Ortiz-Steganography-Slides.pdf

# Tutorial a sobre estrutura do PNG
http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html

# Magic Numbers
https://blog.netspi.com/magic-bytes-identifying-common-file-formats-at-a-glance/

# Headers de arquivos e seus respectivos tipos
https://zenhax.com/viewtopic.php?t=27/

# Extrai de dados de imagens com Piet (monte de quadrados coloridos)
https://www.bertnase.de/npiet/npiet-execute.php

# Colours Palette
https://www.w3.org/TR/PNG-Chunks.html

# Chuks
https://www.w3.org/TR/PNG/#5Chunk-layout

# Bandeiras (útil para CTF)
https://jrgraphix.net/r/Unicode/2700-27BF

# Converte texto em áudio (MP3 ou WAV)
https://www.text2speech.org/
```
