Evenement:NerdMonday 09/13

Comment faire une mesure ? Montage électronique, amplification et filtrage (bp, ~1h)

 * Slides: [[File:NerdMonday_DSP.pdf]]
 * Code Arduino/C/Matlab: [[File:NerdMonday_DSP_files.zip]]

Erlang ou Haskell: comment choisir son nerdisme ? (Bram)
Probablement plus que 30 min, ou alors seulement un des 2 langages.


 * Slides: https://github.com/Psycojoker/slides_haskell_or_erlang/tree/master (il manque quelques images dans le dépot).
 * Livre sur haskell: http://learnyouahaskell.com/
 * Livre sur erlang: http://learnyousomeerlang.com/

Crypto challenge write-up
Un challenge du CTF de Hack.lu2012 qui implique de la crypto pour péter un jeu en ligne.

Par Doegox, 30 mins à 60 mins

Mail d'intro
Ahoy !

TL;DR : NerdMonday le 9 septembre à 19h au 131. (renommé 0x83 pour l'occasion)

Vu le succès croissant des SmartMondays on a décidé d'organiser une nouvelle série de conférences mensuelles : les NerdMondays. Le but de la chose est de pouvoir présenter des sujets fort techniques ou qui demandent un gros pré-requis sans pour autant rendre les SmartMondays trop difficiles d'accès pour les néophytes.

L'idée est donc de laisser les SmartMondays quasi inchangés (sauf en virant les sujets très techniques comme de la décompilation d'assembleur et la crypto avancée) les 1ers lundis du mois et de mettre les NerdMondays les 3èmes lundis.

Malheureusement, le mois de septembre est un peu chamboulé à cause de la rentrée : on ne fera pas de SmartMonday en septembre et le NerdMonday sera le 9 septembre.

Pour cette première édition de test, la soirée sera orientée barcamp/workshop. Tout le monde est invité à parler d'un truc bien nerd pendant 5, 10 ou même 30 minutes dans la salle principale du 131. Il est prévu de faire tourner quelque chose qui streamera l'écran du speaker aux participants pour que tous ceux qui sont autour de la table puissent en profiter.

N'hésitez pas à proposer un talk, un mini-workshop, une présentation de quelque chose avec lequel vous avez joué et qui était cool. Bref quelque chose qui plaira à des geeks. Vous pouvez soit répondre à ce mail pour proposer soit m'envoyer un mail à moi si vous êtes timides ou encore ajouter votre proposition directement sur le wiki.

Rendez-vous donc le 9 septembre à 19h au 0x83 :)

C4

Crypto challenge
Voici donc le challenge que je vous propose d'essayer par vous-même d'ici lundi. Il y a évidemment déjà des write-ups de ce challenge sur le Net, dont le mien, mais jouez le jeu et attendez la présentation avant de les chercher ;-) Et si vous n'y tenez plus et jetez tout de même un oeil aux solutions, essayez de les coder vous-même car il y a une différence entre comprendre et mettre en oeuvre! Vous pouvez en discuter ou poser vos questions sur la ML discussions par contre je ne suis pas sur le chan IRC.

Jouez contre la Zlot Machine sur devel.yobi.be:2053 nc devel.yobi.be 2053 Ce challenge comporte deux étapes (mais on peut faire la seconde sans passer par la première...)


 * 1) Décodez le contenu d'une sauvegarde
 * 2) Débrouillez-vous pour obtenir 8 points de bonus

Bonne chance!

Hints:
 * The probability to win a bet is very, very, very low.
 * You might think that the strategy for solving this challenge is placing a risky bet and restoring a saved game when the bet is lost. The chance to win like this is ZERO (0, Nada, Non, Niente, Nix, Nullo, None).
 * This is a crypto challenge.
 * Check the leaked part of the source code below

def loadState(self, statestr): try: dec = decrypt(statestr.decode("base64")) if '\x00' in dec: self.sendLine('Error loading game: invalid characters') return try: state = json.loads(dec) except Exception, e:	   self.sendLine('Error loading game: ' + str(e)) return self.credits = state['credits'] self.bonus = state['bonus'] if self.bonus > 8: #XXX A few lines got lost in here during our recovery self.sendLine('Restored state.') self.sendLine(self.msgs['BALANCE'] % (self.credits, self.bonus)) except Exception, e:	self.sendLine('Error loading game: ' + str(e))


 * 1) crypto stuff

def addPadding(data, block_size): data_len = len(data)+1 # required for the last byte pad_len = (block_size - data_len ) % block_size pad_string = '\xff' * (pad_len) # arbitrary bytes to fill up block, -1 for last byte. generated below last_byte = struct.pack(' block_size or pad_len < 1: raise ValueError("Encryption Error, Invalid Padding :/") else: return data[:(len(data)-pad_len)]

def encrypt(data, key=SECRET_KEY, iv=IV): iv = urandom(16) # change IV for each encryption. cipher_obj = AES.new(key, AES.MODE_CBC, iv) data = addPadding(data, 16) return iv+cipher_obj.encrypt(data)

def decrypt(data, key=SECRET_KEY): iv, data = data[:16], data[16:] # d'uh   cipher_obj = AES.new(key, AES.MODE_CBC, iv) padded = cipher_obj.decrypt(data) return delPadding(padded, 16)