Bonjour tout le monde,

Après une petite absence, je vous propose aujourd’hui une profonde analyse de DotNetShield, un packer codé par le reverser CodeCracker. C’est un des meilleurs packer pour le .net, car il ne peut pas se faire unpacker uniquement par MegaDumper. Je vais donc vous expliquer comment fonctionne la protection !

 

Screenshot_1

Il y a donc une option Pack et Obfuscate.

On va ici analyser la fonction pack car la fonction obfuscate peut être facilement retirée.

Target utilisé : http://ge.tt/52moSql2

Pour comprendre comment fonctionnait la protection, j’ai regardé le code source de l’application.

Regardons premièrement l’entry point :

Screenshot_2

On voit que tout d’abord, la méthode ResProt est appellée.

Screenshot_3.png

Voilà la méthode. Un petit bordel. Bon pour résumer, les resources sont encryptées avec l’algorithme LZMA.

Il utilise ensuite la méthode AppDomain.CurrentDomain.SetData(string name, object data);

Le plus intéressant ici, c’est cette ligne-ci : AppDomain.CurrentDomain.SetData(« allstrings », data);

En effet, c’est là que vont être placées toutes les strings.

Si on tente de debug avec dnSpy, on a ceci qui apparaît :

Screenshot_4.png

L’anti-debug se trouve dans le exe. Cherchez un peu et vous trouverez ça :

Screenshot_5

Il vous suffit de supprimer le call à cette méthode.

C’est maintenant qu’il faut commencer à s’accrocher !

Dumper le exe avec MegaDumper. Aller dans votre dossier Dumps\UnknownName.

Ouvre n’importe quel exe dans SAE pour trouver quel est le bon (en gros celui qui est visible dans SAE)

 

Okay donc maintenant que le packer est supprimé, on peut regarder les strings.

Screenshot_2

On suit le call :

Screenshot_3

On reconnait la méthode AppDomain.CurrentDomain mais cette fois ce n’est plus SetData mais GetData. Mais si on réfléchi un peu, l’exe ne va pas se lancer vu que la méthode SetData n’est plus dans l’exe !

Comment va-t-on faire alors?

On va coder un petit tool qui va set les data. Donc premièrement il faut récupérer les data.

Retourner dans le dossiers Dump et ouvre le exe dans dnSpy. Retrouver la méthode ResProt et vous verrez qu’elle a un peu changée :

Screenshot_4

On va placer un breakpoint sur stream.Close (la ligne juste après le CurrentDomain.SetData)

Ouvrez les locals et cherchez data, et là vous verrez tout vos strings en clair !

Screenshot_5

Sélectionnez de data jusqu’à votre dernier strings et faites copy Value :

Screenshot_6

Et collez le résultat dans un fichier .txt

Screenshot_7

Voilà, maintenant, je vous ai codé une méthode à injecter pour injecter ses strings, voilà à quoi elle ressemble :

Screenshot_9

En gros on lit le fichier txt, on retire tout les «  » des strings et on set les data avec chaque strings. Il ne reste plus qu’à injecter tout cela dans le exe (pour injecter, vous pouvez utiliser l’inject helper de confuserex, voici un exemple : https://github.com/XenocodeRCE/AntiTamperEOF/blob/master/Form1.cs (Regardez la méthode AddCall pour voir comment il ajoute une méthode dans un exe). Puis vous fichier l’entry point et le exe devrait fonctionner !

Mais, je vous ai fait un string decryptor directement !

Lien : https://github.com/MindSystemm/NetShield-String-Decryptor/

Attention, le string decryptor est à utiliser sur le exe qui se trouve dans /Dump/UnknownName

Voilà, je pense avoir été assez clair mais si il reste certains zone d’ombres, faites le moi savoir sur skype : MindSystemm

 

 

 

 

 

Publicités