You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: Human.old-WriteUp.md
+25-25Lines changed: 25 additions & 25 deletions
Original file line number
Diff line number
Diff line change
@@ -3,22 +3,22 @@
3
3
## Informations :<br><br>
4
4
**Challenge** : Human.old<br>
5
5
**Description** : M0th3r > Bravo, grâce à toi, on a enfin sauvé Duke. C'est le moment de voir sa BaseLine. Qui se cachait réellement derrière Duke-083<br>
6
-
**Points** : 500
7
-
**Solves** : 1
6
+
**Points** : 500<br>
7
+
**Solves** : 1<br>
8
8
**Contributeur** : Lexsek<br>
9
9
10
10
## Solutions :<br><br>
11
11
12
-
### Reconnaissance :
12
+
### Premiers pas :
13
13
On obtient un executable windows de type PE32 :<br><br>
IDA n'arrive dont pas à trouver la table des imports, ce qui veut dire que notre executable est vraisemblablement packé.<br>
20
20
Celui ci n'est rien d'autre que UPX, mais les signatures sembles avoir été supprimés à la main afin de nous empêcher d'utiliser la commande upx -d afin de le dépacker.<br><br>
**Comment fonctionne un packer et plus particulièrement UPX ?**<br><br>
23
23
Les packers sont des utilitaires dont le travail consiste à compresser un programme executable et à le chiffrer afin d'en générer un nouveau. Ce nouvel executable contiendra en fait l'original comme de la donnée, ainsi qu'une routine d'unpacking qui sera appelée. Ils sont principalement utilisés dans les cas de protection logicielle ou de malwares afin d'en complexifier l'analyse.<br><br>
24
24
Lorsque l'on est face à un programme packé, le routine d'unpack effectue les actions suivantes :<br>
@@ -29,37 +29,37 @@ La table des imports correspond en fait sorte d'index qui va indiquer les DLL et
29
29
30
30
**Etudions donc le comportement d'unpack d'UPX :**<br><br>
31
31
Executable original, toutes les sections et les entêtes PE sont visibles et le point d'entré commence à l'original entry point <br>
Après l'unpack total, la table des imports est maintenant résolue, le point d'entrée pointe maintenant vers l'orginial entry point du program original.<br>
Ce call correspond en fait a l'entry point de l'executable original, nous allons donc dumper le disque afin de faire une analyse statique du reste du programme.<br>
56
56
Notre binaire commence à l'adresse **0x011F3710**, cette adresse est situé dans le segment 20. Nous allons donc dumper proprement ce segment à l'aide d'un script python IDA, mais il faudra au préalable calculer sa taille.<br><br>
La variable var_2C servait en fait de compteur pour vérifier si l'on s'était fait detecter par les fonctions d'anti VM / DEBUG / SANDBOX, et elle était incrémentée de 1 juste avant d'arriver sur les comparaisons avec les integers.<br><br>
Le programme vérifier ensuite si argc était > à 1, si ce n'était pas le cas, il récupérait son chemin de lancement, et en fonction du compteur var_2C, il se relançait avec une option.<br><br>
Certaines de ces options étaient destructrices, le programme faisait un CALL $5, POP EBX afin de récupérer l'eip dans EBX, et il xorait EBX avec une valeur en dur avant de sauter dessus, evidemment l'adresse obtenue n'était pas valide.<br>
104
104
Pour les autres options, si l'on suit la logique de notre programme, **notre compteur si l'on est pas détecter doit valoir 1** pendant les comparaisons, le **bon argument est donc --3333**.
105
105
106
106
Si l'on regarde donc ce qu'il se passe avec les comparaisons d'arguments, c'est comme pour les comparaisons du compteur, une vérification se produit et une fonction est appelée que j'ai renommé "CreateCalcAndInject**Right|Wrong**Shellcode.<br>
107
107
En effet, le seul est unique bon paramètre étant --3333, les autres appels font une destructions de l'EIP, où injecte un shellcode ou une routine invalide dans calc.exe.
0 commit comments