NDH16 Quals- So Stealthy (Reverse)

Write-up pour le chall SoStealthy en reverse. Il m’a permis de découvrir une partie du monde (hideux) du C# et du framework .NET

0x1 Looking for what ?

Une capture wireshark nous était donnée, comme habituellement je jette un oeil aux fichiers disponibles. Après quelques minutes je remarque une icône avec une taille excessive.

C’était en effet un document XML contenant un script JS obfusqué . Très vite on remarque l’utilisation d’objets ActiveX, l’utilisation d’IE devient imposée …

En essayant, tant bien que mal, de comprendre ce foutu code, je viens vite à l’évidence que le but de ce script est de simplement créer un processus depuis le base64 qui contient donc le vrai programme.

var idk = 'AingeiRai5HahfeiThe2';

try {

    var ACT = new ActiveXObject("System.Text.ASCIIEncoding");
    var frombase64transform = new ActiveXObject("System.Security.Cryptography.FromBase64Transform");
    var binartformatter = new ActiveXObject('System.Runtime.Serialization.Formatters.Binary.BinaryFormatter');
    var arraylist = new ActiveXObject('System.Collections.ArrayList');
    var memorystream = new ActiveXObject("System.IO.MemoryStream");


    var octet_sequence = ACT.GetBytes_4(BASE64_TXT);
    octet_sequence = frombase64transform.TransformFinalBlock(octet_sequence, 0, 11972);
    memorystream.Write(octet_sequence, 0, 8979);
    memorystream.Position = 0;

    var unserialized = binartformatter.Deserialize_2(memorystream);
    arraylist.Add(undefined);
    console.log(arraylist);
    var instance = unserialized.DynamicInvoke(arraylist.ToArray()).CreateInstance(idk);
    
    instance.Aa6bi4uidan4shahSee9(BASE64_TXT);
    instance.Joh8achoo1aepahjeiy9();

} catch (e) {
    console.log("fuck");
    debug(e.message);
}

Le base64 décodé donne un fichier un peu bizarre, il s’agirait d’un fichier .ttf (c’est complétement faux).Après un bon moment de recherches perdu à essayer de comprendre ce que je cherchais, je remarque cette chose :

Il y a donc un fichier PE dedans essayons de l’extraire et de l’identifier : file payload.exe : PE32 executable (DLL) (console) Intel 80386 Mono/.Net assembly, for MS Windows

C’est donc un fichier .NET, utilisons dotPeek pour le décompiler et de voir ses entrailles. Mmmmh du C# obfusqué (simple), la partie intéressante se trouve ici :

  private bool MeeBish0iotho9biBuJi(string magicWord)
  {
    for (int index = 0; index < this.Tai8Aip0ua3ULi6zo1je.Length; ++index)
    {
      if ((long) ((uint) magicWord[index] ^ (uint) this.Tai8Aip0ua3ULi6zo1je[index]) != (long) this.az5nieghahj0Iekah0ph[index])
        return false;
    }
    return true;
  }

Il s’agit d’un simple XOR entre un tableau de 22 int et des 22 derniers char du base64 !

Oh no, it’s retarded