Le reverse engineering comme un nul(l) 1/?

_ « Dis-moi, on a un bug en production sur l’application totoparauski, il n’y a rien qui marche… tu pourrais investiguer ? »
_ « Bien sûr, où sont les sources ? »
_ …
_ …
_ « Et mer**… »

Ceux d’entre vous qui sont développeurs doivent certainement avoir déjà connu cette situation : un programme à analyser et modifier… sans le code source original.

C’est là qu’intervient le reverse engineering ! (Ou « ingénierie inverse » pour les puristes)

tux-inside

Qu’est-ce que le « reverse engineering » ?

Le reverse engineering sert à analyser ou modifier une application sans disposer du code source original. Je considère qu’une fois qu’on a le code source, il ne s’agit plus que d’une analyse de code.

Les méthodes d’ingénierie inverse vont souvent à l’encontre des licences propriétaires.

Le reverse engineering est utile dans de nombreux cas :

  • Analyser un logiciel pour savoir s’il est malveillant ou non (voir l’un de mes précédents articles : https://piratercommeunnul.wordpress.com/2013/03/16/analyser-un-logiciel-malveillant-comme-un-null-1/)
  • Reprendre le développement d’un logiciel abandonné par son propriétaire
  • Récupérer des portions de code d’un programme ne vous appartenant pas, afin de copier une fonctionnalité sur votre propre logiciel
  • Débrider un logiciel (Clef CD/Cracks/etc.)
  • Recréer un code source perdu à partir d’une application
  • Développer un serveur pouvant s’interfacer avec un client donné (Serveur pirate pour un MMO, etc.)
  • etc.

Comme souvent dans le piratage, tous les outils sont bons pour arriver à nos fins :

  • Décompilateurs
  • Désassembleurs
  • Décompresseurs
  • Analyseurs (Cuckoo ou autre)
  • Logiciels d’écoute réseau (Wireshark ou autre)
  • Logiciels permettant de casser des chiffrements (Caïn, john the ripper, etc.)
  • etc.

Nous verrons dans ce premier article des méthodes simples pour analyser des applications basées sur des technologies faciles à inverser.

Les prochains articles seront un peu plus musclés avec, entre autres, de l’assembleur.

Les extensions et la structure des fichiers

Le principal concept à comprendre est qu’une extension ne définit pas le contenu d’un fichier.

De nombreux fichiers, de type apparemment inconnu, peuvent simplement s’ouvrir avec un éditeur de texte (Notepad++) :

*.txt, *.bat, *.cmd (pas tous), *.sh, *.py, *.pyw, *.java, *.cpp (bref, tous les codes sources), *.ini, *.cfg, *.xml, etc.

D’autres encore sont simplement des archives ou contiennent des archives. Des logiciels tels que 7zip seront capables de les ouvrir :

*.exe (accès aux ressources), *.ear, *.war, *.jar, *.dll (accès aux ressources), *.jpg (certains diffusent des archives masquées dans des images sur Internet), *.iso, *.nrg, etc.
Le lanceur du jeu Assassins creed 2 peut être ouvert avec 7zip!

Le lanceur du jeu Assassins creed 2 peut être ouvert avec 7zip!

Un DLL dans assassins creed 2

Un DLL dans assassins creed 2

Bref, pour analyser / extraire / visualiser certaines portions simples d’une application, vous pouvez vous armer de logiciels génériques axés autour du principe du « best effort » : s’ils sont capables de l’ouvrir, ils l’ouvriront.

Décompiler comme un nul(l)

Certains langages se contentent de convertir le code source en code semi-exécutable.

Il faut comprendre par là que le contenu binaire de l’application n’est pas de l’assembleur mais un script destiné à être exécuté par une machine virtuelle.

Parmi ces langages, on retrouve :

  • Le JAVA et son fameux bytecode.
  • Le Flash
  • Bon nombre de langages propriétaires

Basé sur le même principe, il existe des conteneurs de fichiers capables d’exécuter des macros :

  • PDF
  • XLS
  • etc.

Ce code semi-exécutable est généralement simple à décompiler. Il existe d’ailleurs de nombreux outils pour le faire.

Décompilateurs JAVA

Voici les plus connus :

Simple et efficace.

Cavaj est simple et efficace.

JADClipse est plus facile d'utilisation mais nécessite eclipse.

JADClipse est plus facile d’utilisation mais nécessite eclipse.

Décompilateurs Flash

Quelques décompilateurs (je n’en connais aucun gratuit qui soit utilisable) :

Attention : une application flash décompilée ne sera pas forcément recompilable en l’état…

Quelques outils pour s’amuser

Resource hacker

Très simple d’utilisation, il permet d’accéder aux ressources d’un exécutable ou d’une librairie (DLL) : http://www.commentcamarche.net/download/telecharger-34055196-resource-hacker

Vous pourrez ainsi visualiser / extraire / modifier toutes les ressources d’une application.

Certaines applications contiennent des portions scriptées contenues dans les ressources. Il devient alors facile de modifier le comportement de ces applications.

Le lanceur d'assassins creed 2 ouvert dans resources hack

Le lanceur d’assassins creed 2 ouvert dans resources hack

Un DLL d'assassins creed 2

Un DLL d’assassins creed 2

Notez au passage que certaines chaînes de caractères stockées directement dans les exécutables peuvent être modifiées avec cet outil.

Burp suite

Burp suite est un outil très complet. Son fonctionnement consiste en un proxy WEB interceptant toutes les communications réseau et permettant d’en modifier le contenu.

Il peut être utile pour analyser le fonctionnement d’une application en modifiant les données que celle-ci envoie / reçoit sur le réseau.

Comme cet outil est très complet, un prochain article lui sera consacré.

http://portswigger.net/burp/proxy.html

Burp suite

Bien d’autres

Il existe énormément d’outils utiles à l’ingénierie inverse.

Vous pouvez en trouver de nombreux ici : http://www.woodmann.com/collaborative/tools/index.php/Category:RCE_Tools

Conclusion

Vous êtes maintenant en mesure de décompiler quelques programmes et de modifier les ressources d’applications.

S’il n’y avait qu’un point à retenir de cet article, c’est bien que l’extension ne fait pas le contenu !

Les linuxiens le savent pertinemment : un nom de fichier n’est qu’un nom de fichier.

Vous pourrez visualiser beaucoup de ressources rien qu’avec un bloc-note et un bon gestionnaire d’archives !

Voici pour les bases de l’ingénierie inverse. Dans le prochain article, je fournirai un exemple d’utilisation de resources hack, puis j’aborderai un sujet bien plus pointu : le cracking.

Nous verrons comment contourner des protections simples par numéro de série ou par la vérification de la présence d’un CD dans le lecteur.

Parce que je n’ai pas la science infuse : les sources

Publicités
À propos

Un informaticien, qui tente de faire comprendre au public que l'informatique n'est pas si compliquée, malgré des acronymes et autres termes obscurs pour faire croire que c'est difficile (et que c'est de votre faute si "ça ne marche pas")

Tagged with: , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
Publié dans Cracking, Piratage, Windows
3 comments on “Le reverse engineering comme un nul(l) 1/?
  1. CharlOS dit :

    J’attend la suite avec impatience !

  2. Anonyme dit :

    En décompilateur flash il y a bien mieux que Trillix il y Sothink Swf décompiler. En utlisant l’onglet Raw Data couplé à un éditeur Hex on peut facilement modifier un .swf

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

MystCaster
juillet 2013
L M M J V S D
« Juin   Août »
1234567
891011121314
15161718192021
22232425262728
293031  
Catégories
Archives
%d blogueurs aiment cette page :