# Windows

### Conceitos Importantes

* As `DLL` são carregadas em tempo de execução, diferentemente das `Lib`, que são compiladas juntos com o programa
* Para ver o que está inicializando junto com o Windows pelo prompt de comando, digite:

  ```bash
  reg query hklm\software\microsoft\windows\currentversion\run /s
  reg query hklm\software\microsoft\windows\currentversion\runonce /s
  ```

  E para examinar a chave de serviços, caminhos de DLL e serviços anormais/suspeitos, digite:

  ```
  reg query HKLM\system\currentcontrolset\services /s
  ```
* Programas compactados (packed) geralmente precisam chamar as funções `Load Library` e `GetProcAddress`, da `kernel.dll`.
* Todas as Sessões ocupam sempre `8 bits` mesmo que não use todas. As principais sessões do PE File são:

| `SESSÃO PE` | DESCRIÇÃO                                                                                                                                                                                                                                                              |
| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `.text`     | É a única sessão que contém instruções (códigos) que serão executados                                                                                                                                                                                                  |
| `.rdata`    | Contém informações de "import" e "export". Essa sessão também pode armazenar dados somente-leitura que são utilizadas pelo programa                                                                                                                                    |
| `.data`     | Contém os dados globais do programa, para conseguir acessar de qualquer lugar do programa. Dados locais não são armazenados aqui                                                                                                                                       |
| `.rsrc`     | Inclui recursos utilizados pelo executável que não são considerados parte do executável, como ícones, imagens, menus e strings. Strings podem ser armazedas em `.rsrc` ou no programa principal, mas geralmente são armazenadas nessa sessão, para suporte multilingue |
| `.idata`    | As vezes presente e guarda informações de `importações` de funções. Caso essa sessão não exista, as `importações` estarão em `.rdata`                                                                                                                                  |
| `.edata`    | As vezes presente e guarda informações de `exportação` de funções. Caso essa sessão não exista, as `exportação` estarão em `.rdata`                                                                                                                                    |
| `.pdata`    | Presente apenas em executáveis x64 e armazena informações de manipulação de execução                                                                                                                                                                                   |
| `.reloc`    | Contém informações de realocação dos arquivos de biblioteca                                                                                                                                                                                                            |

### DDL's

| DLL                        | DESCRIÇÃO                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Kernel32.dll`             | É uma DLL muito comum de ser ver utilizando, pois contém funcionalidades do core, tais como acesso e manipulação de memória, arquivos e hardware                                                                                                                                                                                                                                                                                                             |
| `Advapi32.dll`             | Prover acesso para aos componentes avançados do Core do Windows, como o Gerenciamento de Serviços e o Registro                                                                                                                                                                                                                                                                                                                                               |
| `Gdi32.dll`                | Funções para mostrar e manipular gráficos (interface para o Kernel do Windows). Executáveis geralmente não o importam diretamente, apesar de sempre ser importada indiretamente através da Kernel32.dll. Se um executável importar esse arquivo, isso significa que o autor pretendia usar a funcionalidade normalmente não disponível para programas do Windows. Algumas tarefas, como ocultar funcionalidade ou manipular processos, usarão essa interface |
| `WSock32.dll a Ws2_32.dll` | Estes são DLL's de rede. Um programa que acessa qualquer um desses provavelmente se conecta a uma rede ou realiza tarefas relacionadas à rede                                                                                                                                                                                                                                                                                                                |
| `Wininet.dll`              | Funções de rede de auto nível que implementam protocolos como FTP, HTTP e NTP                                                                                                                                                                                                                                                                                                                                                                                |
| `Comdlg32`                 | Responsável por criar caixas de diálogo                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `User32.dll`               | Contém todos os componentes para interface de usuário, como botões, scroll bars, ações do usuário, etc                                                                                                                                                                                                                                                                                                                                                       |

&#x20;**OBS.:** Quando `SetWindowsHookEx` é chamada da DLL `user32.dll`, há uma grande probabilidade de ser um spyware / keylogger.

{% hint style="info" %}
**DICA:**\
A pasta `System32` é o “diretório do sistema” padrão do Windows a muito tempo. Independentemente se o Windows é 32 ou 64 bit, quando algum programa pergunta pra ele qual é o “diretório do sistema”, a resposta é `C:\Windows\System32`. Nos Windows 64 bits há uma pasta chamada `SysWOW64`, que é utilizada para programas de 32 bits rodarem normalmente no Windows 64.\
Em Windows 64 bit, as DLL’s `32 vão na pasta SysWOW64` e as DLL’s `64 vão na pasta System32`. Parece um pouco confuso, mas é isso mesmo!
{% endhint %}
