Baboon's Blog

Aller au contenu | Aller au menu | Aller à la recherche

lundi, octobre 31 2011

Qui qu'a mes codes ?

Salut les zouaves, je sais que j'avais dit que je ne posterai plus mais il m'est arrivé 3 trucs pas cools ces derniers temps et j'ai besoin de vous pour réparer un peu tout ca ...

  1. Lors d'une maj de mon blog j'ai malencontreusement effacé l'intégralité de mon répertoire 'local' et donc l'intégralité des pièces jointes de mes posts (Hercules / BINI / BaDu etc.) et dans mon intense flemme je ne les ai jamais ré-uploadé
  2. J'ai oublié mon laptop dans un TGV la semaine dernière (si vous l'avez vu : il est plein d'autocollants carrefour / SSTIC / HES, n'hésitez pas à me contacter ;) ) et donc avec lui tout mes codes, jusque là ca peut encore aller, j'ai des backup pas trop vieilles chiffrées sur mon ftp et c'est là qu'intervient le 3ème fail.
  3. j'ai perdu le même week end ma clef usb contenant la clef de chiffrement de mes backups ...

Bref j'ai perdu quasiment la totalité de mes codes (aussi et surtout ceux que je n'avais pas publiés ...) donc si une personne ici a téléchargé certains de mes codes et qu'il me les envoi à l'adresse suivante : baboon [ POINT] rce [ AT ] gmail [ POINT ] com ca serait cool.

En échange eh bien je lui paierai une bière à la première occase et je lui dédicacerai une photo de mes fesses (2ème lot optionnel).

[EDIT] ah oui et tient, histoire de pas poster pour rien, j'ai recodé la partie échange de clef Diffie-Hellman de fish (le plugin xchat permettant le chiffrement des communications) avec openssl, n'arrivant pas à le faire marcher avec miracl sous mon windows 7 64 bits donc voilà le code et le binaire (pour compiler, modifiez le .bat avec votre path openSSL), c'est crade, j'avais pas prévu de le release mais au moins ca marche : ICI

[RE-EDIT] bon, bonne nouvelle, j'ai fini par récupérer ma clé USB, perdue avec mon kit de lockpick dans la bagnole d'un pote. J'ai donc pu déchiffrer mes backup et j'ai récupéré la totalité de mes codes (enfin ceux fait avant Juin 2011). je remercie vivement les quelques personnes qui m'ont contacté pour m'envoyer mes codes ou pour me soutenir moralement (`Ivan, va mourir). Je laisse ce post pour la postérité, si un jour vous êtes déprimé, si un jour vous pensez que votre vie ressemble à du VB6 émulé par du windev exécuté sur du sparc 64bit, lisez ces quelques lignes et rappelez vous qu'il y a toujours quelqu'un qui fail plus que vous et pour qui (parfois) ca fini (presque) bien quand même :D

jeudi, mars 24 2011

Fermeture du blog

Salut les zouaves, comme le titre de ce post l'indique, ce blog va fermer ses portes.

Je n'arrête pas le RE, je ne pars pas élever des chèvres (ni de poules) dans le Lubéron, je change juste de peau pour repartir plus blanc que blanc (lavé avec OMO).

Logiquement tous devrait rester en place sauf si un script kiddy s'amuse à defacer ma page avec un goatse ;)

Je devrai normalement rester sur IRC si vous voulez me faire un coucou sur #fat ou #uct (irc.epiknet.org).

Pas de mercis ou d'adieu donc, je ne suis pas mort !

jeudi, octobre 14 2010

Pourquoi le libre c'est nul sauf le python

Un petit post rapide pour partager avec vous un petit script fait à la va vite en python mais dont le résultat est, en toute modestie, pas dégueu.

J'ai récemment résolu une petite série de crackme linux pas bien méchants mais dont l'un comprenait une quantité non négligeable de code mort. Pour le résoudre sous IDA cela prenait 2 secondes, il suffisait de regarder les blocks sautant sur le printf "bad boy" pour retrouver les 2 uniques tests faits sur le sérial. Néanmoins les conditions "normales" du challenges exigeaient de ne se servir que des outils standards et gratuits des barbus qui puent.

J'ai donc décider de coder rapidement un petit outil personnalisable permettant de transformer la sortie de objdump en quelque chose d'humainement lisible, dans le même esprit que les graphs fournit par IDA.

Pour ce faire j'ai codé un petit script python à base de regexp qui prend en paramètre la sortie de objdump et vous donne en retour un fichier .dot compilable à l'aide de graphviz.

et voila le résultat :

pyda

Lire la suite...

mardi, septembre 28 2010

Armadillo mange des ours en slips ECDSA ou pourquoi Armadillo a-t-il été keygenné

Salut les zouaves, aujourd'hui on ne rigole plus, c'est du lourd ! (et je ne parle pas de mon pwnie award ! (hop comme ça je me la pète en même temps))

Mon stage s'étant terminé (depuis un moment), j'ai pu reprendre l'analyse de armadillo, hélas, une fois tout décortiqué et malgré quelques petites choses intéressantes, je n'avais pas grand chose pour faire un post digne de ce nom et était donc passé à autre chose.

Heureusement pour vous, un hasard de calendrier me permet aujourd'hui de vous fournir quelque chose de croustillant à savoir : Pourquoi Armadillo a été keygenné (par NGEN).

Cette information est passée plutôt inaperçue, aucune info sur google, aucun post sur un forum de reverse (enfin à ma connaissance) et je serai probablement passé à coté si une petite souris ne m'avait pas subrepticement susurré le lien donné précédemment.

Avant toute chose, petit retour en arrière dans le temps, afin de bien vous expliquer la faille dans l'algorithme de vérification d'armadillo il est nécessaire de le comprendre un minimum, je reprends donc mon ancien post là où il en été.

Lire la suite...

jeudi, juillet 29 2010

CONFidence ESET crackme (Le vrai, pas le tout pourri pour les pauvres étudiants francais)

Mdlolkikoodr tout le monde !

Tout d'abord désolé pour le silence prolongé, mon stage ne m'a pas laissé beaucoup de temps mais j'ai fait 2-3 trucs lolilols (ca a beau ne pas être français, respectons tout de même l'accord)...

Pour ce qui est de armadillo je n'ai toujours pas eu l'occasion de me pencher à nouveau dessus. Pour me faire pardonner, nous allons aujourd'hui parler du crack me proposé par ESET (lien qui pour une raison complètement inconnue ne fonctionne pas avec Opéra ...) lors de la série de la conférence CONFidence.

Ce challenge a été remporté par Gynvael Coldwind et j00ru qui n'a toujours pas publié sa solution malgré mes menaces de mort répétées donc je le fais à sa place, tant pis pour lui.

Lire la suite...

dimanche, mai 9 2010

Armadillo est un tatoo sous acide en manque de crack

Salut les zouaves, aujourd'hui pas vraiment de choses techniques juste une mise en bouche à mon prochain post ainsi qu'une bonne dose de rage...

Voulant me remettre un peu au reverse d'applis flash pour ne pas être spammé de pub quand je veux regarder le dernier épisode de bob l'éponge, j'ai téléchargé un soft qui va bien et que j'avais déjà "étudié".

Il se trouve que le soft en question est protégé par armadillo ayant un peu la flemme de l'unpacker une fois de plus, j'ai cherché si il n'avait pas été released et je suis tombé sur un keygen+patch de DVT.

Sachant que l'application était protégée par Armadillo, j'ai été assez impressionné par cette release et me suis mis en tête de faire la même chose :p

Armadillo utilise les courbes elliptiques pour vérifier le sérial entré, et c'est là que le bas blesse ...

Il se trouve que la librairie de bignum utilisée par Armadillo a surement été codée par un stagiaire d'Ouzbékistan en manque de crack et sous acide. Je ne sais pas si c'est une lib maison ou connue mais c'est assez édifiant ...

Lire la suite...

dimanche, mars 7 2010

StarForce : Tip and Tricks

Bon je me suis ch** dessus dans mes paramètres de configuration donc je re-compile tout xerces ..

J'en profite donc pour vous bassiner encore un peu avec StarForce en vous donnant un petit truc pour arriver à l'OEP :

Arriver à l'OEP sans encombre : Lancer le programme normalement, quand une fenêtre apparait vous informant qu'il ne vous reste plus que X jours avant expiration, s'attacher au processus avec olly, mettre un BP sur VirtualProtect, continuer l'exécution du processus, le programme break 2 fois sur VirtualProtect, à la troisième fois, mettre un BP sur la page mémoire correspondant au code (F2 dans la fenêtre memory map), virer le breakpoint sur VirtualProtect, reprendre l'exécution et hop magique, on arrive à l'OEP !

Sur ce je m'en vais réviser ma crypto .... Bon dimanche ;)

Starforce Again

Je profite du temps de compilation de xerces pour écrire un petit post à la va vite.

Aujourd'hui nous allons voir une autre feature de StarForce : la redirection de fonction.

J'ai rencontré cette feature après mon post sur la redirection des APIs et quand je l'ai vu j'ai pensé que c'était de la virtualisation de code tant le code de la fonction était horrible et prenait extrêmement de temps à s'exécuter avec plein de loop de partout etc.

J'avais abandonné jusqu'à ce que je tombe sur une application compilée avec VC 7.0 et dont l'une des fonction d'initialisation (donc commune à tout les programmes compilés avec VC 7.0) était redirigée. J'ai donc décidé de me re-pencher dessus avec cette fois ci un point de comparaison.

Pour étudier cette fonction de redirection (que je pensais être une fonction de virtualisation) j'ai posé des HBP en accès sur la valeur de EAX enregistré dans la pile. Cette valeur est baladée en mémoire dans 4-5 emplacement et finalement elle est dépilée et la fonction retourne dans ... la fonction originale ! Ce n'est donc pas une fonction de virtualisation mais bien une fonction de redirection !

Le problème est maintenant de fixer automatiquement ces redirections. On ne peut se baser sur une écriture de la pile, StarForce usant et abusant de call $+5 | pop reg et écrivant de cette façon extrêmement souvent à l'adresse située juste au dessus de l'adresse de retour. Heureusement, malgrès la complexité de la fonction de redirection et de ce petit inconvénient, StarForce utilise toujours la même portion de code pour retourner à la fonction originale. Cette portion de code étant très facilement identifiable, il suffit de faire une recherche en mémoire du pattern, de poser un HBP dessus et on arrive directement à la fonction redirigée !

Code restaurant les registres et retournant à la fonction redirigée :

  1. POP EAX
  2. POPFD
  3. POP EBP
  4. LEA ESP,DWORD PTR SS:[ESP+4]
  5. POP EDI
  6. POP ESI
  7. POP EDX
  8. POP ECX
  9. POP EBX
  10. XCHG DWORD PTR SS:[ESP],EAX
  11. RETN

signature de la portion de code : 58 9D 5D 8D 64 24 04 5F 5E 5A 59 5B 87 04 24 C3

Voili voilou, xerces a fini de compiler, je retourne à mon boulot ;)

vendredi, février 26 2010

Le reverse c'est trop mdlol ou comment Peggle Nights va nous ramener du sang frais

Salut à tous, je m'embétais un peu ce soir donc j'ai décidé de vous parler de "game hack"

Mes petits frères (et ma grande sœur) me tannaient pour que je leur crack (rooooo) des minis jeux pourris (de zylom pour ne pas le citer) limités à 60 minutes. En ayant marre de devoir cracker un jeux différent par semaine je leur ai bidouillé un loader universel pour tout les jeux de cet éditeur (la protection est rigolote d'ailleurs si vous voulez jeter un coup d'œil)

Bref, pour tester mon loader je suis tombé sur un mini jeu assez addictif (Peggle Nights Deluxe /!\)et, je l'avoue, j'ai passé pas mal de temps dessus hélas une fois le mode aventure terminé, il restait tout plein de coupes à gagner avec des défis etc. et là ca devenait VRAIMENT dur, de plus ma sœur me narguait avec tout ses trophés.

J'ai donc décidé de sortir olly et de voir si il y avait quelque chose à faire ....

Lire la suite...

vendredi, février 12 2010

Protection rigolote

Un petit post rapide pour vous présenter une protection que j'ai rencontré il y a peu (dans un bar, il faisait chaud, nous étions seuls, on s'est rapproché, je lui ai payé un verre, tous ca quoi).

Visiblement son concepteur sans être un pro de sécu savait qu'il existait de méchants keygenners qui allaient lui voler son travail et donc plutôt que de vérifier son serial avec une bête fonction facilement reversable et plutôt que de s'embeter avec des grosses librairies de crypto, des packers trop chers, il a décidé de faire son propre systeme de protection.

Le serial est convertit en un DWORD % 0x10000 et est utilisé comme offset, il écris alors un 1 à l'emplacement et continue son exécution normalement (ou pas si le 1 a écrasé une variable importante ...). Il va ensuite au moment de la génération d'images (c'est un soft de manipulation vidéo) vérifier si une variable globale est égale à 1 (la fameuse variable censée être initialisée par le serial) si ce n'est pas le cas, il insère un watermark. Le code insérant le watermark étant difficile à retrouver (pas d'APIs, noyé au milieu d'autres fonctions) il est compliqué de retrouver la variable globale testée et donc de générer des serials valides.

Bien sur on y arrive quand même avec un peu de temps, de plus si un serial est volé / cardé il devient très simple de connaitre l'adresse. Néanmoins pour un petit soft peu distribué, et face à des crackers pas très motivé ça à l'air de suffire amplement ... (aucun crack depuis la sortie du soft il y a 2 ans)

Voila voila, bonne journée ;)

mardi, février 9 2010

LFSROFL

Me revoilà avec mes titres de post foireux \o/

Suite à la lecture du post de corkami / Ange (je ne sais même pas si corkami est un pseudo ou un nom de blog ...) j'ai eu une idée pour junker les conditions de sortie des boucles.

Pour un état de l'art de ce qui existe allez donc voir le lien plus haut. Le but du junk de condition de sortie et de rendre la pose d'un breakpoint à la sortie d'une boucle plus difficile, empêchant donc le reverser de passer des milliers de layers en quelques secondes à l'aide d'un bête script.

L'idée dans les les techniques précédentes était de rendre la condition de fin obscure et / ou de cacher l'adresse de fin de boucle. Ce que je propose ici c'est de chiffrer cette adresse de façon à la rendre illisible tant que la condition de fin n'aura pas été atteinte.

Lire la suite...

dimanche, décembre 20 2009

Hercules, la victoire du muscle contre la carapace ou la défaite de Armadillo

Pouet les zouaves.

Aujourd'hui nous allons voir comment unpacker Armadillo (Hercules est un gentil (fin il fait un peu peur quand même) personnage de Marvel qui pête la gueule au méchant Armadillo qui devient gentil et qui devient méchant et re-gentil, c'est aussi le beau père de Sangoku mais ca c'est une autre histoire) , rien de transcendant, je ne parlerai pas des options phares de arma comme DebugBlocker, MemBlock, les nanomites etc. juste de la redirection de code, de la protection d'import et de la destruction d'IAT.

Je suis quand même assez fier du code que j'ai écris pour la résolution des imports ...

Lire la suite...

samedi, décembre 19 2009

BINI et BaDu, plus mieux que LordPE, plus moins bien que ImpRec

J'avais prévu de vous faire un post sur armadillo mais étant donné que j'avais un peu trop de trucs à dire j'ai décidé de vous parler d'abord des 2 libs que j'ai écrites à l'occasion du développement de mon call fixer

Ces 2 librairies servent à dumper et à reconstruire une IT depuis une DLL injectée (pour ceux qui n'auraient pas compris, je ne jure que par l'injection de DLL ;) ). ImpRec ne m'a jamais posé trop de problèmes par contre LordPE m'a plusieurs fois fait de sales coups surtout lors de la phase de reconstruction de dump.

Taille non optimisée, dernier byte non nul de chaque section supprimé. Tout ça m'a amené à écrire la première lib : BaDu (Baboon Dumper). Comme mon dumper optimise la taille du code au maximum et que je voulais caser l'IT dans une des sections de Armadillo sans trop m'embêter (et parce que avoir un call fixer qui pond un exe fonctionnel c'est la classe) j'ai décidé d'écrire une lib pour reconstruire l'IT : BINI (BINI Is Not ImpRec).

Désolé pour les noms foireux :D

Lire la suite...

vendredi, novembre 20 2009

HackLu Reverse Challenge

Lors de la dernière conférence Hack.lu il a été proposé 2 challenges de reverse, le premier étant un challenge de "crypto" par J-B Bedrune le deuxième un challenge de reversing avec moultes exceptions

Ayant réagit "un peu" vivement à une solution proposée par Thierry Zoller je me dois de faire une jolie solution ;)

Lire la suite...

mercredi, novembre 11 2009

HITB WMD CTF level 5

On continue donc avec une série de crack-mes windows proposés dans le cadre du HITB WMD CTF, nous verrons juste comment résoudre les crack-mes 4 et 5 (les crack-mes 2 et 3 étant un peu trop ... bizarres, sans possibilité de vérifier les résultats et le 1er je ne l'ai tout simplement pas regardé.

On commence donc aujourd'hui par le crack-me 5 et une fois n'est pas coutume, je vais tenter d'expliquer le plus clairement possible ma démarche pour l'étape de l'unpacking en espérant que cela encouragera les novices à s'y mettre ;)

Lire la suite...

dimanche, novembre 8 2009

l'ARM c'est rigolo

Hop hop hop

Ca ne rigole plus l'avalanche de posts arrive ;)

Samedi soir c'était CTF time avec le RuCTFE, je ne parlerai pas trop de ce ctf étant donné que je n'ai absolument RIEN compris de ce qu'il fallait faire (à part une sombre histoire de danses russes et de services à maintenir en route ...) bref, j'ai quand même finit par trouver mon créneau dans la team nibbles (20ème sur 43 s'pas glorieux mais bon) et je me suis attelé à l'étude d'un serveur arm qui tournait dans un émulateur androïd.

Nous allons donc voir dans ce post les rudiments de l'ARM, comment le reverser les doigts de pieds dans le nez en le décompilant à la main, comment on pouvait valider l'épreuve et enfin comment une exploitation de buffer overflow peut être faite même si ce n'était pas l'objet du challenge.

Lire la suite...

Impulse ou la poudre aux yeux de l'activation par internet

Je sais que ca fait longtemps que je n'ai rien posté, les études, la flemme etc.

Pour me rattraper je vais essayer de faire une petite série de posts, si ils n'arrivent pas n'hésitez pas à me gueuler dessus ca me motivera ;) (pas toi over, toi t'es pas venu pour mon anniversaire donc ch'te cause plus)

Au programme donc dans les prochains posts (pas forcément dans l'ordre ...) :

  1. Impulse ou la poudre aux yeux de l'activation par internet
  2. l'ARM c'est rigolo
  3. Hack.lu et challenges
  4. HITB WMD CTF
  5. Armadillo 6.X

On commence donc aujourd'hui par Impulse ...

Lire la suite...

samedi, juin 27 2009

ZwMapLolzSection ou le retour de Iinj

Salit salit salut les zigotos

En voulant faire un petit hooker d'API (dont je parlerai dans un autre post prochainement) je suis tombé sur l'API ZwMapViewOfSection exportée par ntdll (c'est l'appel a cette API qui déclenche l'envoit d'un message DLL_LOAD au debugger quand une dll est loadée)

Apres un petit peu de googlisation on voit dans la msdn que :

The ZwMapViewOfSection routine maps a view of a section into the virtual address space of a subject process.

et que cette fonction prend en parametre le handle d'un processus.

Cette API permet donc de mapper une section dans un processus, l'idée est alors d'injecter du code grâce à cette API (et donc sans utiliser le classique VirtualAllocEx et WriteProcessMemory)

Lire la suite...

vendredi, mars 13 2009

MC Chouffe : Reconstruire les fonctions redirigées par Asprotect

Comme vous l'avez surement remarqué, je suis pris d'une frénésie de rédaction d'articles ces temps ci (2 en février, 1 en mars !!!) espérons que cela dure et que vous apprendrez 2-3 trucs en me lisant ;)

Aujourd'hui donc nous allons voir comment fixer les fonctions redirigées par asprotect. Je n'ai pas vu de tuto sur ce sujet et bizarrement je n'en entends jamais parlé alors que c'est une des features les plus rigolotes d'Asprotect et surement la plus compliquée à fixer.

Asprotect permet en effet de rediriger des fonctions du programme au moment de la protection, il va désassembler le code de la fonction, le junker (ajout d'instructions inutiles, code spaghetti) et le polymorphiser (1 instructions -> 3-4 instructions) il va aussi émuler les sauts (conditionnels ou non) ainsi que certains couples comparaisons / jcc (remplacement des instructions par des call AsproFonction qui se chargent de remplacer la (les) instruction(s)).

Pour fixer tout ça (c'est à dire retrouver le code original ou un code ayant le même comportement et de taille inférieure ou égale à l'original) il faut donc :

  1. "tracer" le code des fonctions redirigées, retrouver l'intégralité des instructions en explorant tous les chemins possibles du code et en décodant les instructions émulée,
  2. Dé-junker le code c'est à dire repérer les instructions inutiles en nous basant sur l'utilisation des registres
  3. Dé-polymorphiser le code en utilisant des règles qu'il faudra définir
  4. Ré-assembler le code à son adresse d'origine en utilisant le moin de place possible et donc en utilisant des saut courts le plus souvent possible.

J'ai pris beaucoup de plaisir à coder ce "function fixer", j'espere que vous en aurez autant en me lisant ;)

Lire la suite...

jeudi, février 12 2009

Achevons la bête StarForce

Maintenant que nous avons un joli call fixer pour StarForce pourquoi ne pas faire un plugin pour ImpRec ?!

Il y a plusieurs obstacles avant d'arriver à un plugin fonctionnel et rapide et ce à cause du système de plugin ImpRec qui n'a pas été super bien pensé (enfin je trouve ..)

Lire la suite...

- page 1 de 2