Determiner si on est sur une machine 32 ou 64bits ApiLess

Ca faisait longtemps hein… Je suis tombé sur un vieux truc, mais je n’en avait pas conscience. Un process 32Bits peut facilement déterminer si il tourne sur une machine 32 Bits ou 64 Bits sous WoW64 en regardant la valeur du registre de code CS. Ainsi, pas besoin de faire le moindre API Call.

Si c’est 0x1B c’est un Os 32Bits, Si c’est 0x23 c’est un Os 64Bits sur WoW… Si c’est 0x33 ca sera un process 64 bits dans un os 64Bits… (et là y a du trick pour faire du tourner du code 64bits dans un process 32 on fera plus tard, c’est fun).

Donc le code est simple avec un petit décalage de bit on a 0 pour 32 bits ou 1 pour 64 Bits os.

Et c’est tout… un wrapper pour les plus feignants..

Et le Makefile qui va bien

A+

Posted in Asm, Hacking, Windows | Tagged | Leave a comment

Bypass de Cuckoo, la méthode HackedTeam

Bien… Comme tout le monde, c’est bien évidemment que je suis allé voir le code de nos amis transalpins. Et quel joie de trouver une solution de bypass de Cuckoo que je ne connaissait pas.

Le code officiel est là :
https://github.com/hackedteam/scout-win/blob/master/core-scout-win32/antivm.cpp

Et attention, c’est rapide :)

suivis de

Encore un tripotage obscur du PEB. Ce qu’il font c’est substituer le vrai FS[0x44] (alias PEB:TLSBitmapBits ) part un champ initialisé de 409600 bytes à n’importe quoi (mais pas 0). Et ils démarrent une tread (ici sleep mais n’importe quoi ca le fait aussi). Et force est de constater que cela stoppe NET notre brave cuckoo qui pense que c’est finis à en croire le rapport de Malwr.

Malwr Report

C’est affligeant de simplicité d’ou mon intérêt. Et j’ai du chercher pour comprendre le miracle… Donc, le TLSBitmap..TLS ca veut dire Thread Local Storage, C’est la que notre windows maintient les datas pour la thread courante. C’est que qui sert à notre windows pour stocker toutes plein d’infos relative à notre thread. Et le fait de switcher cela et d’appeler une api pour starter une nouvelle thread semble compliquer la vie de cukoo. J’avoue franchement ne pas avoir compris en quoi cela ne perturbait pas aussi un vrai windows, mais force est de constater, que sans cela, même sous wine, ce code fonctionne parfaitement.

Il n’y a que sur cuckoo que cela stop tout !

Ci-dessous une version compilable avec MingGW

Etonnant ces transalpins. !

Posted in Asm, Coding, Malware, Reverse | Tagged , , , , , | 2 Comments

Trouver le setup et le main sur l’arduino…

Suite a une question de mon unique lecteur :) voici quelque précisions concernant le loading et les routines de base d’un code arduino dans IDA.

Loader un binaire

Donc je ne revient pas sur le setup d’IDA et la création du fichier de RAM de votre programme (non il n’y a toujours pas de script magique :)… voir ici et faire le setup avant de continuer ici…

Petites précisions pour loader le binaire dans IDA;

Premièrement choisir AVR dans la grande liste de CPU

ida_a

 

Choisir uniquement ROM

 

ida_b

 

Choisir le cpu, si ca couine …. on dit ok hein :)

 

ida_c

 

Et enfin a la rom dire cancel…

ida_d

Vous pouvez alors suivre la procédure pour créer votre ram et la loader….

Trouver le main

Bon si on regarde juste après la procédure de recopie de la “rom” en “ram” expliqué dans notre précédent article on vois toujours la même structure de code par après. Un call et Un jmp.

ida_e

le jmp envois le code dans une loop infinie pour tanker le programme, le call sub_200 juste avant, c’est lui le main() “arduino”. main() que l’on ne vois jamais dans le code source et qui s’occupe d’appeler notre “setup()” et lancer le fameux “loop()”.

Le 1er call (sub_12D ici) s’occupe lui aussi d’initialiser des choses dont on n’a même pas conscience :)

ida_f

 

Voila bon RE

Posted in Asm, Reverse | Tagged , , | 6 Comments

Firefox en console c’est mieux que lynx !

C’est quoi le plan;

Aujourd’hui, comment instrumenter un browser pour lui faire cracher un rendu de page web sur une debian le tout en console.

On va utiliser un truc nommé selenium qui est vieux comme le monde mais dont personne n’avait pensé à m’en parler avant. Et ce truc permettra de piloter un firefox. Pour se passer d’installation de debian graphique et pouvoir tout de meme le piloter on va utiliser xvfb qui est un serveur X “frame buffer”.. Bref un faux serveur X qui fait le rendu en ram sans l’afficher.

C’est partis

Primo on va installer quelque paquets nécessaires, et aussi firefox depuis un repository de linuxmint (ces psychorigides de debianistes n’aiment pas le licencing de Ffox ).

Première étape, installer la clef du repo  (ayez confiiiiannnce, nooon ne le faite pas !).

Ensuite on va ajouter ce repo dans notre liste de source de paquets (/etc/apt/source.list)

Et on est pret pour installer tout ce qu’il nous faut.

Et bien sur selenium qui va bien depuis PIP (on est sous debian hein…)

Voila tout est pret.

Formidable selenium

C’est partis, on va piloter notre browser via python (Selenium supporte d’autre languages mais sérieux quoi, python ca me va) Voici le petit script qui va permettre de capturer un site web, il est dispo dans mon git à broll httpgrab.py.

On le voit, c’est 3 lignes de code (firefox(), get(), save_screenshot()). Et quand on le lance c’est via xvfb-run qui va démarre le faux X pour notre firefox.

Et Bingo !

perdu

 

Posted in Coding | Tagged | 1 Comment

Extraction de String / Episode A

Bon… des fois, la fonction d’obfuscation de string d’un malware est chiante et illisible (bref comme il faudrait que ce soit) Et en plus décousue, je veux dire par là que le malware va la picorer et ne deobfusque pas toutes les strings d’un coup. Bref dans ce cas la… on va lancer cette petite fonction avec toutes les strings offusquée pour tout clarifier.

Donc j’ai pondu un dégeulasse petit prog qui remappe l’exe en mémoire et appelle la dite fonction pour arracher les strings. Il prend ses commandes depuis un fichier texte.

Petit exemple, On ferme les yeux, devant vous un superbe malware qui obfusque ses strings, (voir https://github.com/Th4nat0s/Chall_Tools/blob/master/C/usefonc/hello.cpp)

Bref un petit prog typique d’obfuscation de string a deux balles. Normalement il faut prendre IDA pour savoir ce qu’il appelle et comment, là il est sympas il file les offsets :) . Ensuite on remplis le fichier texte.

Le premier paramètre c’est l’offset de la fonction de décryptage, le second c’est la string obfusquée et le 3eme c’est la clef d’encryption (Si il y a besoin).

A coté de cela, parce que défois, les appel de fonctions ne sont pas standard C (merci Delphi), pour remapper le call comme on veut rapidement,  j’ai fait un petit bout en asm intermédiaire. C’est plus simple. (voir https://github.com/Th4nat0s/Chall_Tools/blob/master/C/usefonc/usefonc.asm)

Et pof on lance…

Bingo…

Et si c’était a refaire, je ferais plus comme cela, je partirais sur un start suspended et je loaderai une DLL qui hookerai le process et qui ferait tout le taf, et en plus les lib seraient tous loadées.

Là j’ai des soucis, défois le Malloc de l’espace 0x40000 est pas forcément possible et il faut relancer deux trois fois le bignou.

Next step, le python qui pond automatiquement le fichier de commande sous IDA. En attendant, si cela sert a quelqu’un, le source est là :

https://github.com/Th4nat0s/Chall_Tools/tree/master/C/usefonc

a+

Posted in Asm, Reverse | Tagged , , | Leave a comment

Quand ca merde, il faut aussi le dire…

Aujourd’hui M. Le MacBook Air a décidé de me peiner, j’ai eu droit a écran noir, et au power off forcé / power on le traditionnel “tadaaaa” mais toujours écran noir. Pas moyen de s’en sortir..

Heureusement la KB m’a sauvé, RESET de la NVRAM, encore un combo de touche inédit

https://support.apple.com/en-us/HT204063

 

Posted in BlaBla | Tagged | Leave a comment

Merde le jouet a spam a tout laché…

Des programmes qui foirent c’est défois drôle, voici un «Spam» trouvé sur mon WordPress qui laisse entrevoir la difficulté de filtrer un spam sur une simple phrase.

Screen Shot 2015-04-13 at 23.09.11

 

Posted in BlaBla | Leave a comment

DecrottePE compatible chinese style.

Bon tant que j’y était, histoire de plus perdre de temps avec certains packer à deux balles ou des dumps encrypté à la chinoise (Xor de base ou Xor shifté).

Voici une version de «decrottePE.py» qui bruteforce; C’est pas joli, mais ce qu’il y a trouver est pas non plus joli-joli !

Exemple , j’encrypte à la chinoise un PE avec un xor shifté et la clef 0x42 (évidemment la fameuse solution universelle).

Je cache mon PE xoré au millieu d’un champ de random.

Bon… c’est le plus chiant qu’il soit possible d’extraire avec ce truc, lançons le décrotteur et allons lire un livre.

Bingo… et le fichier est en état.

Amis du XOR, merci de passer a RC4…

 

Posted in Crypto, Malware, Reverse | Tagged , , | 1 Comment

La formidable librairie PEFILE

Petit focus sur la librairie python pefile (Dispo ICI ) créée par Ero Carrera. Cette librairie permet de parser un executable windows sans se fatiguer que celui-ci soit 64 ou 32 bits.

J’ai pondu deux minis scripts python avec cette librairie, le premier est un update d’un script déja vu ici, qui montre les sections et leur entropie nommé «peentro.py». Un peu à la virus total, mais chez soi et qui couine sur les trucs «chelous».

Le script est ici

Le second est un script de feignants nommé «decrottePE.py». Il extrait les executables PE depuis un dump. C’est toujours utile pour carver un executable depuis un dump mémoire volé dans un droppeur sans avoir a se fatiguer. L’executable est sauve à sa taille “normale” les overlay potentiels au cul de l’exe sont shootés.

le script est ici

Cette lib est décidément un bel objet.

 

Posted in Reverse | Tagged , , | 1 Comment

1er jour des soldes, -25% sur Charlie Hebdo

Non… Moi je trouve décidément ca très drôle leur petit dessins.

 

Mahomet

 

http://www.charliehebdo.fr/20150107171028368.pdf

Il ne fait décidément pas bon d’être copain avec Dorothée ces temps ci..

Posted in BlaBla | Leave a comment