Dumper une EEprom d’Arduino, the hardest way.

Petit retour sur le dump d’EEprom sur Arduino Uno car vider l’eeprom de son Atmel ATmega328p n’est pas si simple.

L’Eeprom est une mémoire non volatile qui peut être lue et écrit depuis son petit programme Arduino. un genre de disque dur.

Prenons le programme suivant qui écrit HELLO au début de l’eeprom.

Si on se rappelle de https://thanat0s.trollprod.org/2014/01/dumper-un-arduino ils semble que l’on puisse utiliser ce vieux tutorial pour dumper l’eeprom au lieu de la flash.

Avec Avrdude, J’utilise la command -D -Ueeprom:r:/tmp/eeprom.hex:r

D pour dump, U pour la dire quoi.. ici l’Eeprom directement au format binaire ( :r pour raw) .

En plus tout se passe bien, la taille est bonne, MAIS le problème c’est que le dump au final est fort étrange… Il est ou le HELLO ?? c’est quoi ce fatra ??

On se rend vite compte que le Bitonio nous prends pour un lapin. En fait, si on utilise son Arduino Uno directement via USB pour dumper l’Eeprom du microcontrolleur Atmel, on se rend vite compte que l’eeprom n’est pas accessible et que on n’as pas vraiment accès a tout ce que l’on croit. En place de l’eeprom avec la bonne commande pour eeprom sous avrdude, il dump toujours la flash !

Impossible de lui dumper l’eeprom. Ce qu’il faut comprendre c’est que la partie “flashing” du Arduino quand on passe par la carte Arduino Uno est controlée par un genre de bios. le BootLoader. Ce bootloader ( voir ici : https://github.com/Optiboot/optiboot ) nommé optiboot, s’occupe de la gestion du flash et est posé a la fin de l’espace mémoire de la flash du microcontrolleur.

C’est lui qui entre autre au reboot regarde si il voit arriver des commandes série pour flasher. Pour le détail de sa vie et son oeuvre c’est ici : ( https://github.com/Optiboot/optiboot/wiki/HowOptibootWorks ) Pour des raisons variée dont une est l’espace utilisé, tout n’est pas implémenté, il est impossible de dumper ou flasher l’eeprom via un Arduino Uno.

C’est documenté dans le code :)

Il faut donc pour dumper sereinement l’Eeprom du atmel avoir un vrai programmeur qui va parler  au Atmel directement via le protocol SPI ( Serial Peripheral Interface ), un protocole de communication qui nécessite 4 fils  ( MISO, MOSI, CLOCK et CS ) . Si vous voulez sombrer dans le détail c’est ici (https://fr.wikipedia.org/wiki/Serial_Peripheral_Interface).

Plusieurs options s’offrent alors a vous pour voir l’Eeprom, utiliser un montage de deux arduino pour avoir un programmeur SPI, ce montage s’appelle ArduinoISP voir ici  voir https://www.arduino.cc/en/Tutorial/ArduinoISP. Acheter un vrai programmeur, ou utiliser un Buspirate qui fera aussi l’affaire.

Dump…

Et au final, victoire.

Posted in Electro | Tagged , , | Leave a comment

MatBot, attaque du clair connu.

Ne voila t’il pas que, pour de sombres raisons, l’on m’a entrainé sur le chemin de Discord (ps.. je reste sur IRC) et de ses bots de tous poils. J’ai fait donc connaissance avec le bot “MatBot”.

https://discordbots.org/bot/265161580201771010
https://bots.discord.pw/bots/265161580201771010

En plus d’afficher des chats randoms il se propose de “chiffrer”…

Et là effectivement, ca donne envie de jouer avec dès que l’on se rend compte que “AAAAA” file toujours la même string chiffrée :)

Voici donc comment MatBot “Chiffre”.. si tenté qu’on puisse appeller cela chiffrer :).. Mais c’était sympas comme chall gratos, merci MatBot.

Alors comment cela marche ?

Par exemple, la string “abcxyz” est chiffré en “wpbCm8KTwqnCrsOe”. c’est donc une string en base64… mais attention c’est la variante URL qui est utilisé (Avec des “_” et pas des “+” )
Cela donne pour “abcxyz” :

Il y a des 0xc2 et 0xc3 qui parsement aléatoirement ca et là le texte. Dans cet exemple c’est entre chaque charactères mais ce n’est pas systématique (why ?? j’ai pas compris). Et le chiffrement est en fait un décalage de byte basé sur des valeurs d’un array de 32 bytes. (On décale un peu moins si c’est un 0xc3 qui est devant ).

Dans le python ici pour la clef, c’est la valeur du codage de “A” (0x41) directement qui est dans le code. Je fais la soustraction dans la loop feignant que je suis…

J’ai regardé ce que ca pondait comme clef de chiffrement en ascii… c’est 59015d035bd82a1ebfb9212b9e9798d4 .. Ca sent le md5 mais on sais pas de quoi :) 

Et voila un chiffrement avec clef hardcodé fort étrange :)

Voila voila… c’est pas otr quoi faites gaffe jeunes teenagers :)

Posted in Challenge, Crypto | Tagged , , , | Leave a comment

Conservation Nationale

Google ayant supprimé le compte des petits margoulins vendant Infinity Keylogger (Et c’est bien normal). Il m’a quand même semblé important de conserver ce truc drolesque au possible…

Here it is ….

VIDEO Here : Infinity keylogger SMTP FTP PHP 13 STEALERS MUTEX UNICODE All OS 32-64 BIT

Ref initiale : https://www.youtube.com/watch?v=y1wkMf23bPY

 

 

Posted in BlaBla, Malware | Leave a comment

SSH agent qui marche sur MacOs Sierra

Bon, depuis l’uprgrade en sierra, cet animal ne se souvient pas que j’ai déja rentré le password de ma clef et me le demande a chaque connection…

La soluce est dans mon .ssh/config désormais avec le addkeystoagent.

 

Posted in BlaBla, Desktop, Mac | Tagged , | Leave a comment

CrossCompiler un python en PE pour windows avec juste ton linux console

Parce que défois, t’as besoins…  et que t’aime faire des trucs sales.

Soit ton super programme test.py et une debian.

pyinstaller pour faire les exe est livré avec python 2.7. On install le 2.6 via winetricks pour que ce soit facile.

Et il suffit de compiler

Victoire

 

Posted in Linux, Windows | Tagged | Leave a comment

Conservation Nationale

J’ai pris sur moi de mirrorer ce monument ludique qu’est ce tuto de RE de keygenning avec DORA. J’espère que les auteurs ++Meat et Haiklr que je ne connais pas ne m’en voudront pas ! Je suis Fan.

C’est un devoir de mémoire obligatoire !

Ze Tutorial !

Les fichiers et autre…

 

Enjoy !

Posted in BlaBla, Reverse | Tagged | 1 Comment

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 | 2 Comments

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 , , , , , | 4 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