Question:
Déballage statique du binaire
EfForEffort
2013-03-21 09:24:09 UTC
view on stackexchange narkive permalink

Disons que j'ai un binaire que je ne suis pas en mesure d'exécuter (par exemple, il fonctionne sur un appareil dont je n'en ai pas), mais je peux le démonter. Je peux obtenir les documents sur l'architecture. (C'est MIPS little endian dans mon cas.) Mais le binaire a très peu d'importations, très peu de chaînes, etc., donc il semble vraiment qu'il est emballé.

Comment puis-je procéder statiquement le déballer? (Modifier: je veux dire, le déballer sans aucun accès à l'appareil d'origine.)

Vous pouvez essayer de l'exécuter avec l'un des émulateurs de mode utilisateur fournis avec QEMU ... cela aiderait si vous en saviez plus, probablement un désassembleur aiderait comme IDA peut-être que c'est l'un des types avec lesquels la version gratuite peut fonctionner. Je ne sais pas non plus ce que vous entendez par "déballage statique"
Ida Pro et l'émulateur Bochs semblent être une voie à suivre, voir [ici] (https://www.hex-rays.com/products/ida/support/tutorials/debugging_bochs.pdf) pour un tutoriel.
@Remko: hélas Bochs n'émule que x86, il est donc peu probable que vous aidiez ici
@cb88, J'ai une copie de IDA Pro. Et ce que je veux dire, c'est que je souhaite décompresser le binaire mais je n'ai pas l'appareil pour lequel il était initialement prévu. On dirait que QEMU + mipsel est la voie à suivre; Je télécharge debian-mipsel maintenant.
Vous pourriez probablement le faire aussi dans un chroot, avec gentoo mips et un émulateur statique qemu usermode, si l'émulation du système qemu est trop boguée ou difficile à récupérer des données. http://www.gentoo.org/proj/en/base/embedded/handbook/?part=1&chap=5
Quatre réponses:
#1
+7
ixje
2013-03-21 13:47:32 UTC
view on stackexchange narkive permalink

Sur plus de 30 firmwares de périphériques intégrés que j'ai vus dans le passé, je les ai rarement vus utiliser quelque chose de propriétaire. Souvent, il s'agit simplement de gzip / LZMA ou d'une compression similaire qu'ils utilisent (bien que parfois avec des en-têtes modifiés ou supprimés).

Ainsi, dans un premier temps, j'essaierais quelque chose comme binwalk pour rechercher des algorithmes de compression connus. Si cela ne résout pas le problème, essayez des outils de recherche de constantes de chiffrement tels que Find Crypt ou Sign search. Cela ne fonctionne que si la crypto est une implémentation logicielle. S'il s'agit d'un appareil plus sophistiqué, par exemple un décodeur, avec un moteur de décryptage accéléré par le matériel et une mémoire OTP pour stocker la clé, vous n'avez pas de chance sans accès au moment de l'exécution (à moins qu'ils ne fassent un gros problème en passant la clé de OTP au moteur de décryptage).

Enfin, vous pouvez essayer de savoir s’ils utilisent un algorithme propriétaire et émuler cet algorithme en utilisant QEMU ou gxemul ou écrivez votre propre décompresseur dans un langage de niveau supérieur.

C'est une bonne idée. J'ai couru binwalk et il n'a rien trouvé sauf que c'est un ELF (c'est-à-dire qu'il n'a signalé que le fichier (1) signalé). La recherche de signes n'a également rien trouvé. Je suppose que la prochaine étape est QEMU.
#2
+3
user1354557
2013-03-22 22:34:35 UTC
view on stackexchange narkive permalink

Dans The Ida Pro Book, Chris Eagle montre l'utilisation d'un plugin appelé ida-x86emu, qui peut être utilisé pour décompresser statiquement des binaires en simulant l'exécution dans la base de données IDA . Vérifiez-le; c'est open-source, et c'est assez facile à utiliser.

Malheureusement, cela n'aide pas car il s'agit d'un binaire MIPS = [
#3
+3
Ange
2013-03-26 21:17:16 UTC
view on stackexchange narkive permalink

plusieurs manières possibles:

  1. identifier le packer

    • obtenir les packers standards de votre plateforme ( UPX par exemple ), vérifiez si ce n'est pas celui utilisé.
    • Si c'est un packer standard, alors peut-être que vous avez déjà gagné, comme cela pourrait être documenté, ou mieux, comme UPX, il peut se décompresser et est open-source.
  2. identifier l'algorithme

    • il n'y a pas tellement de bons algorithmes de packer répandus (NRV, LZMA, JCAlg, ApLib, BriefLZ). ils sont généralement facilement identifiables par leur taille corporelle ou leurs constantes. (J'en ai implémenté plusieurs en pur python dans Kabopan)
    • si vous pouvez facilement identifier l'algorithme d'emballage / chiffrement, vous pouvez probablement trouver une implémentation propre pour le décompactage statique
  3. se salir les mains

    • si vous ne connaissez toujours pas l'algorithme et qu'il est apparemment vraiment personnalisé, alors lisez-en un autre packer pour la même plate-forme (c'est-à-dire encore une fois, lisez le binaire UPX Mips et sa source), afin qu'il puisse vous familiariser avec des astuces similaires (packer) utilisées sur votre plate-forme.
    • puis recherchez l'algorithme de compression probable (probablement un morceau de code d'apparence différente, les gens très rarement les manipulent, et ré-implémentent l'algorithme dans votre langage préféré, et décompressent en externe (localiser les paramètres, appliquer des algorithmes, modifier / reconstruire le binaire)
  4. Méthode paresseuse par bruteforcing: certains algorithmes comme ApLib n'ont pas d'en-tête ni de paramètre (pas même de taille): le L'algorithme nécessite juste un pointeur vers un compr tampon essed, donc il suffit parfois de l'essayer aveuglément sur n'importe quel offset de votre binaire, et de vérifier si nous obtenons un tampon décompressé décent (pas trop petit, pas énorme + plein de 00).

#4
+2
Rolf Rolles
2013-03-21 12:43:01 UTC
view on stackexchange narkive permalink

Ma réponse générale serait "en simulant des opérations d'auto-modification contre le binaire compressé". Ainsi, par exemple, cela engloberait la suppression de la compression sous laquelle la plupart des packers sont voilés. Cela nécessitera de "tracer statiquement" le flux d'exécution à travers le packer, dont le code peut être soumis à une auto-modification.

Cette explication fonctionne pour un style traditionnel d'emballage, dans lequel les sections du binaire sont simplement compressé / chiffré. Il se peut que des stratégies de décompression plus sophistiquées soient nécessaires, par exemple comme décrit dans mon article "Déballage des obfuscateurs de virtualisation" 1.



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...