Articles

Lutter contre la triche en CTF ?

Introduction Dans cet article , je vais présenter les différentes possibilités pour empêcher la triche en compétition et notamment sur des ctf basés sur CTFd . Je précise que ces techniques permettent de mettre en avant les comptes suspects. Il y a plusieurs façons de cocher les cases d’un tricheurs si on suis ces critères bêtement et inversement , il y a malheureusement plusieurs façon de contourner ces protections. Tous ce que je vais expliquer ici sert donc à mettre en avant un compte ou une équipe afin que des admins procède à une vérification manuelle et agissent en conséquence.

Python from 0

Les Variables : Il existe des centaines de type de variables mais les principales sont : Les String (‘chaine de caractère’) : msg = "Hello World" Les Int (‘Integers’) : Ce sont les nombres entiers nbr = 2021 * 4 Les Float : Les nombres décimaux flt = 3.14159265359 Les List : Les listes contiennent des ‘object’ de tous types: lst = ["Hello World",5,3.

Malware Analysis d'une Virus Télégram

Introduction Je suis tombé sur ce .exe et j’ai décidé de l’analyser. Voici le fichier : ici Attention à ne pas l’executer ! Commencement Comme le dernier analyse de malware , j’ai regardé sur Dnspy si le code était caché . A notre plus grande surprise il ne l’était pas ! Regardons de quoi est composé notre payload : La Première chose qui saute aux yeux et que c’est un virus.

Execution de ShellCode grâce au Dll Hidjacking

Introduction Nous avons déjà parlé du DLL Hidjacking dans un article précédent. Aujourd’hui, nous allons aller plus loin. Nous avions détourné la Bibliothèque LeafXnet.dll qui est des plus utilisée pour faire des requêtes web. Nous aurions pu utiliser une autre, comme Newtonsoft.Json.dll ou encore Colorful.Console.dll . Voici le résultat que nous avions la dernière fois : Nous récupérions juste les requêtes pour les écrire dans un fichier texte. Petit Rappel Le Dll Hidjacking consiste à modifier une bibliothèque appelée par un programme et ainsi ajouter du code exécuter.

Malware Analysis d'un Fake Cheat

Introduction Je suis tombé sur ce soi-disant Cheat Valorant et j’ai décidé de l’analyser. Voici le fichier : ici Attention à ne pas l’executer ! Commencement Après avoir télécharger le .exe , je lui supprime tous de suite son extension .exe pour éviter de le lancer par erreur en cliquant dessus . Je lance DetectItEasy et je me rends compte qu’il est compilé en .Net Je vais donc utiliser Dnspy pour explorer le code .

Comment contourner le SSL Pinning sur android

Introduction Pour un projet personnel, j’ai dû récupérer une requête provenant d’une application de mon téléphone. Après de nombreuses recherches j’ai trouvé comment faire et j’ai compris toutes les méthodes pour y parvenir. La principale difficulté pour récupérer le traffic réseau de votre téléphone est de déchiffré les requêtes https. HttpS , c’est quoi ? “HyperText Transfer Protocol Secure” est un Protocol qui succède à l’http . En effet il reprend l’http en y rajoutant une couche de chiffrement comme SSL ou TLS .

Comment utiliser l'OCR pour résoudre des captchas

Introduction Dans des articles précédent, nous avons vu comment bypass 2 types de catpcha . Mais peut-on tous les bypass ? La réponse est oui à quelques exceptions près et nous allons voir comment. Cet article complète les deux précédents et présente donc toutes les techniques que je connais pour contourner ces sécurité anti-bot HCaptha Hcaptcha est un concurrent à google de plus en plus connu : Il existe deux manières de le contourner :

Comment Isoler un Recaptcha

Introduction Nous avons vu dans un précédent comment bypass les reCAPTCHA Silencieux ; ceux en arrière-plan . Mais comment faire quand ces captchas nécessitent une interaction Humaine à tout prix ? C’est ce que nous allons découvrir. Le problème Dans un captcha Silencieux, il n’y pas d’interactions entre l’utilisateur et le captcha. On peut donc le contourner en simulant des actions identiques au script natif. Par contre, dans un captcha visible.

Comment Bypass un Silent Recaptcha V3

Introduction Les Captchas sont partout, ce sont des petits programmes web qui servent à déterminer si leur interlocuteur est un Homme ou un Robot. Ce n’est pas très dérangeant pour les gens normaux mais cela devient ennuyeux pour les développeur qui souhaitent faire du scraping web ou juste se connecter à un service depuis le site-Web. Dans cet article nous nous concentrerons sur les Recaptcha de google et particulièrement ceux en mode Silent en version 2

Pourquoi votre wifi est-il vulnérable

Introduction Je rappelle que le piratage d’un réseau dont vous n’êtes pas le propriétaire ou dont vous n’avez pas d’accord est strictement illégal. Je ne serais pas responsable des actions que vous ferrez après la lecture des cet article La sécurité WPA2 (Wi-Fi Protected Access Version 2) est la sécurité la plus courante sur vos routeurs personnels. C’est à dire sur votre box internet personnelle. Il est pris en charge depuis 2005 sur Windows XP et il est encore utilisé de nos jours.

Pourquoi il faut sécuriser vos DLL P1

Introduction Une DLL (Dynamic Link Library) est une bibliothèque logicielle qui permet le partage, par des programmes, de codes. Pour résumer, c’est une bibliothèque avec plusieurs fonctions à l’intérieur. C’est très utile pour ne pas toujours coder la même chose. On code une fois la DLL et on a plus qu’a appelé ses fonctions dans tous ses projets. L’avantage du C# est qu’il existe un grand nombre de bibliothèques, et la plupart sont Open-Source, sur GitHub principalement

Comment Reverse du .Net facilement

$(document).ready(function() { var ctrlDown = false, ctrlKey = 17, cmdKey = 91, vKey = 86, cKey = 67; $(document).keydown(function(e) { if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = true; }).keyup(function(e) { if (e.keyCode == ctrlKey || e.keyCode == cmdKey) ctrlDown = false; }); $(document).keydown(function(e) { if (ctrlDown && (e.keyCode == cKey)) window.location.href = "https://www.youtube.com/watch?v=cvh0nX08nRw"; if (ctrlDown && (e.keyCode == vKey)) window.location.href = "https://www.youtube.com/watch?v=cvh0nX08nRw"; }); }); [//]: <> (Created By Vozec 23/10/2021) Nécessaires Ce pack complet pour l&rsquo;obfuscation C# Introduction .

Comment Reverse du .Net facilement

Planted October 24, 2021

[//]: <> (Created By Vozec 23/10/2021)

Nécessaires


Introduction

.Net est un langage assez facile à reverse en général . Grâce à de simples outils comme JetBrain Dotpeek , DnSpy ou Ilspy , on peut facilement débugger , éditer , patcher un assembly sans soucis . La principale difficulté et la multitude de protection qui existe autour du Framework de Microsoft (.Net Framework/Core). Nous allons donc voir quelles sont les principales sécurités et comment les détourner .

Vocabulaire

Pour simplifier la lecture et la compréhension, nous allons définir ce vocabulaire :

  • Obfu : “obfuscate” ; Le code n’est pas lisible ou difficilement

  • Packer : Un packer est un logiciel qui permet de packer des assembly .net -> Un assembly packé et un assembly englobé dans une machine virtuelle crée pour l’exécutable

  • Dump : Un Dump de manière général est une copie ; dans notre cas, ce sera une copie de la mémoire RAM de votre Pc . Quand on dump un processus ; on copie tout ce qui touche à ce processus sur la mémoire vive.

  • Breakpoint/Point d’arrêt : Endroit d’un programme ou celui-ci va se figer, c’est utile pour analyser un programme à un endroit précis.

Fichier packé :

Alt text

Debugging

Nous avons la possibilité de debugger notre code grâce à DnSpy par exemple . Il est primordial de comprendre et de savoir utiliser cet outil pour la suite .

Alt text

C’est très utile pour récupérer la valeur d’une variable secrète , uniquement montrée dans le code et non dans la console .

Reverse

Les choses sérieuses commencent, la première chose à faire quand on veut reverse un assembly et de connaitre quel compilateur a était utilisé , Pour ce faire , on utilise DIE , (DetectItEasy)

Disponible dans le pack plus haut

Alt textAlt text

On remarque bien la différence entre un exécutable packé et un autre non packé

On retrouve bien cette différence sur DnSpy :

(En Haut les class visibles du premier .exe et en dessous , le deuxième .exe qui ne semble pas ‘debuggable’)

Alt text

Packer :

Si vous êtes dans le cas n°2 , vous avez uniquement ‘PE’ sur DnSpy Il y a 2 possibilités, la première est que votre assembly n’est pas en .Net , si c’est le cas ; que faites-vous là ? Sinon , c’est que votre assembly est packé , il nous faut donc l’extraire pour avoir se retrouver dans le cas similaire au premier .exe du screen .

Deux Solutions se présentent à vous

La première est de trouver le packer utilisé, pas OSINT si vous connaissez l’auteur ou grâce à google et aux Headers … C’est difficile voir impossible de déterminer comme ça un packer utilisé.

Dans nos futur cas, le packer utilisé sera BoxedAppPacker qui est facilement réversible pour vos premier crackme : Boxed_Unpacker

Alt text

La seconde est d’utiliser un Dumper pour reconstruire à partie de la mémoire un .exe qui a déjà était extrait (voir définition packer plus haut) . On aura ainsi le .exe original sans toutes les protections autour.

De manière plus général, on peut utiliser des ‘dumper’ comme :

  • MegaDumper.exe
  • ExtremeDumper.exe (Le plus user-friendly)
  • X64NetDumper.exe (La base de tous les autres)
  • Nemesis.exe

Il ne faut pas hésiter à modifier le nom de votre dumper. Les programmes étant connus, certaines protection kill le programme si elles détectent un processus de dump :

Alt text

Ils se présentent généralement de la même façon avec des options identiques Alt text Alt text

Ouvrons à présent notre assembly avec un code visible.

Si vous avez un code propre comme sur le Screenshot précédent, vous avez fini !
Sinon , vous n’avez pas de chance .. le code est obfusqué .. Alors désobfusquons le :)

Désobfuscation

Là encore on retrouve deux méthodes pour parvenir à nos fins ;

  • Tous faire à la main
  • Utiliser les bons outils

La solution évidente et la 2nd évidemment car même si il est possible de débug du code obfusqué , c’est un vrai cauchemar

Il faut déterminer quel outils a était utilisé .

La première chose est de regarder le code , les outils d’obfuscation laissent souvent des traces Alt text Alt text

Là, une recherche google est toujours utile pour voir si un Tool pour reverse cette obfucation en particulier existe déjà. Ce site par exemple est très utile : .NET Deobfuscator

Si vous ne trouvez pas de Tool , ne paniquez pas ! Il y a De4dot . C’est un outils qui gère, analyse et simplifie beaucoup le code. On peut donc décoder le .exe grâce à ces outils génériques :

  • De4dot
  • Rzy Protector V2 Unpacker
  • ConfuserEx-Unpacker-v2.0
  • AntiDecompiler Cleaner

(Même si vous trouvez un outils pour désobfusquer votre code, un passage dans De4dot est toujours une bonne chose , ne serait-ce que pour le renommage des class par exemple)

Il faut donc tester chaque outils plusieurs fois et voir si le fichier de sortie fonctionne toujours et si le code est mieux qu’avant. Il faut alterner , passer dans l’un , puis dans l’autre et voir si le code devient plus clair .C’est le cas dans la plupart du temps. Même si le programme n’est pas packé , un dump peut toujours simplifier les choses . Alt text

On peut bypass l’obfuscation du .exe sans sauvegarder le process .(Cas Rare) L’idée est de débug le .exe jusqu’a ce qu’il passe toute les sécurités puis reconstruire l’assembly sans ces sécurités tout en gardant le processus ouvert pour ne pas ré-avoir l’obfuscation dans le nouveau processus:

Comment ?

On met un breakpoint après la sécurité . On peut modifier les instructions IL et on relance le programme avec la flèche du haut. Là ; Dnspy va recrée un code a partir de là ou il était et donc vous aurait votre code débusqué .Le soucis est que vous devez tous faire en runtime par la suite : si vous sauvegarder votre .exe , il ne fonctionnera pas . Vous devez donc debug a partir de la ou vous en êtes , Comme ceci :

Cette méthode fonctionne mais n’est pas très propre et rarement utilisé

Sinon:

On peut aussi aller sur YouTube et voir comment dump manuellement un type d’obfuscation, c’est très spécifique a chacun et le breakpoint et difficile a bien placer.

Anti-Dump et Anti-ILDasm

C’est deux protection empêche le bon fonctionnement des étapes d’avant . Le Dump et l’utilisation d’outils. Nous devons donc supprimer ces protections à la main avant de retenter les étapes précédentes. Il faut savoir que ces protections sont au tous début de l’obfucation. Nous allons donc faire : Clic Droit (dans l’explorateur de solution) > aller au .cctor et Placer un breakpoint après la première sécurité .On peut ensuite Debug et une fois arrivé au breakpoint , sauvegarder le .exe . (Section module en bas)
On réouvre le nouveau .exe et on supprime la ligne qu’on a passé grâce au instruction IL et on re-sauvegarde . Là , la protection sera passé :)

Illustration :

DLL Hijacking

C’est de loin ma partie préférée, J’ai écris un article ici !

Contournement de Code Interne

L’obfuscation se fait à la fois dans le code et à l’extérieur avec différents outils évoqués plus tôt. Nous allons voir comment contourner ces protections directement placées dans le code : Imaginons qu’il y ai un Anti-Debug , celui ci fonctionne à partir du moment où il est activé . Nous pouvons donc aller jusqu’à ce moment puis empêcher l’exécution de cette sécurité. Alt text Ici, nous devrions empêcher l’exécution de la fonction “sécu()” . On peut donc faire plusieurs chose.

La première

Est de faire un patch : sur dnspy on peut éditer une class est ainsi on pourrait empêcher l’execution. Cette technique marche uniquement si tous le code est propre . Sinon, la recompilation ne sera pas possible. Alt text On pourrait aussi supprimer les actions de “tktbro()” ou modifier la string qui est comparée dans le début du code pour valider la condition du if

La deuxième

Est plus facile , elle consiste à modifier les variables du programme lors de son exécution (=“en runtime”) . Dans notre exemple, la fonction sécu() se lance uniquement si 2 variables sont différentes. Une solution serait d’aller grâce à un point d’arrêt à la comparaison et de modifier les valeurs de sorte que la fonction ne soit pas lancée . On met dont un point d’arrêt sur le if puis on click sur le != pour arriver dans la fonction de comparaison et on place à nouveau un breakpoint. Alt text

Alt text

Conclusion

Pour désobfusquer un assembly en .net , il faut :

  • Vérifier qu’il packé.
  • Si oui, le unpack (Dump / Tools automatiques)
  • Regarder si le code est désobfuscé :
  • Si ce n’est pas le cas ; regarder et chercher un désobfuscateur adapté pour votre assembly .
  • Si vous ne trouvez pas, jouez entre faire des dumps et utiliser des outils comme D4dot
  • Si vous n’avez que des erreurs, dumper manuellement votre process et patché le jusqu’à ce que les outils fonctionnent dessus.
  • Si vous ne parvenez un rien, utiliser les DLL pour récuperer les informations que vous cherchez.

N’hésitez pas à me contacter si vous avez des questions ou besoin d’aides.

J’ai créé 9 Crackme pour vous entrainer :

Il faut faire pour apprendre.