> For the complete documentation index, see [llms.txt](https://sansong.gitbook.io/cyber/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sansong.gitbook.io/cyber/rev/analyse-de-malware/analyse-statique.md).

# Analyse statique

Les liens sont orange

## Antivirus scanning

Passer le malware dans plusieurs antivirus

* [<mark style="color:orange;">**VirusTotal**</mark>](http://www.virustotal.com) fait scanner le fichier par plusieurs antivirus et donne un rapport avec le nombre  d'antivirus qui l'ont classé comme un malware, son nom et plus d'infos si possible

## Hashing

Générer un hash du fichier et le chercher sur internet (MD5, SHA-1 , SHA-256 sont les plus utilisés)

**Windows:**

```sh
certutil -hashfile <filename> MD5/SHA1...
```

**Linux:**

```
# md5
md5sum <filename>

# sha1
sha1sum <filename>

# sha1256
sha256sum <filename>
```

**Avec interface graphique:**

* [<mark style="color:orange;">WinMD5</mark>](https://www.winmd5.com/)
* [<mark style="color:orange;">CyberChef</mark>](https://gchq.github.io/CyberChef/)

## Strings

Jeter un œil aux strings du binaire et chercher des choses intéressantes (noms de fonctions de l'API Windows, messages, strings encodés…)

**Linux:**

```
strings <filename>
```

* &#x20;[<mark style="color:orange;">CyberChef</mark>](https://gchq.github.io/CyberChef/) (en ligne)
* &#x20;[<mark style="color:orange;">IDA</mark>](https://hex-rays.com/)
* [<mark style="color:orange;">Ghidra</mark>](https://ghidra-sre.org/)

> Très peu de strings -> sûrement <mark style="color:red;">packed/obfusqué</mark>

## Infos sur le binaire

Déterminer le type d'un fichier, des infos sur le compilateur, linker, packer, etc.

{% embed url="<https://github.com/horsicq/Detect-It-Easy>" %}

## Malwares obfusqués

{% hint style="success" %}
Certains malwares utilisent des scripts PowerShell obfusqués. Voir [PowerShell](/cyber/rev/analyse-de-malware/powershell.md).
{% endhint %}

> **Obfuscation/packing:** utilisé pour rendre les binaires plus durs à analyser

Un fichier packé est compressé. A l'exécution, un wrapper le décompresse.

<figure><img src="https://1813806532-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZRRTPIEA4wb6exZozwS0%2Fuploads%2FWqUVEeTfVnTvQzeJ2ZRY%2Fpacking.png?alt=media&amp;token=e57cec3c-8c3d-4186-8a4e-e03d9dce5bb2" alt="" width="357"><figcaption><p>Schéma issu de Practical Malware Analysis - Basic static analysis</p></figcaption></figure>

### Trouver le packer utilisé

Trouver quel packer a été utilisé peut faciliter l'analyse.

* [<mark style="color:orange;">PEid</mark>](https://www.aldeid.com/wiki/PEiD)

{% hint style="danger" %}
&#x20;Certains plugins de PEid exécutent le malware sans avertissement

Utiliser une version à jour (buffer overflow dans la version 0.92)
{% endhint %}

**Unpack un binaire packé avec** [<mark style="color:orange;">**upx**</mark>](https://upx.github.io/)**:**

```
upx -d packedProgram.exe
```

## 4. Analyse des DLL

> [<mark style="color:orange;">Linking statique & dynamique</mark>](/cyber/rev/prologue.md#librairies-et-linking)

* Regarder les librairies et fonctions appelées pour avoir une idée de ce que fait le programme.&#x20;

L'entête PE contient des infos sur les librairies/fonctions qui seront chargées par le programme.

{% hint style="danger" %}
Le dynamic linking est populaire pour les malwares car certaines fonctions comme *LoadLibrary* et *GetProcAddress* permettent au programme d'importer à l'exécution des fonctions qui ne sont pas listées dans l'entête PE <mark style="color:red;">-> impossible de savoir statiquement quelles fonctions sont liées au programme.</mark>
{% endhint %}

* [<mark style="color:orange;">Dependency Walker:</mark>](https://www.dependencywalker.com/) check les DLL (librairies et leurs fonctions importées dynamiquement)

Un exécutable peut importer une fonction avec son nom ou son <mark style="color:red;">ordinal</mark> <mark style="color:red;">(identifiant).</mark> Quand un malware importe une fonction comme ça -> regarder l'ordinal avec <mark style="color:red;">Dependency Walker</mark>.

<figure><img src="https://1813806532-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZRRTPIEA4wb6exZozwS0%2Fuploads%2Fc9ufjc1iDhXByqr4y0Ms%2Fordinal%20dependency%20walker.png?alt=media&amp;token=dbe1138a-26ad-4952-94c1-f0406387f481" alt="" width="375"><figcaption><p>Ordinal des fonctions (zone 3 et 4)</p></figcaption></figure>

## Format PE (Portable Executable)

> [<mark style="color:orange;">**Portable\_Executable\_32\_bit\_Structure**</mark>](https://upload.wikimedia.org/wikipedia/commons/1/1b/Portable_Executable_32_bit_Structure_in_SVG_fixed.svg)

L'entête PE (PE header) contient plein d'infos importantes.

**Outils**

* PEview
* PEBrowse Professional
* PE Explorer

[<mark style="color:orange;">**Sections**</mark>](https://learn.microsoft.com/fr-fr/windows/win32/debug/pe-format#special-sections)

<table data-full-width="false"><thead><tr><th>Section</th><th>Contenu</th></tr></thead><tbody><tr><td>.text</td><td>Code exécutable</td></tr><tr><td>.data</td><td>Données initialisées</td></tr><tr><td>.rdata</td><td>Données initialisées en lecture seul</td></tr><tr><td>.edata</td><td>Table d'exportation</td></tr><tr><td>.idata</td><td>Table d'importation</td></tr><tr><td>.pdata</td><td>Infos sur les exceptions (seulement exe 64-bit)</td></tr><tr><td>.rsrc</td><td>Ressources</td></tr><tr><td>.reloc</td><td>Relocalisation d'images</td></tr></tbody></table>

<mark style="color:red;">**`IMAGE_NET_HEADERS > IMAGE_OPTIONAL_HEADER`**</mark>

* Programme command line -> <mark style="color:red;">`IMAGE_SUBSYSTEM_WINDOWS_CUI`</mark>
* Programme GUI -> <mark style="color:red;">`IMAGE_SUBSYSTEM_WINDOWS_GUI`</mark>

<mark style="color:red;">**`IMAGE_SECTION_HEADERS`**</mark>

* Virtual Size: taille de la section en mémoire
* Size of raw data: taille sur le disque

Si elles sont différentes -> surement <mark style="color:red;">packé.</mark>

### Explorer les ressources

> Section .rsrc

* [<mark style="color:orange;">Resource Hacker</mark>](https://www.angusj.com/resourcehacker/)

Pour voir les images, strings, interface graphique, etc.
