Geospace

TwitterGitHubRSS

NDH Quals 18 : SoStealthy

Publié le 1/04/2018

SoStealthy est une épreuve de reverse à 150 points, validée par pas mal d’équipes.

Enoncé de l'épreuve

Le scénario : une équipe réponse incident a fait une capture d’un réseau infecté et c’est à nous de retrouver le logiciel malveillant qui a circulé.

On commence par télécharger le fichier suspicious.pcap et on le charge dans Wireshark. Le fichier est trop volumineux pour qu’on se fasse chaque entrée à la main, du coup je scroll un peu au hasard et je fais des Clique droit > Suivre > Flux TCP de temps en temps mais rien ne me saute aux yeux, il va falloir des filtres

En scrollant, j’ai remarqué qu’il y avait des connections HTTP. Un filtre qui marche assez bien quand on est dans un scénario d’infection est le suivant : http contains function. En effet, function est un mot clé permettant de déclarer une fonction en Javascript et ce langage est souvent utilisé comme vecteur d’infection.

Wireshark filter

On a deux entrées qui ressortent. La première ne nous intéresse pas du tout, c’est une page de warning genre “Attention, nous enregistrons vos cookies”. Il se trouve que cette page embarque du Javascript de tracking, ce qui explique qu’on l’ai recupérée dans nos filets.

En revanche, quand on fait un Clique droit > Suivre > Flux HTTP sur la deuxième, on tombe sur un gros bloc de Javascript un peu obfusqué :

Wireshark paquet intéressant

Note : On peut imaginer beaucoup d’autres variantes de ce filtre pour identifier du Javascript. Par exemple, le mot clé function n’est aujourd’hui plus du tout requis pour déclaré une fonction. Ainsi, il peut etre intéressant de matcher sur des éléments de syntaxe plus modernes comme ) => (bout de de déclaration en arrow function) ou bien async.

Voici le code brut, pas encore retravaillé :

function setversion() {
}
function debug(s) {}
function Trololo(b) {
	var yei1Euthoo = new ActiveXObject("System.Text.ASCIIEncoding");
	var oPohToo1em = yei1Euthoo.GetByteCount_2(b);
	var apeuGho2aa = yei1Euthoo.GetBytes_4(b);
	var xieBaf0eeZ = new ActiveXObject("System.Security.Cryptography.FromBase64Transform");
	apeuGho2aa = xieBaf0eeZ.TransformFinalBlock(apeuGho2aa, 0, oPohToo1em);
	var do2quaiMie = new ActiveXObject("System.IO.MemoryStream");
	do2quaiMie.Write(apeuGho2aa, 0, (oPohToo1em / 4) * 3);
	do2quaiMie.Position = 0;
	return do2quaiMie;
}

var dei0eiFu = "AAEAAAD/////AQAAAAAAAAAEAQAAACJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVy"+
"AwAAAAhEZWxlZ2F0ZQd0YXJnZXQwB21ldGhvZDADAwMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXph"+
"dGlvbkhvbGRlcitEZWxlZ2F0ZUVudHJ5IlN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xk"+
"ZXIvU3lzdGVtLlJlZmxlY3Rpb24uTWVtYmVySW5mb1NlcmlhbGl6YXRpb25Ib2xkZXIJAgAAAAkD"+
"AAAACQQAAAAEAgAAADBTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyK0RlbGVnYXRl"+
"RW50cnkHAAAABHR5cGUIYXNzZW1ibHkGdGFyZ2V0EnRhcmdldFR5cGVBc3NlbWJseQ50YXJnZXRU"+
"eXBlTmFtZQptZXRob2ROYW1lDWRlbGVnYXRlRW50cnkBAQIBAQEDMFN5c3RlbS5EZWxlZ2F0ZVNl"+
"cmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeQYFAAAAL1N5c3RlbS5SdW50aW1lLlJlbW90"+
"aW5nLk1lc3NhZ2luZy5IZWFkZXJIYW5kbGVyBgYAAABLbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAu"+
"MCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BgcAAAAH"+
"dGFyZ2V0MAkGAAAABgkAAAAPU3lzdGVtLkRlbGVnYXRlBgoAAAANRHluYW1pY0ludm9rZQoEAwAA"+
"ACJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyAwAAAAhEZWxlZ2F0ZQd0YXJnZXQw"+
"B21ldGhvZDADBwMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcitEZWxlZ2F0ZUVu"+
"dHJ5Ai9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlcgkLAAAA"+
"CQwAAAAJDQAAAAQEAAAAL1N5c3RlbS5SZWZsZWN0aW9uLk1lbWJlckluZm9TZXJpYWxpemF0aW9u"+
"SG9sZGVyBgAAAAROYW1lDEFzc2VtYmx5TmFtZQlDbGFzc05hbWUJU2lnbmF0dXJlCk1lbWJlclR5"+
"cGUQR2VuZXJpY0FyZ3VtZW50cwEBAQEAAwgNU3lzdGVtLlR5cGVbXQkKAAAACQYAAAAJCQAAAAYR"+
"AAAALFN5c3RlbS5PYmplY3QgRHluYW1pY0ludm9rZShTeXN0ZW0uT2JqZWN0W10pCAAAAAoBCwAA"+
"AAIAAAAGEgAAACBTeXN0ZW0uWG1sLlNjaGVtYS5YbWxWYWx1ZUdldHRlcgYTAAAATVN5c3RlbS5Y"+
"bWwsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdh"+
"NWM1NjE5MzRlMDg5BhQAAAAHdGFyZ2V0MAkGAAAABhYAAAAaU3lzdGVtLlJlZmxlY3Rpb24uQXNz"+
"ZW1ibHkGFwAAAARMb2FkCg8MAAAAAB4AAAJNWpAAAwAAAAQAAAD//wAAuAAAAAAAAABAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAADh+6DgC0Cc0huAFMzSFUaGlzIHByb2dy"+
"YW0gY2Fubm90IGJlIHJ1biBpbiBET1MgbW9kZS4NDQokAAAAAAAAAFBFAABMAQMAEM5wWgAAAAAA"+
"AAAA4AAiIAsBMAAAFAAAAAgAAAAAAADeMgAAACAAAABAAAAAAAAQACAAAAACAAAEAAAAAAAAAAQA"+
"AAAAAAAAAIAAAAACAAAAAAAAAwBAhQAAEAAAEAAAAAAQAAAQAAAAAAAAEAAAAAAAAAAAAAAAjDIA"+
"AE8AAAAAQAAAJAQAAAAAAAAAAAAAAAAAAAAAAAAAYAAADAAAAFQxAAAcAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAAAAAAAAAAIIAAASAAAAAAAAAAA"+
"AAAALnRleHQAAAA8EwAAACAAAAAUAAAAAgAAAAAAAAAAAAAAAAAAIAAAYC5yc3JjAAAAJAQAAABA"+
"AAAABgAAABYAAAAAAAAAAAAAAAAAAEAAAEAucmVsb2MAAAwAAAAAYAAAAAIAAAAcAAAAAAAAAAAA"+
"AAAAAABAAABCAAAAAAAAAAAAAAAAAAAAAMAyAAAAAAAASAAAAAIABQBgIwAAPA0AAAEAAAAAAAAA"+
"nDAAALgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAogIfFo0XAAAB"+
"JdAGAAAEKA8AAAp9BQAABAIoEAAACgAAAigEAAAGACpeAAIDA28RAAAKHxZZbxIAAAp9BAAABCom"+
"AAIoEwAACgAqABMwAwDDAQAAAAAAAAACcxQAAAp9AQAABAJzFQAACn0CAAAEAnMWAAAKfQMAAAQC"+
"KBcAAAoAAnsBAAAEHwwfZnMYAAAKbxkAAAoAAnsBAAAEcgEAAHBvGgAACgACewEAAAQgAwEAAB8X"+
"cxsAAApvHAAACgACewEAAAQWbx0AAAoAAnsBAAAEcg0AAHBvHgAACgACewEAAAQXbx8AAAoAAnsB"+
"AAAEAv4GBgAABnMgAAAKbyEAAAoAAnsCAAAEHwwfJ3MYAAAKbxkAAAoAAnsCAAAEch8AAHBvGgAA"+
"CgACewIAAAQgAwEAAB8UcxsAAApvHAAACgACewIAAAQXbx0AAAoAAnsDAAAEF28iAAAKAAJ7AwAA"+
"BB8JHwlzGAAACm8ZAAAKAAJ7AwAABHIxAABwbxoAAAoAAnsDAAAEH24fDXMbAAAKbxwAAAoAAnsD"+
"AAAEGG8dAAAKAAJ7AwAABHJDAABwbx4AAAoAAiAcAQAAIIoAAABzGwAACigjAAAKAAIoJAAACgJ7"+
"AwAABG8lAAAKAAIoJAAACgJ7AgAABG8lAAAKAAIoJAAACgJ7AQAABG8lAAAKAAJybwAAcCgaAAAK"+
"AAIWKCYAAAoAAignAAAKACoAEzADAFMAAAABAAARABYKKzQAAwZvKAAACgJ7BAAABAZvKAAACmEL"+
"B24CewUAAAQGlGr+ARb+AQwILAUAFg0rHQAGF1gKBgJ7BAAABG8RAAAK/gQTBBEELbgXDSsACSoA"+
"EzADAIYAAAACAAARACgpAAAKCgYsDwByhQAAcCgqAAAKJgArbAJ7AgAABG8rAAAKbxEAAAoW/gEL"+
"BywPAHLLAABwKCoAAAomACtGAgJ7AgAABG8rAAAKKAUAAAYMCCwkAHL/AABwAnsCAAAEbysAAApy"+
"KwEAcCgsAAAKKCoAAAomACsNAHJJAQBwKCoAAAomACoAAEJTSkIBAAEAAAAAAAwAAAB2Mi4wLjUw"+
"NzI3AAAAAAUAbAAAANwDAAAjfgAASAQAALwFAAAjU3RyaW5ncwAAAAAECgAAkAEAACNVUwCUCwAA"+
"EAAAACNHVUlEAAAApAsAAJgBAAAjQmxvYgAAAAAAAAACAAABV5UCIAkDAAAA+gEzABYAAAEAAAAl"+
"AAAABAAAAAYAAAAGAAAABAAAACwAAAAPAAAAAQAAAAIAAAABAAAAAQAAAAMAAAABAAAAAQAAAAAA"+
"ZQMBAAAAAAAGACYCbgQGAJMCbgQGAHMBPAQPAK0EAAAGAJsBqwMGAAkCqwMGAOoBqwMGAHoCqwMG"+
"AEYCqwMGAF8CqwMGALIBqwMGAIcBTwQGAGUBTwQGAM0BqwMKAI0D6AQKAM8D6AQKAKQF6AQKAF8D"+
"6AQGAB0FhgMGALwEhgMGAEoBbgQGADUBhgMGAAEAhgMGAAcFbgQGALYFhgMGABkBhgMGANYChgMK"+
"AJID6AQKAH4D6AQOADEF5wIOANEC5wIKAD8B6AQGAA0EhgN3AL0DAAAGAAQEPAQKAJkF6AQKACQF"+
"6AQAAAAAYwAAAAAAAQABAAEAEAAHAAAAPQABAAEAAAEAAGwAAABNAAYABwATAQAAHAAAAFkABwAH"+
"AAEAxgSXAAEAcgWbAAEA9gKfAAEABAGjAAEAIAOmADMBiwCqAFAgAAAAAIYYNgQGAAEAeSAAAAAA"+
"hgA5ABAAAQCRIAAAAACGAE4ABgACAJwgAAAAAIEAtAAGAAIAbCIAAAAAgQBAA64AAgDMIgAAAACB"+
"AO8DswADAAAAAQALAwAAAQD6AAAAAQDJAAAAAgDaAwkANgQBABEANgQGABkANgQKACkANgQQADEA"+
"NgQQADkANgQQAEEANgQQAEkANgQQAFEANgQQAFkANgQQAGEANgQVAGkANgQQAHEANgQQAKkANgQG"+
"AMEArAUaAHkANgQGANkANQMiANkA3QImAOEA1gMrAIEANgQGAIkANgQGAJEANgQGAOkANwUGAPEA"+
"NgQxAOkAngM3AOkALAEQAPkANgQxAOkAsQI9AOkAjAUBAOkAaQUQAAEBGgQVAAkBNgRDAOkAVQNJ"+
"AOkAugIVAHkAxwI9AOkA2wRQABEB5wBWAOkARQUVAOkAUgUGANkA/QRkABkB6wBvACEBhwVzAOkA"+
"YAV6ANkAFgV+AC4ACwC6AC4AEwDDAC4AGwDiAC4AIwDrAC4AKwAAAS4AMwAqAS4AOwAqAS4AQwDr"+
"AC4ASwAwAS4AUwAqAS4AWwAqAS4AYwBVAS4AawB/AUMAWwCMAWMAcwCSAQEAWAAAAAQAXABpAOQy"+
"AAAGAASAAAABAAAAAAAAAAAAAAAAAAcAAAACAAAAAAAAAAAAAACFAN4AAAAAAAIAAAAAAAAAAAAA"+
"AIUA6AQAAAAAAgAAAAAAAAAAAAAAjgDnAgAAAAAAAAAAAQAAAI4EAAAEAAMAAAAASW50MzIAQWlu"+
"Z2VpUmFpNUhhaGZlaVRoZTIAX19TdGF0aWNBcnJheUluaXRUeXBlU2l6ZT04OABBYTZiaTR1aWRh"+
"bjRzaGFoU2VlOQBKb2g4YWNob28xYWVwYWhqZWl5OQA8TW9kdWxlPgA8UHJpdmF0ZUltcGxlbWVu"+
"dGF0aW9uRGV0YWlscz4ANDIwRUVDQjZGQjJBOTREQjJDNjBERjk4QUE5Mjk2MzVENDNCNTk0QgBK"+
"b2plaTVhaHlhaDJ5YWg1bGFlSwBhaHJhaDBpd29DaG9oczJkYWk0YQBtc2NvcmxpYgBBZGQAZ2V0"+
"X0lzQXR0YWNoZWQAbWFnaWNXb3JkAFRhaThBaXAwdWEzVUxpNnpvMWplAFJ1bnRpbWVGaWVsZEhh"+
"bmRsZQBzZXRfTmFtZQBWYWx1ZVR5cGUAQnV0dG9uQmFzZQBDb21waWxlckdlbmVyYXRlZEF0dHJp"+
"YnV0ZQBHdWlkQXR0cmlidXRlAERlYnVnZ2FibGVBdHRyaWJ1dGUAQ29tVmlzaWJsZUF0dHJpYnV0"+
"ZQBBc3NlbWJseVRpdGxlQXR0cmlidXRlAEFzc2VtYmx5VHJhZGVtYXJrQXR0cmlidXRlAEFzc2Vt"+
"Ymx5RmlsZVZlcnNpb25BdHRyaWJ1dGUAQXNzZW1ibHlDb25maWd1cmF0aW9uQXR0cmlidXRlAEFz"+
"c2VtYmx5RGVzY3JpcHRpb25BdHRyaWJ1dGUAQ29tcGlsYXRpb25SZWxheGF0aW9uc0F0dHJpYnV0"+
"ZQBBc3NlbWJseVByb2R1Y3RBdHRyaWJ1dGUAQXNzZW1ibHlDb3B5cmlnaHRBdHRyaWJ1dGUAQXNz"+
"ZW1ibHlDb21wYW55QXR0cmlidXRlAFJ1bnRpbWVDb21wYXRpYmlsaXR5QXR0cmlidXRlAHNldF9T"+
"aXplAHNldF9BdXRvU2l6ZQBzZXRfQ2xpZW50U2l6ZQBTdHJpbmcAU3Vic3RyaW5nAFN5c3RlbS5E"+
"cmF3aW5nAFhhaGh1MmllU2g1aWVGb2hQaUdoAGFpbjdhZWsyVGhhZTNCb2g3b2hoAGF6NW5pZWdo"+
"YWhqMElla2FoMHBoAGdldF9MZW5ndGgATWVlQmlzaDBpb3RobzliaUJ1SmkAYWRkX0NsaWNrAExh"+
"YmVsAEFpbmdlaVJhaTVIYWhmZWlUaGUyLmRsbABDb250cm9sAFN5c3RlbQBGb3JtAEFwcGxpY2F0"+
"aW9uAHNldF9Mb2NhdGlvbgBTeXN0ZW0uUmVmbGVjdGlvbgBDb250cm9sQ29sbGVjdGlvbgBCdXR0"+
"b24AUnVuAGFoSDVlZWRlaVlvaHF1ZWk4Z29vAEVleTRqaWUwcmFlcjdNaWlwaHVvAERlYnVnZ2Vy"+
"AEV2ZW50SGFuZGxlcgBzZXRfVXNlVmlzdWFsU3R5bGVCYWNrQ29sb3IALmN0b3IAU3lzdGVtLkRp"+
"YWdub3N0aWNzAFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcwBTeXN0ZW0uUnVudGltZS5D"+
"b21waWxlclNlcnZpY2VzAEFpbmdlaVJhaTVIYWhmZWlUaGUyLnJlc291cmNlcwBEZWJ1Z2dpbmdN"+
"b2RlcwBFdmVudEFyZ3MAQW9mMHJvbzJlZWozYWhTaDFlaXMAZ2V0X0NvbnRyb2xzAFN5c3RlbS5X"+
"aW5kb3dzLkZvcm1zAGdldF9DaGFycwBSdW50aW1lSGVscGVycwBDb25jYXQAT2JqZWN0AERpYWxv"+
"Z1Jlc3VsdABQb2ludABTdXNwZW5kTGF5b3V0AFJlc3VtZUxheW91dABQZXJmb3JtTGF5b3V0AGdl"+
"dF9UZXh0AHNldF9UZXh0AHRhNHZvMkFoazV5YWVwMm9TaHV1AFNob3cAc2V0X1RhYkluZGV4AE1l"+
"c3NhZ2VCb3gAVGV4dEJveABJbml0aWFsaXplQXJyYXkAAAtiAHQAbgBPAGsAABFWAGEAbABpAGQA"+
"YQB0AGUAABFtAGEAZwBpAGMAVAB4AHQAABFtAGEAZwBpAGMATABiAGwAACtFAG4AdABlAHIAIAB0"+
"AGgAZQAgAG0AYQBnAGkAYwAgAHcAbwByAGQAOgAAFVMAbwBTAHQAZQBhAGwAdABoAHkAAEVEAG8A"+
"bgAnAHQAIAB0AHIAeQAgAHkAbwB1AHIAIABkAGkAcgB0AHkAIAB0AHIAaQBjAGsAcwAgAG8AbgAg"+
"AG0AZQAhAAEzWQBvAHUAIABtAHUAcwB0ACAAZgBpAGwAbAAgAHQAaABpAHMAIABmAGkAZQBsAGQA"+
"IQAAK1MAVQBDAEMARQBTAFMAIAAhAAoAUwB1AGIAbQBpAHQAIABOAEQASAB7AAAdfQAgAHQAbwAg"+
"AHYAYQBsAGkAZABhAHQAZQAuAABDWQBPAFUAIABEAEkARABOACcAVAAgAFMAQQBZACAAVABIAEUA"+
"IABNAEEARwBJAEMAIABXAE8AUgBEACAAIQAhACEAAQAAAN90YDtPcQVBvBRJgB7opSwABCABAQgD"+
"IAABBSABARERBCABAQ4EIAEBAgcAAgESZRFpAyAACAQgAQ4IBQABARI9BSACAQgIBSABARF5BSAB"+
"ARF9BSACARwYBiABARKAhQUgABKAiQUgAQESdQcHBQgJAgICBCABAwgFBwMCAgIDAAACBgABEYCV"+
"DgMgAA4GAAMODg4OCLd6XFYZNOCJCLA/X38R1Qo6AwYSQQMGEkUDBhJJAgYOAwYdCAMGERAEIAEC"+
"DgYgAgEcElEIAQAIAAAAAAAeAQABAFQCFldyYXBOb25FeGNlcHRpb25UaHJvd3MBCAEABwEAAAAA"+
"FAEAD0V4YW1wbGVBc3NlbWJseQAAKQEAJEV4YW1wbGUgQXNzZW1ibHkgZm9yIERvdE5ldFRvSlNj"+
"cmlwdAAABQEAAAAAJAEAH0NvcHlyaWdodCDCqSBKYW1lcyBGb3JzaGF3IDIwMTcAACkBACQ1NjU5"+
"OGYxYy02ZDg4LTQ5OTQtYTM5Mi1hZjMzN2FiZTU3NzcAAAwBAAcxLjAuMC4wAAAFAQABAAAEAQAA"+
"AAC0AAAAzsrvvgEAAACRAAAAbFN5c3RlbS5SZXNvdXJjZXMuUmVzb3VyY2VSZWFkZXIsIG1zY29y"+
"bGliLCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3"+
"YTVjNTYxOTM0ZTA4OSNTeXN0ZW0uUmVzb3VyY2VzLlJ1bnRpbWVSZXNvdXJjZVNldAIAAAAAAAAA"+
"AAAAAFBBRFBBRFC0AAAAAAAAABDOcFoAAAAAAgAAABwBAABwMQAAcBMAAFJTRFNLakRIDHHSTac9"+
"HkvNlktIAQAAAEM6XFVzZXJzXGxhYlxEb3dubG9hZHNcRG90TmV0VG9KU2NyaXB0LW1hc3RlclxF"+
"eGFtcGxlQXNzZW1ibHlcb2JqXERlYnVnXEFpbmdlaVJhaTVIYWhmZWlUaGUyLnBkYgAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtDIAAAAAAAAAAAAAzjIA"+
"AAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAyAAAAAAAAAAAAAAAAX0NvckRsbE1haW4AbXNjb3Jl"+
"ZS5kbGwAAAAAAP8lACAAEBUAAABbAAAAFAAAAAAAAAB+AAAAAAAAAD0AAAAYAAAAAgAAAFIAAAAH"+
"AAAAEQAAAFgAAAAWAAAAEgAAABUAAAByAAAAdQAAAA8AAABQAAAAOwAAABgAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAYAACAAAAAAAAAAAAAAAAAAAABAAEA"+
"AAAwAACAAAAAAAAAAAAAAAAAAAABAAAAAABIAAAAWEAAAMgDAAAAAAAAAAAAAMgDNAAAAFYAUwBf"+
"AFYARQBSAFMASQBPAE4AXwBJAE4ARgBPAAAAAAC9BO/+AAABAAAAAQAAAAAAAAABAAAAAAA/AAAA"+
"AAAAAAQAAAACAAAAAAAAAAAAAAAAAAAARAAAAAEAVgBhAHIARgBpAGwAZQBJAG4AZgBvAAAAAAAk"+
"AAQAAABUAHIAYQBuAHMAbABhAHQAaQBvAG4AAAAAAAAAsAQoAwAAAQBTAHQAcgBpAG4AZwBGAGkA"+
"bABlAEkAbgBmAG8AAAAEAwAAAQAwADAAMAAwADAANABiADAAAABiACUAAQBDAG8AbQBtAGUAbgB0"+
"AHMAAABFAHgAYQBtAHAAbABlACAAQQBzAHMAZQBtAGIAbAB5ACAAZgBvAHIAIABEAG8AdABOAGUA"+
"dABUAG8ASgBTAGMAcgBpAHAAdAAAAAAAIgABAAEAQwBvAG0AcABhAG4AeQBOAGEAbQBlAAAAAAAA"+
"AAAASAAQAAEARgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAAEUAeABhAG0AcABsAGUA"+
"QQBzAHMAZQBtAGIAbAB5AAAAMAAIAAEARgBpAGwAZQBWAGUAcgBzAGkAbwBuAAAAAAAxAC4AMAAu"+
"ADAALgAwAAAAUgAZAAEASQBuAHQAZQByAG4AYQBsAE4AYQBtAGUAAABBAGkAbgBnAGUAaQBSAGEA"+
"aQA1AEgAYQBoAGYAZQBpAFQAaABlADIALgBkAGwAbAAAAAAAYgAfAAEATABlAGcAYQBsAEMAbwBw"+
"AHkAcgBpAGcAaAB0AAAAQwBvAHAAeQByAGkAZwBoAHQAIACpACAASgBhAG0AZQBzACAARgBvAHIA"+
"cwBoAGEAdwAgADIAMAAxADcAAAAAACoAAQABAEwAZQBnAGEAbABUAHIAYQBkAGUAbQBhAHIAawBz"+
"AAAAAAAAAAAAWgAZAAEATwByAGkAZwBpAG4AYQBsAEYAaQBsAGUAbgBhAG0AZQAAAEEAaQBuAGcA"+
"ZQBpAFIAYQBpADUASABhAGgAZgBlAGkAVABoAGUAMgAuAGQAbABsAAAAAABAABAAAQBQAHIAbwBk"+
"AHUAYwB0AE4AYQBtAGUAAAAAAEUAeABhAG0AcABsAGUAQQBzAHMAZQBtAGIAbAB5AAAANAAIAAEA"+
"UAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMQAuADAALgAwAC4AMAAAADgACAABAEEAcwBz"+
"AGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAxAC4AMAAuADAALgAwAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAADAAAAwAAADgMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+
"AAAAAAAAAAAAAAABDQAAAAQAAAAJFwAAAAkGAAAACRYAAAAGGgAAACdTeXN0ZW0uUmVmbGVjdGlv"+
"bi5Bc3NlbWJseSBMb2FkKEJ5dGVbXSkIAAAACgsA";
var aiQu9oof = 'AingeiRai5HahfeiThe2';

try {
	var pohceiC7 = Trololo(dei0eiFu);
	var giigh0Ku = new ActiveXObject('System.Runtime.Serialization.Formatters.Binary.BinaryFormatter');
	var eeB9Eisa = new ActiveXObject('System.Collections.ArrayList');
	var Aik6iulo = giigh0Ku.Deserialize_2(pohceiC7);
	eeB9Eisa.Add(undefined);
	var Aegh5xei = Aik6iulo.DynamicInvoke(eeB9Eisa.ToArray()).CreateInstance(aiQu9oof);
	
	Aegh5xei.Aa6bi4uidan4shahSee9(dei0eiFu);
	Aegh5xei.Joh8achoo1aepahjeiy9();

} catch (e) {
    debug(e.message);
}

C’est une obfusquation assez “polie”. Voici ce qu’il y a à corriger :

Une fois ces modifications effectuées on obtient :

/* global ActiveXObject */

// Print debug message on error output
function debug(s) { console.error(s); }

// Takes an Active X compatible program encoded in base64
// Decode it
// Map it into memory
// Return the memory chunk
function mapCodeInMemory(program) {
  var asciiEncoding = new ActiveXObject('System.Text.ASCIIEncoding');
  var byteCount2OfProgram = asciiEncoding.GetByteCount_2(program);
  var bytes4Program = asciiEncoding.GetBytes_4(program);
  var base64Transform = new ActiveXObject('System.Security.Cryptography.FromBase64Transform');

  bytes4Program = base64Transform.TransformFinalBlock(bytes4Program, 0, byteCount2OfProgram);

  var memoryStream = new ActiveXObject('System.IO.MemoryStream');
  memoryStream.Write(bytes4Program, 0, (byteCount2OfProgram / 4) * 3);
  memoryStream.Position = 0;
  return memoryStream;
}

// Active X program in base64
var bigBase64 =
'AAEAAAD/////AQAAAAAAAAAEAQAAACJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVy'+
'AwAAAAhEZWxlZ2F0ZQd0YXJnZXQwB21ldGhvZDADAwMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXph'+
'dGlvbkhvbGRlcitEZWxlZ2F0ZUVudHJ5IlN5c3RlbS5EZWxlZ2F0ZVNlcmlhbGl6YXRpb25Ib2xk'+
'ZXIvU3lzdGVtLlJlZmxlY3Rpb24uTWVtYmVySW5mb1NlcmlhbGl6YXRpb25Ib2xkZXIJAgAAAAkD'+
'AAAACQQAAAAEAgAAADBTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyK0RlbGVnYXRl'+
'RW50cnkHAAAABHR5cGUIYXNzZW1ibHkGdGFyZ2V0EnRhcmdldFR5cGVBc3NlbWJseQ50YXJnZXRU'+
'eXBlTmFtZQptZXRob2ROYW1lDWRlbGVnYXRlRW50cnkBAQIBAQEDMFN5c3RlbS5EZWxlZ2F0ZVNl'+
'cmlhbGl6YXRpb25Ib2xkZXIrRGVsZWdhdGVFbnRyeQYFAAAAL1N5c3RlbS5SdW50aW1lLlJlbW90'+
'aW5nLk1lc3NhZ2luZy5IZWFkZXJIYW5kbGVyBgYAAABLbXNjb3JsaWIsIFZlcnNpb249Mi4wLjAu'+
'MCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BgcAAAAH'+
'dGFyZ2V0MAkGAAAABgkAAAAPU3lzdGVtLkRlbGVnYXRlBgoAAAANRHluYW1pY0ludm9rZQoEAwAA'+
'ACJTeXN0ZW0uRGVsZWdhdGVTZXJpYWxpemF0aW9uSG9sZGVyAwAAAAhEZWxlZ2F0ZQd0YXJnZXQw'+
'B21ldGhvZDADBwMwU3lzdGVtLkRlbGVnYXRlU2VyaWFsaXphdGlvbkhvbGRlcitEZWxlZ2F0ZUVu'+
'dHJ5Ai9TeXN0ZW0uUmVmbGVjdGlvbi5NZW1iZXJJbmZvU2VyaWFsaXphdGlvbkhvbGRlcgkLAAAA'+
'CQwAAAAJDQAAAAQEAAAAL1N5c3RlbS5SZWZsZWN0aW9uLk1lbWJlckluZm9TZXJpYWxpemF0aW9u'+
'SG9sZGVyBgAAAAROYW1lDEFzc2VtYmx5TmFtZQlDbGFzc05hbWUJU2lnbmF0dXJlCk1lbWJlclR5'+
'cGUQR2VuZXJpY0FyZ3VtZW50cwEBAQEAAwgNU3lzdGVtLlR5cGVbXQkKAAAACQYAAAAJCQAAAAYR'+
'AAAALFN5c3RlbS5PYmplY3QgRHluYW1pY0ludm9rZShTeXN0ZW0uT2JqZWN0W10pCAAAAAoBCwAA'+
'AAIAAAAGEgAAACBTeXN0ZW0uWG1sLlNjaGVtYS5YbWxWYWx1ZUdldHRlcgYTAAAATVN5c3RlbS5Y'+
'bWwsIFZlcnNpb249Mi4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdh'+
'NWM1NjE5MzRlMDg5BhQAAAAHdGFyZ2V0MAkGAAAABhYAAAAaU3lzdGVtLlJlZmxlY3Rpb24uQXNz'+
'ZW1ibHkGFwAAAARMb2FkCg8MAAAAAB4AAAJNWpAAAwAAAAQAAAD//wAAuAAAAAAAAABAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAADh+6DgC0Cc0huAFMzSFUaGlzIHByb2dy'+
'YW0gY2Fubm90IGJlIHJ1biBpbiBET1MgbW9kZS4NDQokAAAAAAAAAFBFAABMAQMAEM5wWgAAAAAA'+
'AAAA4AAiIAsBMAAAFAAAAAgAAAAAAADeMgAAACAAAABAAAAAAAAQACAAAAACAAAEAAAAAAAAAAQA'+
'AAAAAAAAAIAAAAACAAAAAAAAAwBAhQAAEAAAEAAAAAAQAAAQAAAAAAAAEAAAAAAAAAAAAAAAjDIA'+
'AE8AAAAAQAAAJAQAAAAAAAAAAAAAAAAAAAAAAAAAYAAADAAAAFQxAAAcAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAAAAAAAAAAIIAAASAAAAAAAAAAA'+
'AAAALnRleHQAAAA8EwAAACAAAAAUAAAAAgAAAAAAAAAAAAAAAAAAIAAAYC5yc3JjAAAAJAQAAABA'+
'AAAABgAAABYAAAAAAAAAAAAAAAAAAEAAAEAucmVsb2MAAAwAAAAAYAAAAAIAAAAcAAAAAAAAAAAA'+
'AAAAAABAAABCAAAAAAAAAAAAAAAAAAAAAMAyAAAAAAAASAAAAAIABQBgIwAAPA0AAAEAAAAAAAAA'+
'nDAAALgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAogIfFo0XAAAB'+
'JdAGAAAEKA8AAAp9BQAABAIoEAAACgAAAigEAAAGACpeAAIDA28RAAAKHxZZbxIAAAp9BAAABCom'+
'AAIoEwAACgAqABMwAwDDAQAAAAAAAAACcxQAAAp9AQAABAJzFQAACn0CAAAEAnMWAAAKfQMAAAQC'+
'KBcAAAoAAnsBAAAEHwwfZnMYAAAKbxkAAAoAAnsBAAAEcgEAAHBvGgAACgACewEAAAQgAwEAAB8X'+
'cxsAAApvHAAACgACewEAAAQWbx0AAAoAAnsBAAAEcg0AAHBvHgAACgACewEAAAQXbx8AAAoAAnsB'+
'AAAEAv4GBgAABnMgAAAKbyEAAAoAAnsCAAAEHwwfJ3MYAAAKbxkAAAoAAnsCAAAEch8AAHBvGgAA'+
'CgACewIAAAQgAwEAAB8UcxsAAApvHAAACgACewIAAAQXbx0AAAoAAnsDAAAEF28iAAAKAAJ7AwAA'+
'BB8JHwlzGAAACm8ZAAAKAAJ7AwAABHIxAABwbxoAAAoAAnsDAAAEH24fDXMbAAAKbxwAAAoAAnsD'+
'AAAEGG8dAAAKAAJ7AwAABHJDAABwbx4AAAoAAiAcAQAAIIoAAABzGwAACigjAAAKAAIoJAAACgJ7'+
'AwAABG8lAAAKAAIoJAAACgJ7AgAABG8lAAAKAAIoJAAACgJ7AQAABG8lAAAKAAJybwAAcCgaAAAK'+
'AAIWKCYAAAoAAignAAAKACoAEzADAFMAAAABAAARABYKKzQAAwZvKAAACgJ7BAAABAZvKAAACmEL'+
'B24CewUAAAQGlGr+ARb+AQwILAUAFg0rHQAGF1gKBgJ7BAAABG8RAAAK/gQTBBEELbgXDSsACSoA'+
'EzADAIYAAAACAAARACgpAAAKCgYsDwByhQAAcCgqAAAKJgArbAJ7AgAABG8rAAAKbxEAAAoW/gEL'+
'BywPAHLLAABwKCoAAAomACtGAgJ7AgAABG8rAAAKKAUAAAYMCCwkAHL/AABwAnsCAAAEbysAAApy'+
'KwEAcCgsAAAKKCoAAAomACsNAHJJAQBwKCoAAAomACoAAEJTSkIBAAEAAAAAAAwAAAB2Mi4wLjUw'+
'NzI3AAAAAAUAbAAAANwDAAAjfgAASAQAALwFAAAjU3RyaW5ncwAAAAAECgAAkAEAACNVUwCUCwAA'+
'EAAAACNHVUlEAAAApAsAAJgBAAAjQmxvYgAAAAAAAAACAAABV5UCIAkDAAAA+gEzABYAAAEAAAAl'+
'AAAABAAAAAYAAAAGAAAABAAAACwAAAAPAAAAAQAAAAIAAAABAAAAAQAAAAMAAAABAAAAAQAAAAAA'+
'ZQMBAAAAAAAGACYCbgQGAJMCbgQGAHMBPAQPAK0EAAAGAJsBqwMGAAkCqwMGAOoBqwMGAHoCqwMG'+
'AEYCqwMGAF8CqwMGALIBqwMGAIcBTwQGAGUBTwQGAM0BqwMKAI0D6AQKAM8D6AQKAKQF6AQKAF8D'+
'6AQGAB0FhgMGALwEhgMGAEoBbgQGADUBhgMGAAEAhgMGAAcFbgQGALYFhgMGABkBhgMGANYChgMK'+
'AJID6AQKAH4D6AQOADEF5wIOANEC5wIKAD8B6AQGAA0EhgN3AL0DAAAGAAQEPAQKAJkF6AQKACQF'+
'6AQAAAAAYwAAAAAAAQABAAEAEAAHAAAAPQABAAEAAAEAAGwAAABNAAYABwATAQAAHAAAAFkABwAH'+
'AAEAxgSXAAEAcgWbAAEA9gKfAAEABAGjAAEAIAOmADMBiwCqAFAgAAAAAIYYNgQGAAEAeSAAAAAA'+
'hgA5ABAAAQCRIAAAAACGAE4ABgACAJwgAAAAAIEAtAAGAAIAbCIAAAAAgQBAA64AAgDMIgAAAACB'+
'AO8DswADAAAAAQALAwAAAQD6AAAAAQDJAAAAAgDaAwkANgQBABEANgQGABkANgQKACkANgQQADEA'+
'NgQQADkANgQQAEEANgQQAEkANgQQAFEANgQQAFkANgQQAGEANgQVAGkANgQQAHEANgQQAKkANgQG'+
'AMEArAUaAHkANgQGANkANQMiANkA3QImAOEA1gMrAIEANgQGAIkANgQGAJEANgQGAOkANwUGAPEA'+
'NgQxAOkAngM3AOkALAEQAPkANgQxAOkAsQI9AOkAjAUBAOkAaQUQAAEBGgQVAAkBNgRDAOkAVQNJ'+
'AOkAugIVAHkAxwI9AOkA2wRQABEB5wBWAOkARQUVAOkAUgUGANkA/QRkABkB6wBvACEBhwVzAOkA'+
'YAV6ANkAFgV+AC4ACwC6AC4AEwDDAC4AGwDiAC4AIwDrAC4AKwAAAS4AMwAqAS4AOwAqAS4AQwDr'+
'AC4ASwAwAS4AUwAqAS4AWwAqAS4AYwBVAS4AawB/AUMAWwCMAWMAcwCSAQEAWAAAAAQAXABpAOQy'+
'AAAGAASAAAABAAAAAAAAAAAAAAAAAAcAAAACAAAAAAAAAAAAAACFAN4AAAAAAAIAAAAAAAAAAAAA'+
'AIUA6AQAAAAAAgAAAAAAAAAAAAAAjgDnAgAAAAAAAAAAAQAAAI4EAAAEAAMAAAAASW50MzIAQWlu'+
'Z2VpUmFpNUhhaGZlaVRoZTIAX19TdGF0aWNBcnJheUluaXRUeXBlU2l6ZT04OABBYTZiaTR1aWRh'+
'bjRzaGFoU2VlOQBKb2g4YWNob28xYWVwYWhqZWl5OQA8TW9kdWxlPgA8UHJpdmF0ZUltcGxlbWVu'+
'dGF0aW9uRGV0YWlscz4ANDIwRUVDQjZGQjJBOTREQjJDNjBERjk4QUE5Mjk2MzVENDNCNTk0QgBK'+
'b2plaTVhaHlhaDJ5YWg1bGFlSwBhaHJhaDBpd29DaG9oczJkYWk0YQBtc2NvcmxpYgBBZGQAZ2V0'+
'X0lzQXR0YWNoZWQAbWFnaWNXb3JkAFRhaThBaXAwdWEzVUxpNnpvMWplAFJ1bnRpbWVGaWVsZEhh'+
'bmRsZQBzZXRfTmFtZQBWYWx1ZVR5cGUAQnV0dG9uQmFzZQBDb21waWxlckdlbmVyYXRlZEF0dHJp'+
'YnV0ZQBHdWlkQXR0cmlidXRlAERlYnVnZ2FibGVBdHRyaWJ1dGUAQ29tVmlzaWJsZUF0dHJpYnV0'+
'ZQBBc3NlbWJseVRpdGxlQXR0cmlidXRlAEFzc2VtYmx5VHJhZGVtYXJrQXR0cmlidXRlAEFzc2Vt'+
'Ymx5RmlsZVZlcnNpb25BdHRyaWJ1dGUAQXNzZW1ibHlDb25maWd1cmF0aW9uQXR0cmlidXRlAEFz'+
'c2VtYmx5RGVzY3JpcHRpb25BdHRyaWJ1dGUAQ29tcGlsYXRpb25SZWxheGF0aW9uc0F0dHJpYnV0'+
'ZQBBc3NlbWJseVByb2R1Y3RBdHRyaWJ1dGUAQXNzZW1ibHlDb3B5cmlnaHRBdHRyaWJ1dGUAQXNz'+
'ZW1ibHlDb21wYW55QXR0cmlidXRlAFJ1bnRpbWVDb21wYXRpYmlsaXR5QXR0cmlidXRlAHNldF9T'+
'aXplAHNldF9BdXRvU2l6ZQBzZXRfQ2xpZW50U2l6ZQBTdHJpbmcAU3Vic3RyaW5nAFN5c3RlbS5E'+
'cmF3aW5nAFhhaGh1MmllU2g1aWVGb2hQaUdoAGFpbjdhZWsyVGhhZTNCb2g3b2hoAGF6NW5pZWdo'+
'YWhqMElla2FoMHBoAGdldF9MZW5ndGgATWVlQmlzaDBpb3RobzliaUJ1SmkAYWRkX0NsaWNrAExh'+
'YmVsAEFpbmdlaVJhaTVIYWhmZWlUaGUyLmRsbABDb250cm9sAFN5c3RlbQBGb3JtAEFwcGxpY2F0'+
'aW9uAHNldF9Mb2NhdGlvbgBTeXN0ZW0uUmVmbGVjdGlvbgBDb250cm9sQ29sbGVjdGlvbgBCdXR0'+
'b24AUnVuAGFoSDVlZWRlaVlvaHF1ZWk4Z29vAEVleTRqaWUwcmFlcjdNaWlwaHVvAERlYnVnZ2Vy'+
'AEV2ZW50SGFuZGxlcgBzZXRfVXNlVmlzdWFsU3R5bGVCYWNrQ29sb3IALmN0b3IAU3lzdGVtLkRp'+
'YWdub3N0aWNzAFN5c3RlbS5SdW50aW1lLkludGVyb3BTZXJ2aWNlcwBTeXN0ZW0uUnVudGltZS5D'+
'b21waWxlclNlcnZpY2VzAEFpbmdlaVJhaTVIYWhmZWlUaGUyLnJlc291cmNlcwBEZWJ1Z2dpbmdN'+
'b2RlcwBFdmVudEFyZ3MAQW9mMHJvbzJlZWozYWhTaDFlaXMAZ2V0X0NvbnRyb2xzAFN5c3RlbS5X'+
'aW5kb3dzLkZvcm1zAGdldF9DaGFycwBSdW50aW1lSGVscGVycwBDb25jYXQAT2JqZWN0AERpYWxv'+
'Z1Jlc3VsdABQb2ludABTdXNwZW5kTGF5b3V0AFJlc3VtZUxheW91dABQZXJmb3JtTGF5b3V0AGdl'+
'dF9UZXh0AHNldF9UZXh0AHRhNHZvMkFoazV5YWVwMm9TaHV1AFNob3cAc2V0X1RhYkluZGV4AE1l'+
'c3NhZ2VCb3gAVGV4dEJveABJbml0aWFsaXplQXJyYXkAAAtiAHQAbgBPAGsAABFWAGEAbABpAGQA'+
'YQB0AGUAABFtAGEAZwBpAGMAVAB4AHQAABFtAGEAZwBpAGMATABiAGwAACtFAG4AdABlAHIAIAB0'+
'AGgAZQAgAG0AYQBnAGkAYwAgAHcAbwByAGQAOgAAFVMAbwBTAHQAZQBhAGwAdABoAHkAAEVEAG8A'+
'bgAnAHQAIAB0AHIAeQAgAHkAbwB1AHIAIABkAGkAcgB0AHkAIAB0AHIAaQBjAGsAcwAgAG8AbgAg'+
'AG0AZQAhAAEzWQBvAHUAIABtAHUAcwB0ACAAZgBpAGwAbAAgAHQAaABpAHMAIABmAGkAZQBsAGQA'+
'IQAAK1MAVQBDAEMARQBTAFMAIAAhAAoAUwB1AGIAbQBpAHQAIABOAEQASAB7AAAdfQAgAHQAbwAg'+
'AHYAYQBsAGkAZABhAHQAZQAuAABDWQBPAFUAIABEAEkARABOACcAVAAgAFMAQQBZACAAVABIAEUA'+
'IABNAEEARwBJAEMAIABXAE8AUgBEACAAIQAhACEAAQAAAN90YDtPcQVBvBRJgB7opSwABCABAQgD'+
'IAABBSABARERBCABAQ4EIAEBAgcAAgESZRFpAyAACAQgAQ4IBQABARI9BSACAQgIBSABARF5BSAB'+
'ARF9BSACARwYBiABARKAhQUgABKAiQUgAQESdQcHBQgJAgICBCABAwgFBwMCAgIDAAACBgABEYCV'+
'DgMgAA4GAAMODg4OCLd6XFYZNOCJCLA/X38R1Qo6AwYSQQMGEkUDBhJJAgYOAwYdCAMGERAEIAEC'+
'DgYgAgEcElEIAQAIAAAAAAAeAQABAFQCFldyYXBOb25FeGNlcHRpb25UaHJvd3MBCAEABwEAAAAA'+
'FAEAD0V4YW1wbGVBc3NlbWJseQAAKQEAJEV4YW1wbGUgQXNzZW1ibHkgZm9yIERvdE5ldFRvSlNj'+
'cmlwdAAABQEAAAAAJAEAH0NvcHlyaWdodCDCqSBKYW1lcyBGb3JzaGF3IDIwMTcAACkBACQ1NjU5'+
'OGYxYy02ZDg4LTQ5OTQtYTM5Mi1hZjMzN2FiZTU3NzcAAAwBAAcxLjAuMC4wAAAFAQABAAAEAQAA'+
'AAC0AAAAzsrvvgEAAACRAAAAbFN5c3RlbS5SZXNvdXJjZXMuUmVzb3VyY2VSZWFkZXIsIG1zY29y'+
'bGliLCBWZXJzaW9uPTIuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3'+
'YTVjNTYxOTM0ZTA4OSNTeXN0ZW0uUmVzb3VyY2VzLlJ1bnRpbWVSZXNvdXJjZVNldAIAAAAAAAAA'+
'AAAAAFBBRFBBRFC0AAAAAAAAABDOcFoAAAAAAgAAABwBAABwMQAAcBMAAFJTRFNLakRIDHHSTac9'+
'HkvNlktIAQAAAEM6XFVzZXJzXGxhYlxEb3dubG9hZHNcRG90TmV0VG9KU2NyaXB0LW1hc3RlclxF'+
'eGFtcGxlQXNzZW1ibHlcb2JqXERlYnVnXEFpbmdlaVJhaTVIYWhmZWlUaGUyLnBkYgAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtDIAAAAAAAAAAAAAzjIA'+
'AAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAyAAAAAAAAAAAAAAAAX0NvckRsbE1haW4AbXNjb3Jl'+
'ZS5kbGwAAAAAAP8lACAAEBUAAABbAAAAFAAAAAAAAAB+AAAAAAAAAD0AAAAYAAAAAgAAAFIAAAAH'+
'AAAAEQAAAFgAAAAWAAAAEgAAABUAAAByAAAAdQAAAA8AAABQAAAAOwAAABgAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAYAACAAAAAAAAAAAAAAAAAAAABAAEA'+
'AAAwAACAAAAAAAAAAAAAAAAAAAABAAAAAABIAAAAWEAAAMgDAAAAAAAAAAAAAMgDNAAAAFYAUwBf'+
'AFYARQBSAFMASQBPAE4AXwBJAE4ARgBPAAAAAAC9BO/+AAABAAAAAQAAAAAAAAABAAAAAAA/AAAA'+
'AAAAAAQAAAACAAAAAAAAAAAAAAAAAAAARAAAAAEAVgBhAHIARgBpAGwAZQBJAG4AZgBvAAAAAAAk'+
'AAQAAABUAHIAYQBuAHMAbABhAHQAaQBvAG4AAAAAAAAAsAQoAwAAAQBTAHQAcgBpAG4AZwBGAGkA'+
'bABlAEkAbgBmAG8AAAAEAwAAAQAwADAAMAAwADAANABiADAAAABiACUAAQBDAG8AbQBtAGUAbgB0'+
'AHMAAABFAHgAYQBtAHAAbABlACAAQQBzAHMAZQBtAGIAbAB5ACAAZgBvAHIAIABEAG8AdABOAGUA'+
'dABUAG8ASgBTAGMAcgBpAHAAdAAAAAAAIgABAAEAQwBvAG0AcABhAG4AeQBOAGEAbQBlAAAAAAAA'+
'AAAASAAQAAEARgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAAEUAeABhAG0AcABsAGUA'+
'QQBzAHMAZQBtAGIAbAB5AAAAMAAIAAEARgBpAGwAZQBWAGUAcgBzAGkAbwBuAAAAAAAxAC4AMAAu'+
'ADAALgAwAAAAUgAZAAEASQBuAHQAZQByAG4AYQBsAE4AYQBtAGUAAABBAGkAbgBnAGUAaQBSAGEA'+
'aQA1AEgAYQBoAGYAZQBpAFQAaABlADIALgBkAGwAbAAAAAAAYgAfAAEATABlAGcAYQBsAEMAbwBw'+
'AHkAcgBpAGcAaAB0AAAAQwBvAHAAeQByAGkAZwBoAHQAIACpACAASgBhAG0AZQBzACAARgBvAHIA'+
'cwBoAGEAdwAgADIAMAAxADcAAAAAACoAAQABAEwAZQBnAGEAbABUAHIAYQBkAGUAbQBhAHIAawBz'+
'AAAAAAAAAAAAWgAZAAEATwByAGkAZwBpAG4AYQBsAEYAaQBsAGUAbgBhAG0AZQAAAEEAaQBuAGcA'+
'ZQBpAFIAYQBpADUASABhAGgAZgBlAGkAVABoAGUAMgAuAGQAbABsAAAAAABAABAAAQBQAHIAbwBk'+
'AHUAYwB0AE4AYQBtAGUAAAAAAEUAeABhAG0AcABsAGUAQQBzAHMAZQBtAGIAbAB5AAAANAAIAAEA'+
'UAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMQAuADAALgAwAC4AMAAAADgACAABAEEAcwBz'+
'AGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAxAC4AMAAuADAALgAwAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAADAAAAwAAADgMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'+
'AAAAAAAAAAAAAAABDQAAAAQAAAAJFwAAAAkGAAAACRYAAAAGGgAAACdTeXN0ZW0uUmVmbGVjdGlv'+
'bi5Bc3NlbWJseSBMb2FkKEJ5dGVbXSkIAAAACgsA';

// Namespace of the Active X program
// Not obvious right now
var namespace = 'AingeiRai5HahfeiThe2';

try {
  // Get the decoded + mapped program
  var memory = mapCodeInMemory(bigBase64);
  var binaryFormatter = new ActiveXObject('System.Runtime.Serialization.Formatters.Binary.BinaryFormatter');
  var arrayList = new ActiveXObject('System.Collections.ArrayList');
  var deserialized = binaryFormatter.Deserialize_2(memory);

  // Doesn't seem to do much...
  arrayList.Add(undefined);

  // Invoke it (execution actually doesn't start here)
  var dynamicInvokation = deserialized.DynamicInvoke(arrayList.ToArray()).CreateInstance(namespace);

  // Call some method, we'll see that later
  dynamicInvokation.Aa6bi4uidan4shahSee9(bigBase64);
  // Call entry point
  dynamicInvokation.Joh8achoo1aepahjeiy9();
} catch (e) { debug(e.message); }

Beaucoup mieux ! On peut maintenant se demander ce que fait le code…

Note : D’un point de vue méthodologique, il n’est pas très malin de faire des modifications sur un code obfusqué avant de l’avoir exécuté au moins une fois afin de valider son fonctionnement. En effet, on risque de casser le code en cherchant à le rendre plus lisible. Sauf que si on ne sait pas ce que ce code est censé faire, on a plus de point de comparaison nous permettant de savoir si le code n’est pas fonctionnel dans l’absolu ou si c’est nous qui l’avons cassé.

Note : Quand on travaille sur du code Javascript obfusqué, on a parfois envie de le réécrire d’une manière super propre avec des let, des const, des arrow functions, etc… D’une manière générale il vaut mieux éviter car on ne sait pas pour quel moteur Javascript a été écrit ce code et donc quels éléments syntaxiques il supporte. Il faut rendre le code explicite sans risquer d’altérer son fonctionnement.

Il s’agit d’un wrapper autour d’un composant Active X. La grosse chaine de caractères en base64 est en fait le programme qui est décodé à la volée puis chargé et exécuté. Les appels à l’API Active X sont assez explicites. En revanche, j’ai été perturbé ces deux lignes là :

// Call some method, we'll see that later
dynamicInvokation.Aa6bi4uidan4shahSee9(bigBase64);
// Call entry point
dynamicInvokation.Joh8achoo1aepahjeiy9();

La variable dynamicInvokation représente ici le programme en cours d’exécution. Deux méthodes avec des noms pas du tout explicites sont appelées et pour l’instant il est assez difficile de prédire leur fonctionnement. On en reparlera plus tard. Il en va de meme pour la variable namespace.

J’ai ensuite essayé d’exécuter le code. En faisant quelques recherches, je me suis rendu compte que les composants Active X tournent plus ou moins exclusivement dans Internet Explorer (IE). Je démarre la machine virtuelle Windows et j’autorise IE à exécuter tous les composants Active X.

Je charge le script via une page HTML et :

Le crackme apparait

Une boite de dialogue qui nous demande un mot de passe… Il va donc falloir analyse le programme Active X. Voilà ce qu’on a lorsqu’on décode le base64 :

On reconnait du PE

Le script decode.js ne fait qu’afficher l’ensemble des chaines base64, une fois concaténées.

On reconnait du PE : MZ, PE, This program cannot be run in DOS mode.

Je redirige la sortie vers un fichier mais file ne semble pas identifier le PE. Il détecte une police de caractères à la place. Le programme doit etre une sorte d’archive Active X. J’utilise donc Foremost pour extraire une DLL :

On extrait une DLL

Je voulais charger la DLL dans IDA mais un pote m’a alors parlé de dnSpy. C’est un outil pour analyser du .NET compilé et c’est plutot le feu.

dnSpy est assez simple d’utilisation : on se balade dans les objets et les structures de données comme dans un explorateur de fichier. Aussi, super utile, on peut aller chercher des cross references et répondre super facilement à des questions genre : quelle fonction utilise cette variable ? Ou bien, quelle fonction initialise cette variable ? On en profite pour remarquer que le contenu de la variable que j’ai nommé namespace plus haute est alors présente de partout. ;)

On se balade un peu et on tombe rapidement sur la routine de vérification du mot de passe :

Routine de vérification

Admettons trois suites d’octets : A, B, C. A est passé en paramètre à la fonction.

Pour chaque octet de la suite B, on récupère son homologue dans la suite A. On XOR les deux octets puis on compare le résulat à l’octet correspondant dans la suite C. Si le résultat ne correspond pas, on se prend un message d’erreur. Sinon, on continue. Si on arrive à la fin de la routine, alors le mot de passe est correct.

En bref, c’est un bete XOR. Le programme se sert de notre entrée (A) comme d’une clé et XOR de la donnée (B) avec. Si cette donnée correspond avec ce qui est attendu (C), on est bon.

XOR est symétrique. Ainsi, si on connait B et C, on peut retrouver A en les XORant entre eux.

C est facile à trouver, il suffit de cliquer dessus dans dnSpy pour tomber sur ce tableau :

Tableau en dur

Il ne nous reste plus qu’à trouver B. Si on double clique dessus, on arrive sur une référence (référence/pointeur, je suis pas trop sur) et non un tableau en dur. B est donc construit dynamiquement. DnSpy nous permet de trouver la fonction qui initialise B (Clique droit sur une fonction > Analyze). Problème, cette fonction n’est jamais appelée dans le code :

On analyse

Je récapitule. La routine de vérification MeeBish... utilise une variable appelée Tai8Aip... (B) qui est assignée dans la fonction Aa6bi4.... Cette fonction n’est jamais appelée (champ Used by vide). Regardons tout de meme sa définition :

Un simple setter

La fonction est donc un simple setter qui récupère un paramètre pour en en extraire les 22 derniers octets et les assigner à B.

La fonction n’est jamais appelée dans la DLL mais elle est appelée par le code Javascript que nous avons analysés précédemment ! Cette ligne, dont on ne comprenait pas trop l’utilité :

// Call some method, we'll see that later
dynamicInvokation.Aa6bi4uidan4shahSee9(bigBase64);

Le nom de fonction correspond ! Et quel est le paramètre passé ? Le programme chiffré en base64… La variable B correspond donc aux 22 derniers caractères du programme lui meme, une fois chiffré en base64. Soit :

Les octets convoités

Y’a plus qu’à XORer ! Petit programme en C qui met bien :

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
  const char *const hot = "FkKEJ5dGVbXSkIAAAACgsA";
  const char boom[] = {
    0x15, 0x5b, 20, 0, 0x7e, 0, 0x3d, 0x18, 2, 0x52, 7,
    0x11, 0x58, 0x16, 0x12, 0x15, 0x72, 0x75, 15, 80, 0x3b, 0x18
  };
  char bigShaq[100] = {};

  for (size_t i = 0; i < strlen(hot); ++i)
    bigShaq[i] = hot[i] ^ boom[i];

  printf("%s\n", bigShaq);

  return EXIT_SUCCESS;
}

On exécute et on valide :

On a le mot de passe

On a le flag

Flag : NDH{S0_E45Y_T0_B3_ST34L7HY}.