Reverse Jar Malware
|
25-08-2014, 18h27
Message : #1
|
|
Yttrium
![]() Membre actif ![]() Messages : 106 Sujets : 14 Points: 48 Inscription : Jul 2012 |
Reverse Jar Malware
Salut, j'aimerais connaitre votre avis a propos d'un malware reçu ce matin.
Je commence mon histoire en recevant un mail de 'Bitmine Tech' > billing@bitmaintech.com nommé 'Payment Invoice 142' et ayant pour text "Confirmation 142" Ne comprenant pas du tout la raison de ce message, je me résous a analyser sur VM le fichier invoice_142.jar envoyé en pièce jointe, mais je suis vite bloqué. Je ne m'y connais pas du tout en reverse de fichier java, et j'ai d'abord utilisé "jd-gui-0.3.6" qui ne me donnais que des fonctions totalement vide J'ai ensuite essayé JAD158g qui a réussis a me donner plus d'info, mais que j'ai eu beaucoup de mal a comprendre. Je post maintenant ça ici, en espérant que quelqu'un ai plus de chance et surtout de compétence dans ce domaine que moi ![]() Voici le lien sur lequel j'ai Upload : http://multiupload.biz/nl_cqmib52lo8hu Si vous avez des problèmes avec ce lien, signalé le moi, je n'ai jamais utilisé ce service. Merci ! |
|
25-08-2014, 18h53
Message : #2
|
|
supersnail
![]() Éleveur d'ornithorynques ![]() ![]() ![]() ![]() ![]() ![]() ![]() Messages : 1,616 Sujets : 73 Points: 466 Inscription : Jan 2012 |
RE: Reverse Jar Malware
Well, je regarde ça, et j'essaierai de poster un ptit rapport
![]()
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
25-08-2014, 19h47
(Modification du message : 25-08-2014, 20h24 par supersnail.)
Message : #3
|
|
supersnail
![]() Éleveur d'ornithorynques ![]() ![]() ![]() ![]() ![]() ![]() ![]() Messages : 1,616 Sujets : 73 Points: 466 Inscription : Jan 2012 |
RE: Reverse Jar Malware
Bon, je poste ici le début de l'analyse (j'updaterai le thread au fur et à mesure des mes découvertes)
On a affaire ici à un .jar (donc on peut suspecter une appli codée en java). Le premier réflexe ici est de sortir jd-gui qui... ne fonctionne pas (c'est ballot). On va donc extraire l'archive (étant donné qu'un .jar n'est en pratique qu'un vulgaire fichier zip), ce qui nous donne une arborescence ressemblant à ceci: Code : . On peut apercevoir un "stub.dll", qui ressemble à un module qui va être chargé, sauf que un "file" dessus montre qu'il est visiblement chiffré (aucun header exploitable dedans). On va donc devoir se farcir de l'IL java, et pour cela on va utiliser notre ami Radare2 (je vous sens enthousisastes d'un seul coup :þ). Plûtot que de prendre un fichier au hasard, on va plûtot repérer la classe principale (il suffit pour cela de lire le MANIFEST.MF) et la désassembler avec radare2. On se retrouve donc ce code qui ressemble à ceci: Code : / (fcn) sym.stub_EcryptedWrapper.main 35 ![]() On va donc fermer notre classe actuelle pour aller inspecter cette mystérieuse méthode ALLATORIxDEMOxasdqwbymmgfghfghgrertwer23rfe. On lance donc une analyse de notre classe via "af" puis on se positionne sur notre fonction avec "s sym.stub_EncryptedLoaderOld.ALLATORIxDEMOxasdqwbymmgfghfghgrertwer23rfe" puis on passe en "visual mode" avec "V" parce que ce sera beaucoup plus pratique pour nous pour debugguer (à noter que radare2 affiche des warnings, ce qui laisse supposer des tricks anti-désassembleurs qui font échouer jd-gui ![]() Je reposterai donc quand j'aurai (ou si quelqu'un d'autre de plus familier avec l'"assembleur" Jasmin qui traduit le bytecode java) reversé la routine de déchiffrement du bouzin ![]() Edit: cette portion de code ne semble pas décoder la DLL, mais visiblement ça a l'air essentiel pour pouvoir drop la DLL
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
25-08-2014, 20h20
Message : #4
|
|
Yttrium
![]() Membre actif ![]() Messages : 106 Sujets : 14 Points: 48 Inscription : Jul 2012 |
RE: Reverse Jar Malware
Petite questin, il n'existe pas de "debugger" Java ? On pourrais laisser le programme tournée pour qu'il nous déchiffre directement la dll, et le bloqué avant qu'il ne lance le reste ?
|
|
27-08-2014, 16h57
(Modification du message : 27-08-2014, 16h57 par supersnail.)
Message : #5
|
|
supersnail
![]() Éleveur d'ornithorynques ![]() ![]() ![]() ![]() ![]() ![]() ![]() Messages : 1,616 Sujets : 73 Points: 466 Inscription : Jan 2012 |
RE: Reverse Jar Malware
Y'a bien jdb mais ça a l'air encore plus relou à utiliser que gdb et pas sûr qu'il gère un bin trické de partout
Edit 2: Semblerait que ce soit obfusqué par du "Allatori" (en même temps y'avait qu'à regarder le nom de la fonction, /facepalm), et que la fonction que j'ai trouvé soit simplement une fonction d'obfuscation de strings (qu'il va me falloir reverser pour pouvoir continuer, yipee -_-) Edit 3: Finalement j'ai réussi à péter la fonction de crypto de strings, et j'ai pondu un petit décodeur en python (celui en java ne fonctionne pas encore pour des raisons assez mystérieuses), dont voici le code ci-dessous: Code PYTHON :
import sys On remarque que le code est chiffré à l'aide de 2 constantes "key1" et "key2", ainsi qu'avec une autre chaîne qui s'avère être le nom de la méthode appelante concaténée avec le nom de la classe (avec le package) à laquelle appartient la méthode. Ainsi, depuis EcryptedWrapper.main, la clé sera "mainstub.EcryptedWrapper" (étant donné que EryptedWrapper se trouve dans le package stub). La récupération du nom de la classe se fait via un trick assez dégueu: en effet, la routine crée un objet Exception, puis appelle la méthode getStackTrace(); (qui renvoie un tableau de StackTrace), prend le 2ème élément du tableau (la stack frame de la fonction appelante) puis appelle getClassName ainsi que getMethodName. Bref c'est tout pour aujourd'hui ![]()
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
07-09-2014, 17h07
Message : #6
|
|
supersnail
![]() Éleveur d'ornithorynques ![]() ![]() ![]() ![]() ![]() ![]() ![]() Messages : 1,616 Sujets : 73 Points: 466 Inscription : Jan 2012 |
RE: Reverse Jar Malware
Bon, des nouvelles du jour (je me suis mis à rebosser dessus):
Après avoir pas mal passé de temps à péter la routine de crypto qui ne servait finalement qu'à déchiffrer la banière du loader utilisé (Allatori ftw), j'ai donc analysé la suite du code, en constatant que le packer instanciait une classe stub.EcryptedWrapper puis appelait la méthode "init" de l'objet fraîchement créé avant de lancer un thread qui va lancer la "vraie" classe. En regardant de plus près la méthode init de notre objet, on voit ce code-là: Code : [0x0000080e]> pdf@sym.stub_EncryptedLoader.load ![]() Voici donc le 2ème code pour déchiffrer nos strings (qui seront utiles par la suite) avec un hack cra-cra qui évite devoir créer un fichier pour déchiffrer un truc rapidement: Code PYTHON :
import sys Ce code nous permet finalement d'obtenir le nom du fichier qui sera déchiffré, et il s'agit du "stub.dll" situé dans le répertoire stub/ de l'archive. On va ainsi pouvoir s'attaquer à la fonction decrypt() (la fonction stub/EncryptedLoader/ALLATORIxDEMOxasdqwbymmgfghfghgrertwer23rfe(Ljava/io/InputStream ![]() On peut donc observer le code de notre fonction: Code : / (fcn) sym.stub_EncryptedLoader.decrypt 73 Du coup il ne reste plus qu'à coder un petit prog java qui va déchiffrer notre stub.dll dont voici le code: Code JAVA :
import javax.crypto.*; Et on a un joli .jar tout chaud qui s'ouvre très bien avec jd-gui, et un simple coup d'oeil montre qu'il s'agit d'un RAT multiplateforme, et pour le lol, un ptit dump de la config du machin: Code : ?xml version="1.0" encoding="UTF-8" standalone="no"?> Pour conclure, nous avons eu affaire ici à un malware peu intéressant techniquement protégé par un packer commercial qui s'est révélé malgré tout amusant à analyser (pour les plus observateurs, vous aurez remarqué que certains prototypes de fonction étaient volontairement erronés, sûrement pour perdre les reversers peu expérimentés/outils de désassemblage). Bref je vous invite à essayer de l'analyser par vous-même et vous documenter sur le langage "d'assemblage" de la JVM pour vous amuser à retrouver les routines de crypto analysées ![]()
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
24-02-2016, 10h20
Message : #7
|
|
ZeR0-@bSoLu
![]() Angel Of Byte ![]() Messages : 43 Sujets : 2 Points: 4 Inscription : Feb 2016 |
RE: Reverse Jar Malware
je poste juste ici pour dire que c'était intéréssant à lire
![]() |
|
« Sujet précédent | Sujet suivant »
|
Sujets apparemment similaires… | |||||
Sujet | Auteur | Réponses | Affichages | Dernier message | |
Infection, Fonctionnement, Contrôle et Détection de Malware | InstinctHack | 13 | 6,301 |
08-05-2019, 22h07 Dernier message: Di0Sasm |
|
[Malz] - Malware dans .doc | notfound | 0 | 1,248 |
24-03-2015, 11h38 Dernier message: notfound |
|
Mes Analyses de Malware | Yttrium | 6 | 2,948 |
05-02-2015, 16h15 Dernier message: sakiir |
|
[.NET] Wobot Reverse | Yttrium | 0 | 1,268 |
28-08-2014, 04h59 Dernier message: Yttrium |
|
Malware uKash | Swissky | 21 | 9,208 |
19-11-2012, 12h05 Dernier message: InstinctHack |
Utilisateur(s) parcourant ce sujet : 1 visiteur(s)