de l'art binaire: des PEs explosifs fait main
-
Upload
ange-albertini -
Category
Business
-
view
443 -
download
3
description
Transcript of de l'art binaire: des PEs explosifs fait main
![Page 1: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/1.jpg)
de l'art binairedes PEs explosifs fait main
3 Novembre 2012Lucerne, Suisse
Ange Albertinihttp://corkami.com
![Page 2: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/2.jpg)
version longue
● la présentation avait une 60aine de diapos● celle-ci en a plus de 140
● plus d'explications● plus d'exemples
![Page 3: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/3.jpg)
plan
qu'est-ce qu'un PE?
le problème et mon approche
vue d'ensemble du format PE
pièges classiques
nouvelles astuces
© ID software
![Page 4: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/4.jpg)
PPortable EExecutable
CCommon OObject FFile FFormatbasé sur
![Page 5: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/5.jpg)
exécutables Windows, mais aussi
● presque tous les exécutables depuis 1993● 32bits, 64bits, .Net● DLL, pilotes, ActiveX...
● aussi comme conteneur de données● icones, chaînes, dialogues, images...
omniprésent sous Windows
mais aussi EFI, portables CE, Xbox,...(mais pas couvert ici)
![Page 6: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/6.jpg)
![Page 7: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/7.jpg)
![Page 8: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/8.jpg)
![Page 9: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/9.jpg)
PEbinaire Windows binaire Windows universeluniversel
depuis 1993
![Page 10: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/10.jpg)
pe101pe101.corkami.com.corkami.com
![Page 11: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/11.jpg)
le problème...
![Page 12: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/12.jpg)
crimes & châtiments
● la documentation officielle est pauvre et floue● décrit juste des PEs standards● totalement insuffisante
● plantage (OS, security tools)
● empêche de développer ses propres outils
● gêne l'automatisation et le tri● PE ou pas?● corrompu ou malveillant?
● les meilleurs outils échouent → ça empêche même l'analyse manuelle
![Page 13: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/13.jpg)
“le guide naïf des PEs standards”
![Page 14: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/14.jpg)
CVE-2012-2273
version_mini
ibke
rnel
![Page 15: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/15.jpg)
norm
al
![Page 16: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/16.jpg)
![Page 17: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/17.jpg)
![Page 18: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/18.jpg)
![Page 19: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/19.jpg)
...et mon approche
![Page 20: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/20.jpg)
en partant de zéro
● analyser ce qu'on trouve dans la nature● devoir attendre le virus/bug suivant?
● écrire le binaire entier à partir de zéro● manuellement
● pas de limites dûes à un compilateur● des PoCs concises
→ meilleure couverture de l'ensemble
je partage mes connaissances et mes PoCs
![Page 21: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/21.jpg)
![Page 22: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/22.jpg)
brique par brique
![Page 23: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/23.jpg)
un exécutable complet
![Page 24: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/24.jpg)
pepe.corkami.com.corkami.com
![Page 25: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/25.jpg)
![Page 26: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/26.jpg)
Fichier
PE
(Appended data)
![Page 27: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/27.jpg)
PE PEdé
fini p
ar l'
en-t
ête
PE
Appendeddata
![Page 28: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/28.jpg)
PEen-têteSections
code, données...
![Page 29: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/29.jpg)
en-tête
en-tête DOS
en-têtes 'modernes'
depuis IBM PC-DOS 1.0 (1981)
depuis Windows NT 3.1 (1993)
MZ
PE (ou NE/LE/LX/VZ/...)
![Page 30: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/30.jpg)
en-tête
en-tête DOS
'en-têtes PE'
(code DOS) 16 bits
(en-tête Rich) infos de compil.
![Page 31: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/31.jpg)
code DOS
PoC: compiled
● code 16bits obsolète● affiche message & termine
● encore présent dans les PEs● même les 64 bits
![Page 32: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/32.jpg)
en-tête 'Rich'
PoC: compiled
● information de compilation● officiellement non documentée
● chiffrement xor32 pitoyable● complètement couvert par Daniel Pistelli
http://ntcore.com/files/richsign.htm
![Page 33: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/33.jpg)
![Page 34: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/34.jpg)
en-tête DOS
● obsolète● utilisé uniquement si exécuté en mode DOS● ignoré dans les autres cas
● indique où l'en-tête PE se trouve
![Page 35: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/35.jpg)
![Page 36: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/36.jpg)
'en-têtes PE'
File header
table des Sections
Optional header
'en-têtes NT'
organisationmémoire
déclare ce qui suit
pas dans .obj
PE\0\0
![Page 37: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/37.jpg)
File header
● combien de section(s)?● y a-t-il un Optional Header?● 32b or 64b, DLL ou EXE...
![Page 38: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/38.jpg)
![Page 39: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/39.jpg)
valeurs de NumberOfSections
● 0: Corkami :p● 1: packer● 3-6: standard
● code, données, données (non) initialisées, imports, ressources...
● 16: free basic :D● à quoi bon?
![Page 40: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/40.jpg)
![Page 41: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/41.jpg)
Optional header
● propriétés géométriques● alignements, début en mémoire, taille
● indique où l'exécution démarre● 32/64b, pilote/standard/ligne de commande● beaucoup d'informations non cruciales● data directory
![Page 42: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/42.jpg)
![Page 43: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/43.jpg)
Sections
● définir l'organisation en mémoire:● où sera chargée telle partie du fichier● à quelles fins? (inscriptible, exécutable...)
![Page 44: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/44.jpg)
![Page 45: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/45.jpg)
![Page 46: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/46.jpg)
Data Directory
● (RVA, Size) DataDirectory[NumbersOfRvaAndSizes]● chacun des 16 premiers, en standard, a une
utilité particulière
→ distincts, on les met souvent au pluriel
![Page 47: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/47.jpg)
![Page 48: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/48.jpg)
...call [API]…
Imports
PE
API: … ret
Exports
DLL
![Page 49: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/49.jpg)
Exports
● 3 pointeurs vers 3 listes● définir en parallèle (nom, adresse, numéro)
● une adresse peut avoir plusieurs noms
![Page 50: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/50.jpg)
![Page 51: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/51.jpg)
Imports
● une liste à zéro terminal de descripteurs● d'habitude, un par DLL
● chaque descripteur spécifie● un nom de DLL● 2 listes de pointeurs à zéro terminal
– noms d'API et futures adresses
● ImportsAddressTable indique la liste des adresses
● elle doit être une zone mémoire inscriptible
![Page 52: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/52.jpg)
![Page 53: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/53.jpg)
Relocations
● les PEs ont des ImageBases standard● EXE: 0x400000, DLL 0x1000000
→ conflits entre DLLs
→ le SE doit imposer des ImageBases différentes
● les adresses absolues doivent être déplacées● la plupart dans l'en-tête sont relatives● valeurs immédiates dans le code, TLS callbacks● ajouter (NouvelleImageBase - AncienneImageBase)
![Page 54: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/54.jpg)
![Page 55: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/55.jpg)
Resources
● icones, dialogues, numéro de version, ...● nécessite juste 3 appels de fonctions
→ utilisé partout
● structure récursive dossier & documents● 3 niveaux en standards
![Page 56: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/56.jpg)
![Page 57: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/57.jpg)
TThread LLocal SStorage
● Callbacks exécutés au démarrage et à l'arrêt de chaque thread● avant l'EntryPoint● après un appel à ExitProcess
![Page 58: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/58.jpg)
![Page 59: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/59.jpg)
32 bits ↔ 64 bits
● IMAGE_FILE_HEADER.Machine● 0x14c I386 ↔ 0x8664 AMD64
● IMAGE_OPTIONAL_HEADER.Magic● 0x10b ↔ 0x20b
● ImageBase, stack, heap● double ↔ quad● sizeof(OptionalHeader): 0xe0 ↔ 0xf0
● TLS, import thunks deviennent aussi des qmots
![Page 60: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/60.jpg)
![Page 61: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/61.jpg)
NumberOfSections
● 96 sections (XP)● 65536 Sections (Vista ou ultérieur)
→ suffisant pour faire planter des outils!
![Page 62: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/62.jpg)
65535sects
maxsecXP
![Page 63: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/63.jpg)
![Page 64: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/64.jpg)
SizeOfOptionalHeader
● sizeof(OptionalHeader)● ce qui donnerait 0xe0 (32b)/0xf0 (64b)● beacoup d'outils naïfs plantent si ce n'est pas le cas
● offset(SectionTable) – offset(OptionalHeader)● peut être:
● plus grand– que le fichier (→ table virtuelle, sous xp)
● plus petit ou nul (→ superposé à l'OptionalHeader)● nul (aucune section)
![Page 65: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/65.jpg)
PE sans section
● mode standard:● 200 ≤ FileAlignment ≤ SectionAlignment● 1000 ≤ SectionAlignment
● mode 'pilote':● 1 ≤ FileAlignment == SectionAlignment ≤ 800
→ virtuelle == physique● le fichier entier est chargé tel quel● les sections sont inutiles
● aucune, beaucoup (factices ou non)
![Page 66: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/66.jpg)
nosection*
1 ≤ FileAlignment == SectionAlignment ≤ 800
![Page 67: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/67.jpg)
TinyPE
exemple classique de malformation manuelle● en-tête PE dans l'en-tête DOS● OptionalHeader tronqué
● ne nécessite pas de section● compatible 64b & pilote● 92 octets
● uniquement sous XP (OptionalHeader tronqué)● rembourrage nécessaire depuis Vista
→ plus petit PE universel: 268 octets
![Page 68: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/68.jpg)
tiny*
![Page 69: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/69.jpg)
double en-têtes 'pliables'
les DD sont pris en compte après chargementhttp://www.reversinglabs.com/advisory/pecoff.php
1.déplacer l'en-tête plus loin
2.début de section et DD factices superposés en mémoire.
3.la section contient les vrais DD
● au chargement:
1.en-têtes et section sont analysés
2.le fichier est chargé en mémoire
3.les DD sont écrasés par leurs vraies valeurs● les imports sont localisés, etc...
![Page 70: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/70.jpg)
![Page 71: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/71.jpg)
foldedhdr
![Page 72: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/72.jpg)
EntryPoint nul● pour les EXEs
● 'MZ' désassemblé en tant que 'dec ebp/pop edx'(pas d'appel à DllMain si l'EP est nul)
nullEP
![Page 73: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/73.jpg)
EntryPoint virtuel● 1er octet absent physiquement dans le fichier
● 00 C0 => add al, al
virtEP
![Page 74: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/74.jpg)
TLS à la volée
● la liste des callbacks est m-a-j à la volée● le callback #1 ajoute un callback #2
tls_onthefly
![Page 75: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/75.jpg)
TLS ignoré
● le TLS n'est pas exécuté si seul kernel32 est importée
● et si aucune DLL important kernel32 est importée
– Kaspersky & Ferrie
tls_k32
![Page 76: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/76.jpg)
points terminaux superflus
● uniquement sous XP● trivial
● les points en fin de nom de DLL sont ignorés
● certaines heuristiques échouent
![Page 77: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/77.jpg)
dll-ld
![Page 78: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/78.jpg)
boucles dans les Ressources
● boucles (infinies)● ignorées lors le chargement● ignorées si le chemin pour atteindre une ressource
est différent
![Page 79: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/79.jpg)
resourceloop
![Page 80: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/80.jpg)
EntryPoint modifié par une DLL statique
les DLLs statiques sont appelé avant l'EntryPoint● DllMain reçoit le thread context via lpvReserved
● contient déjà l'addresse de l'EntryPoint
→ toute DLL statique peut librement le modifier
documenté par Skywing (http://www.nynaeve.net/?p=127),mais peu connu
![Page 81: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/81.jpg)
ctxt*ctxt*
![Page 82: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/82.jpg)
Win32VersionValue
● officiellement reserved● 'should be null'
● utilisé en réalité pour forcer les informations de version du SE dans le PEB
● anti-émulateur dynamique simple● utilisé dans les virus
![Page 83: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/83.jpg)
winver
![Page 84: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/84.jpg)
★★NNoouuvveelllleess★★ astuces
![Page 85: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/85.jpg)
Characteristics
● IMAGE_FILE_32BIT_MACHINE● vrai même en 64 bits● non requis!!
● IMAGE_FILE_DLL● non requis pour les DLLs
– les exports sont toujours utilisables– aucun appel à DllMain!
● EP invalide → pas un EXE● FILE_DLL absent → pas une DLL non plus
→ 'indéboguable'
![Page 86: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/86.jpg)
mininormal64
![Page 87: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/87.jpg)
dllnomain*
![Page 88: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/88.jpg)
descripteurs d'Imports
● INT factice ou absente● uniquement DllName et IAT sont requis
● le descripteur est sauté si aucun thunk● DllName ignoré
– peut être nul ou TRÈS gros● l'analyse devrait ne pas abandonner trop tôt
● isTerminator = (IAT == 0 || DllName == 0)● le terminateur peut être virtuel ou en dehors du
fichier● de même que le début du premier descripteur
![Page 89: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/89.jpg)
imports_virtdesc
dd OriginalFirstThunkdd TimeDateStampdd ForwarderChain----------------------------dd Namedd FirstThunk
![Page 90: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/90.jpg)
Imports 'torturés'
malformation complexe● DllName sans extension● IAT dans le descriptor
● l'INT presque valide est ignorée
● noms et indices/noms dans le terminateur● valide car le dernier dmot est nul
![Page 91: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/91.jpg)
corkamix
![Page 92: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/92.jpg)
DD Exceptions
● 64 bits Structured Exception Handler● avec beaucoup de code rajouté par le compilateur
● utilisé par W32.Deelae pour infecter● Peter Ferrie, Virus Bulletin, Septembre 2011
● modifiable manuellement, à la volée● aucun appel d'API nécessaire
![Page 93: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/93.jpg)
exceptions
![Page 94: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/94.jpg)
seh_change64
![Page 95: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/95.jpg)
Relocations
● autorise n'importe quelle ImageBase● requises pour les adresses absolues: code, TLS,
.Net
● ignorée si non requises● aucun changement d'ImageBase (→ factices!)● pas de code● code 64 bits relatif à RIP● code indépendant de l'IP (shellcode)
● peut tout déplacer● déplacer l'ImageBase altère l'EntryPoint
![Page 96: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/96.jpg)
no_dd
ibknoreloc64
![Page 97: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/97.jpg)
ibreloc
fakerelocs
![Page 98: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/98.jpg)
types de Relocations (en théorie)
HIGHLOW● delta d'ImageBase standard
ABSOLUTE● ne fait rien● juste utilisé pour l'alignement
![Page 99: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/99.jpg)
● les types 6 et 7 sont ignorés● alors que le type 8 est interdit
● le type 4 (HIGHADJ) nécessite un param.● qui est en fait ignoré (bug du SE)
● le type 2 (LOW) ne fait rien● car les ImageBases sont alignées à 64kb
● les types MIPS et IA64 sont toujours présents● enfin, du nettoyage sous Windows 8!
type de Relocations en pratique
![Page 100: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/100.jpg)
![Page 101: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/101.jpg)
un peu d'histoire
● HIGHADJ est là depuis le début● MIPS était reconnu mais rejeté par Win95● NT3.1 introduit MIPS – sous toutes les archs.● LOW était rejeté par Win95/WinME
● alors qu'il ne fait rien sous les autres versions
● Windows 2000 avait un type supplémentaire, aussi avec un paramètre
Bonus:
les relocations de Win95 utilisent 2 copies identiques du même code – quelle optimisation!
![Page 102: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/102.jpg)
![Page 103: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/103.jpg)
s'amuser avec les relocations
● 4 types ne font en fait rien● tous peuvent être utilisés sur une adresse factice
● HighAdj's peut être utilisé comme piège● des Relocations peuvent en modifier d'autres
● un bloc peut modifier le suivant● des Relocations peuvent décrypter des données
● mettre une ImageBase dans le noyau● sa future valeur est connue
● pas d'analyse statique possible
● mais c'est très louche :D
![Page 104: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/104.jpg)
reloccrypt
![Page 105: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/105.jpg)
reloccrypt
![Page 106: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/106.jpg)
reloccrypt
![Page 107: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/107.jpg)
Code dans l'en-tête
● l'en-tête est exécutable● les packers y mettent code ou données
● beaucoup de champs inutilisés (→ format TE)● beaucoup de champs contrôlables
● Peter Ferriehttp://pferrie.host22.com/misc/pehdr.htm
→ du vrai code dans l'en-tête
![Page 108: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/108.jpg)
maxvals
![Page 109: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/109.jpg)
hdrcode
![Page 110: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/110.jpg)
traceless
![Page 111: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/111.jpg)
.Net
étapes du chargement:
1.chargement du PE• uniquement les imports (DD[1]) à cette étape
2.appel de MSCoree.dll
3.chargement de la partie .Net● nécessite CLR (DD[13]) et relocations (DD[5])● oublie de vérifier NumberOfRvaAndSizes :(
– fonctionne avec NumberOfRvaAndSizes = 2
échec d'IDA, reflector – mais déjà dans la nature
![Page 112: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/112.jpg)
tinynet
PE
...imports
...
...
...
...
...
...
...
...
...
...
...
...
...
...
.NET
...
...
...
...
...relocs
...
...
...
...
...
...
...
...CLR
...
![Page 113: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/113.jpg)
PE sans zéro
● LoadlibraryEx avec LOAD_LIBRARY_AS_DATAFILE
● un PE de données nécessite uniquementMZ, e_lfanew, 'PE\0\0'
● 'PE' à la fin du fichier● assez de rembourrage pour que e_lfanew ne
contienne pas de zéro
un PE non-null peut être créé et chargé
![Page 114: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/114.jpg)
d_nonnull-*
![Page 115: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/115.jpg)
uniquement des resources
● 1 seule section valide● 65535 sections sous XP!
● 1 DataDirectory
![Page 116: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/116.jpg)
d_resource*
![Page 117: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/117.jpg)
subsystems
● pas de différences particulières● alignements bas pour les pilotes● imports incompatibles: NTOSKRNL ↔ KERNEL32● texte ↔ graphique : IsConsoleAttached
→ un PE avec des alignements bas et sans imports peut marcher avec les 3 subsystems
![Page 118: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/118.jpg)
multiss*
![Page 119: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/119.jpg)
un PE nu avec du code
● alignments bas → pas de sections● pas d'imports → APIs chargées à la main● TLS → pas d'EntryPoint
ni EntryPoint, ni section, ni import,
mais le code s'exécute sans problème
![Page 120: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/120.jpg)
nothing*nothing*
![Page 121: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/121.jpg)
EntryPoint externe (1/2)● dans une DLL (sans relocations)
dllextEP
![Page 122: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/122.jpg)
EntryPoint externe (2/2)● mémoire allouée juste avant par le TLS
tls_virtEP
![Page 123: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/123.jpg)
EntryPoint ignoréle TLS termine l'exécution mais sera rappelé ensuite
tls_noEP
![Page 124: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/124.jpg)
du noyau à l'utilisateur
● le déboguage noyau est compliqué● alors que les packers noyau sont limités
1.changer le subsystem
2.utiliser de fausses DLLs noyau (ntoskrnl, etc...)● rediriger les APIs
– DbgPrint → MessageBoxA, ExAllocatePool → VirtualAlloc
→ automatisation de l'unpacking noyau
![Page 125: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/125.jpg)
ntoskrnl
![Page 126: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/126.jpg)
TLS AddressOfIndex
● pointeur vers un double mot● reçoit 0, 1... au chargement du nème TLS● astuce dynamique facile
call <garbage> dans le fichier → call $+5 en mémoire
● modifié avant les imports sous XP,après sous W7
même PE, mais chargement différent
![Page 127: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/127.jpg)
tls_aoiOSDET
![Page 128: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/128.jpg)
Manifest
● ressource XML● peut faire échouer le chargement● peut faire planter le SE! (KB921337)
● difficile à analyser en détail● ignoré si le type est incorrect
Manifest minimal:<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'/>
![Page 129: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/129.jpg)
corruption de DllMain/TLS
● DllMain et TLS ont juste besoin de restaurer ESI● même ESP peut être corrompu● anti-émulateur simple
● le TLS peut déclencher une exception● pas d'erreur pour le SE● l'EntryPoint est exécuté comme si de rien n'était
![Page 130: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/130.jpg)
fakeregs
![Page 131: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/131.jpg)
un PE 'quine'
● afficher son code source● totalement inutile – très divertissant :D
● remplir l'en-tête DOS de caractères ASCII● code ASM entre les en-têtes DOS et PE
● visible par affichage texte● s'affiche lui-même si exécuté
![Page 132: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/132.jpg)
quine
![Page 133: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/133.jpg)
un polyglotte binaire
● ajouter %PDF dans les 400h premiers octets
→ votre PE est aussi un PDF (→ Acrobat)
● ajouter PK\03\04 n'importe où
→ votre PE est aussi un ZIP (→ PKZip)
● mettre une .CLASS Java .CLASS dans le ZIP
→ votre PE est aussi un JAR (→ Java)
● ajouter <HTML> quelque part
→ votre PE est aussi une page HTML (→ Mosaic)
● Bonus: Python, JavaScript
![Page 134: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/134.jpg)
corkamix
![Page 135: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/135.jpg)
Conclusion
![Page 136: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/136.jpg)
Conclusion
● le format des exécutables de Windows est complexe
● la majeure partie est documentée, mais c'est un vrai champ de mines● avec de nouvelles découvertes chaque jour :(
http://pe101.corkami.com
http://pe.corkami.com
![Page 137: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/137.jpg)
des questions?
Merci à
Fabian Sauter, Peter Ferrie, وليد عصرBernhard Treutwein, Costin Ionescu, Deroko, Ivanlef0u, Kris Kaspersky, Moritz Kroll, Thomas Siebert, Tomislav Peričin, Kris McConkey, Lyr1k, Gunther, Sergey Bratus, frank2, Ero Carrera, Jindřich Kubec, Lord Noteworthy, Mohab Ali, Ashutosh Mehra, Gynvael Coldwind, Nicolas Ruff, Aurélien Lebrun, Daniel Plohmann, Gorka Ramírez, 최진영 , Adam Błaszczyk, 板橋一正 , Gil Dabah, Juriaan Bremer, Bruce Dang, Mateusz Jurczyk, Markus Hinderhofer, Sebastian Biallas, Igor Skochinsky, Ильфак Гильфанов, Alex Ionescu, Alexander Sotirov, Cathal Mullaney
![Page 138: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/138.jpg)
Merci!
@ange4771@ange4771Ange Albertini @gmail.com
http://corkami.com
![Page 139: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/139.jpg)
Bonus
![Page 140: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/140.jpg)
pas du PE, mais quand même amusant
![Page 141: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/141.jpg)
formats anciens
● en 32b, Windows gère encore les EXE et COM● moins courant, ils échappent aux détections
● un EXE peut s'auto-modifier en PE● en utilisant une signature 'ZM'● pas en mémoire :(
● un COM écrit en symboles peut créer un PE● grâce à http://utf-8.jp/public/sas/ de Yosuke
Hasegawa
![Page 142: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/142.jpg)
exe2pe, dosZMXP
![Page 143: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/143.jpg)
aa86drop.com
![Page 144: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/144.jpg)
archéologie binaire
● les polices pt/pt (.FON) sont en format NE● crée en 1985 pour Windows 1.0
● vgasys.fon toujours présent dans Windows 8● tel quel depuis 1991 (Windows 3.11)● police créée en 1984
● les propriétés montrent le copyright
→ Windows 8 gère encore (partiellement)
un format d'exécutable 16b datant de 1985
![Page 145: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/145.jpg)
![Page 146: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/146.jpg)
instruction en état d'ébriété
● Lock:Prefetch● ne peut pas être exécutée (illégale)
● fonctionne bizarrement sous W7 x64● ne déclenche pas d'exception● modifiée par le SE (mal 'réparée')
– mais encore incorrecte après!
boucle infinie d'erreurs silencieuses
![Page 147: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/147.jpg)
![Page 148: de l'art binaire: des PEs explosifs fait main](https://reader034.fdocument.pub/reader034/viewer/2022042518/54b701934a7959aa2a8b46fc/html5/thumbnails/148.jpg)
this is the end...my only friend, the end...
(les Portes)