Question:
Le virus utilise un cryptage XOR personnalisé et a besoin d'aide pour le casser / inverser EXE
user3546043
2014-05-03 09:08:39 UTC
view on stackexchange narkive permalink

Comme indiqué dans ma question précédente, j'ai été infecté par un virus de cryptage qui crypte deux blocs de 1024 octets d'un fichier donné (premier 1024 et dernier 1024) dans un type de cryptage CFB XOR personnalisé. J'ai pu mettre la main sur un décrypteur qu'une autre victime a payé (bien sûr, cela ne fonctionne pas pour moi car différentes clés) et trouver la fonction de décryptage dans IDA, mais le code généré par C était mauvais et tout l'EXE est obscurci avec une méthode personnalisée. Un utilisateur de stackexchange l'a converti en C # pour que je le comprenne mieux (Merci Edward) Pour plus d'informations à ce sujet, consultez le dernier message:

Dump IDA Pro C pour Fonction de décryptage

Donc au point. Le cryptage que ce type utilise est à peu près XOR avec une certaine ruse, donc la fonction de cryptage est à peu près la même que le décryptage. Dans le décrypteur contient une clé de 20 octets, j'ai trouvé cela en comparant 4 décrypteurs différents ensemble que les victimes ont payé, tous n'ayant qu'une différence de 20 octets tous dans la même zone, et en le confirmant plus tard dans l'IDA lorsqu'il est poussé sur le

Même si la clé est de 20 octets, seulement 16 sont utilisés dans le cryptage et 4 est utilisé pour générer un en-tête pour chaque fichier crypté afin que le décrypteur puisse les trouver plus tard. Donc, dans ida, cela ressemble à quelque chose comme ceci:

Dword: C4 67 0E 46Dword: 99 2F D3 E4 40 BD 87 EB 8F 35 04 96 3B CE 8D 73

Je suppose que c'est 4 des octets sont utilisés dans chaque 512 blocs chiffrés, deux 512 blocs étant CFB l'un à l'autre pour former 2 1024 blocs de données chiffrées. Désolé si cela n'a pas de sens.

Malheureusement, le Decrypter est lourdement obscurci comme je l'ai dit, et utilise également des tonnes de JMP et de fonctions indésirables qui étaient impossibles à lire. Il a fallu une éternité pour trouver uniquement la fonction de décryptage.

Donc, pour le code, Ceci est le code nettoyé pour la fonction de décryptage (chiffrement également).

  int mystery (char * buff, int bufsize, int nonce1, int nonce2) {int result = 0; // ch est le prochain octet (caractère) dans le tampon char ch = 0;
nombre int = taille bufs; char * ptr = buff; int x; for (x = nonce1; count; --count) {// ce bit de supercherie remplace juste les 8 bits bas // de x par les 8 bits bas de (x + ch) en négligeant le report, le cas échéant x = (x & ~ 0xff) | ((x + ch) & 0xff); // XOR le tampon avec la valeur x calculée * ptr ^ = x; // lire le caractère suivant dans ch ch = * ptr ++; // obscurcir en ajoutant nonce2 x + = nonce2; // si x = 0x12345678, cela le rendrait 0x34567812 // pour les entiers 32 bits. Juste une rotation à gauche de 8 bits. x = (x<<8) | ((x >> ((sizeof (int) -1) * 8)) & 0xff); } résultat = x; // renvoie le dernier x calculé qui peut être utilisé pour chaîner tous // les blocs ensemble. Autrement dit, la valeur de retour x est // probablement passée en tant que nonce1 pour encoder le bloc suivant. return result;}  

Au-dessus de 2 INT, les nonce nommés sont générés à partir des 16 octets d'une manière ou d'une autre.

Donc, fondamentalement, moi, et beaucoup d'autres se demandent si c'est à tous Brute force-capable ou fissurable comme XOR régulier? Bien sûr, je ne connais pas ma clé, mais presque tout le monde aurait au moins un fichier brut et chiffré pour une attaque en texte brut comme XOR si possible.

Ci-dessous, le même déchiffré (texte brut) et chiffré fichier qui va avec ce décrypteur, ainsi que le décrypteur lui-même en tant que ressources. L'exemple de clé ci-dessus est également la clé de ce décrypteur. (malheureusement sans ordre particulier)

Fichier déchiffré (texte brut)

Fichier chiffré

Decrypter EXE

(Cet EXE n'est en aucun cas malveillant et n'affectera aucun fichier lorsqu'il est exécuté car il détecte des fichiers cryptés. Je l'ai exécuté des centaines de fois sur mon ordinateur personnel sans faute. Il peut être attaché à un débogueur et exécuté en toute sécurité. Virus total dit autrement simplement parce que c'est un exe connu situé avec l'infection.)

Pour terminer, je crois en IDA, la fonction 4075F3 génère les nonces, mais ne peut pas être à 100%

Je suis désolé pour cela étant si long, c'est assez difficile à expliquer en même temps.

Vous trouverez peut-être cette question utile: [Quel est le moyen le plus efficace de détecter et de briser le chiffrement xor?] (Http://reverseengineering.stackexchange.com/questions/2062/what-is-the-most-effic-way- pour-détecter-et-briser-le-cryptage-xor)
Malheureusement, ce n'est pas votre cryptage XOR traditionnel, et j'ai essayé tous les outils xor et même créé le mien. Mais avec un manque de cryptographie, je ne peux pas comprendre comment créer une application de force brute / Crack pour ce type de xor personnalisé, car une méthode de type CFB étrange est utilisée ici. C'est drôle, c'est un cryptage facile, mais en même temps fort.
Deux réponses:
Peter Andersson
2014-05-03 13:41:22 UTC
view on stackexchange narkive permalink

Je n'ai pas le temps pour le moment de formuler une solution appropriée, mais je vais vous donner quelques conseils qui, espérons-le, vous aideront.

Je voudrais honnêtement décomposer cela en un problème plus simple, changer les nombres entiers jusqu'à moins de bits. Par exemple, vous pouvez prendre l'algorithme et le modifier pour qu'il fonctionne avec des nonces 8 bits, puis réduire votre quantité de rotation à 2 bits (un quart de la taille des nonce). Ensuite, vous passez également vos masques de 8 bits à 2 bits et votre chiffrement xor en 2 bits. De cette façon, vous travaillez avec un problème plus gérable. Vous pouvez même le réduire en nonces 4 bits et en chiffrement 1 bit.

À partir de ce problème simplifié, vous formulez des équations pour chaque bit du texte brut au texte chiffré. Le brancher sur quelque chose comme Z3 pourrait être le moyen le plus simple d'obtenir une réponse. Voici un article utilisant Z3 pour attaquer une fonction de hachage simple.

En y jetant un œil, il semble que vous ayez le texte en clair et le texte chiffré que vous pouvez résoudre pour la clé (nonce1 et nonce2 ). L'ajout de nonce2 peut être un problème car il s'agit en fait d'un module d'addition 2 ^ 32. Comme il s'agit d'un ajout, il n'y a vraiment que deux valeurs en raison des contraintes sur nonce2 et x qui peuvent correspondre à la même valeur, il n'est donc pas impossible d'inverser.

Si vous n'êtes pas sûr de pouvoir résoudre le problème équations vous-même, j'apporterais le problème à math.stackexchange.com une fois que vous l'aurez compris.

Je me sens assez mal d'avoir dit cela, et un peu gêné, mais je pense que beaucoup de ces choses sont au-dessus de ma tête. Je bricoler avec le démontage et le codage un peu, mais les mathématiques et la cryptographie sont tout à fait au-dessus de ma tête, donc je vais faire autant de recherches que possible sur votre réponse, et ce Z3. Si jamais vous trouvez le temps de décomposer une formule, je peux comprendre que cela serait également grandement apprécié. Je suis prêt à lire maintenant pour mieux saisir cette réponse. Mais vraiment rapide dans une réponse honnête, pensez-vous qu'avec suffisamment de travail, c'est pratiquement réversible?
Hagen von Eitzen
2014-05-04 19:18:59 UTC
view on stackexchange narkive permalink

S'il fait vraiment ch = * prt ++ (et non ch = * ++ ptr ), alors ch est le caractère qui vient d'être écrit dans la ligne précédente, pas le caractère suivant lu comme le suggère le commentaire. Quoi qu'il en soit, contrairement à ce que vous écrivez cette méthode n'est pas involontaire: avec nonce1 = nonce2 = 0 le texte clair 1,2,3,4,5,6,7,8 se transforme en 1,3,0,4,1,5,0,8 (si je ne me trompe pas) et cela se transforme en (1,2 , 2, ...)

Que voulez-vous dire, ce n'est pas «involontaire»?
@user3546043 Il voulait probablement dire _involutary_, qui est le terme pour une fonction qui est son propre inverse. C'est quelque chose qui est implicite dans votre déclaration _ "Le cryptage que ce type utilise est à peu près XOR avec une certaine ruse, donc la fonction de cryptage est à peu près la même que le décryptage" _.
Eh bien, les notes que j'ai sur le schéma de cryptage d'un ami qui m'aidait avant qu'il ne doive partir pour un mois affirment que le décryptage et le cryptage sont les mêmes, mais qu'ils utilisent tous les deux une clé différente. Maintenant, je ne sais pas à quel point c'est vrai, mais il ne s'est pas encore trompé avec ce que j'ai trouvé jusqu'à présent. Il m'a dit de ne pas le confondre avec des touches asymétriques tho


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...