Brute force on a .p12 password with c#

It started with a VPN problem

The other day, I had an issue with my VPN and someone from the IT service remotely connected to my machine to put a certificate on it. While he manipulated the certificate manager, he exported a certificate and typed a password of 4 characters that I couldn’t see (characters were obfuscated). Just after that he requested me to use another wifi connection to test the VPN so we had to stop the chat and the remote session. Unfortunatly for me it didn’t work and the guy went to lunch.

So now, I was stuck with no VPN and a certificate which were not working! I decided to delete all the personal certificates having my name from my computer and to re-import the p12 file that the IT guy left on my desktop. I tried to do so but then I was requested to type the password – remember? it was only 4 chars. I tried all the stupid 4 letters password I got in mind (“test”, “1234”, “0000”, “aaaa”, “azer”, “qwert” …) but none of them worked.

Let’s brute force that weak p12 password

So here is the interesting part. I decided to try that very famous thing called “brute force” a password. I was saying in my mind “With my years of programming experience, it should take me 10 minutes to code it and few second to run”.
But actually it took me up to one hour to make the stuff to actually work without obvious bug in C#:

private IEnumerable<string> EnumerateOptions(IList<char> options, int minLength, int maxLength)
{
    var number = new List<int>(maxLength);
    for (int i = 0; i < minLength; i++)
        number.Add(0);

    while (number.Count <= maxLength)
    {
        yield return Stringify(number, options);

        bool overflowed = true;
        for (int numberPart = number.Count - 1; numberPart >= 0 && overflowed; numberPart--)
        {
            number[numberPart]++;
            if (number[numberPart] >= options.Count)
            {
                number[numberPart] = number[numberPart] % options.Count;
            }
            else
            {
                overflowed = false;
            }
        }
        if (overflowed)
            number.Insert(0, 0);
    }
}

private string Stringify(IList<int> number, IList<char> options)
{
    return string.Join("", number.Select(n => options[n]));
}

The result

The app was testing 2k passwords per seconds and found the password in less than 3 minutes 🙂 !

p12-brute-force

The conclusions are

  • don’t use a 4 letters password, obviously, especially on your p12 files which can used to act on your behalf
  • coding simple things can take more time than we expect (think hiring interview questions)
  • The method I’m using to check the password (X509Certificate2Collection.Import) throws an exception when the password is wrong. This makes the process extremelly slow (15x). When you happen to completely ignore the exception (catch(Exception) with a variable), it becomes reasonably faster if you activate the code optimization (Release mode)

That’s it, the code is on Github.  If you happen to spot obvious bugs in the enumerator of passwords, don’t hesitate to let me know with a comment.

 

Software Development Engineer – Ho Chi Minh City, Vietnam

My company is currently looking for great software developers in Saigon. If you’re not afraid of challenges and are really passionate about programming, then read this job description!
If you’re interested, don’t hesitate to contact me at : manitra [at] manitra [dot] net.

Criteo

Criteo delivers personalized performance advertising at an extensive scale. Measuring return on post-click sales, Criteo makes ROI transparent and easy to measure.
Criteo has over 1,000 employees in 17 offices across the Americas, Europe and Asia-Pacific, serving over 6,000 advertisers worldwide with direct relationships with over 7,000 publishers.
For more information, please visit http://www.criteo.com

Software Development Engineer

We’re looking for passionate and hardworking software development engineers to build exceptional web applications for our customers and suppliers.

Your daily duties will be
– To code features in Javascript, HTML, Less (Front end) and C# (Back end)
– To write automated tests (unit tests and end to end tests) to be sure they work now and later
– To learn and share knowledge to others through seminars and documentation

We fully embrace the agile methodology in our day-to-day work:
– We show work in progress as soon as possible to clients and continuously adapt our work based on their feedbacks
– We deploy a new version of our applications at least every weeks
– We have several small teams (5 to 9 persons) and they are fully autonomous to deliver complete features to production
– Meetings are short, specific and timed
– Documents are concise, up to date and available on a searchable wiki

We apply best of breeze coding practices like
– Continuous integration: code is compiled, deployed and tested automatically after each commit
– Code reviews : everything is reviewed by your teammates to share knowledge and spot dirty stuffs
– Inversion of Control: Decouple classes to allow dependency injection so that it’s easier to debug, extend and test

We use great tools
– Visual Studio 2013, Resharper 8, Webstorm
– Git versioning control
– Jira Agile for Sprint management
– Confluence for documentation

Finally, our web applications are to be built upon the best technologies which includes
– Javascript and especially AnglurarJS, Twitter Bootstrap
– Asp.Net WebApi,
– Sql Server, MongoDb, Memcached

Requirements

– Passionate about software development, really
– Willing to build great web sites
– Two successful years of experience in software development
– Ability to speak English
– Very good in at least one strongly typed and object oriented programing language (C#, Java, C++ ..)
– Very good in at least one loosely typed language (Javascript, Python, Php ..)
– Significant experience in writing automated tests
– Interested in cutting edge agile workflows
– Team player

If you’re interested, don’t hesitate to contact me at : manitra [at] manitra [dot] net.

Criteo Code of Duty 2

Après une première session pleine de succès, Criteo remet ça.

Quoi

Criteo organise un concours de programmation ouvert à tous les passionnés de programmation. Il y a 20 000 € à partager entre les 10 premiers (le premier empochant 10 000 €).

Quand et Ou

La première phase se fait sur le site de programmation codility.com le 02 Juin 2012 à midi. Pour vous inscrire il faut aller :

Comment ça se passe ?

Les qualificatifs

Les qualificatifs se dérouleront sur codility.com et voici le principe de fonctionnement :

  • vous ecrivez votre code sur le site directement (les languages autorisés sont : Java, C++, C#, Javascript, Pascal, Perl, PHP, Python, Ruby, VB.NET, Objective-C et Lua)
  • vous choisissez vos données d’entrées (en général des tableaux d’entiers ou de chaines de caractères, vous pouvez créer plusieurs jeux de données)
  • vous cliquez sur un bouton pour compiler votre code et le tester avec les données d’entrées
  • le site vous informe si votre code a fonctionné avec les données saisies et si ce n’est pas le cas, vous avez du details sur les raisons de l’echec.

La finale

Quant à la finale, vous serez invité à venir au siège de Criteo (Paris) et cette étape se passera dans nos locaux directement.

Donc voila, il ne vous reste plus qu’à vous inscrire : labs.criteo.com/code-of-duty-2

Configurer Free Mobile sur iPhone 4S pour Internet et MMS

Si vous venez d’insérer votre carte SIM Free Mobile sur votre iPhone, et que votre ligne est activée, vous vous êtes surement rendu compte que ni les MMS, ni Internet ne fonctionnaient.

Faire fonctionner Internet et les MMS sur Free Mobile avec un iPhone 4S

Pour vous faire gagner du temps, voici la démarche pour faire fonctionner la connexion internet par Free Mobile :

  • Allez dans les Réglage > Général > Réseau mobile
    • Activez l’option Données cellulaire
    • Activez l’option Données à l’etranger
  • Allez dans Réseau de données cellulaires
  • Dans la zone Données cellulaires,
    • pour l’option Nom du point d’accès, mettre la valeur : free
    • laisser les autres options à vide
  • Dans la zone MMS,
    • pour l’option Nom du point d’accès, mettre la valeur : mmsfree
    • pour l’option MMSC, mettre la valeur : http://mms.free.fr
    • laisser les autres options à vide
  • Dans la zone Partage de connexion
    • pour l’option Nom du point d’accès, mettre la valeur : free
    • laisser les autres options à vide
  • Redémarrez votre téléphone

Sans aucune autre modification, Internet et les MMS devraient fonctionner. Si jamais ce n’est pas le cas n’hésitez pas rajouter des commentaires pour décrire vos problèmes et éventuellement vos solutions.

Configurer Free Mobile sur Windows Mobile 6.1 pour Internet et MMS

Suite aux questions relatives aux téléphones Windows Mobile et Free Mobile sur mon post au sujet de Windows Phone, je crée un nouveau post à ce sujet.

Si vous venez d’insérer votre carte SIM sur votre Windows Mobile, et que votre ligne est activée, vous vous êtes surement rendu compte que ni les mms, ni internet ne fonctionnait. Voici donc les étapes à suivre pour configurer votre Windows Mobile. L’exemple concerne samsung player addict SGHI900 et m’a été souflé par Bernard (bernard, une url ? 🙂 ) .

Configuration pour internet et les MMS pour WM 6.1

Paramères/ connexions :

  • ajouter un nouvelle connexion modem
  • nom de connexion : free
  • modem : Ligne cellulaire (GPRS, 3G)
  • nom point d’accès : Free
  • laisser le reste vide

puis onglet avancé :

  • Sélectionner des réseaux
  • nouveau … mmsfree

avec une nouvelle connexion modem

  • nom de connexion : mmsfree
  • modem : Ligne cellulaire (GPRS, 3G)
  • nom point d’accès : mmsfree
  • domain:mms.free.fr
  • laisser le reste vide

puis remettre la connexion pour les prog. … :  free

Config pour les MMS :

dans programme message pour SMSMMS
menu / Option MMS … /serveur /nouveau
avec :

  • Nom de serveur :mmsfree
  • passrelle: vide
  • Numero de port 8080
  • adresse du serveur http://mms.free.fr
  • connecter via : mmsfree

et voila tout marche :  Internet et MMS.

Si vous êtes sur un Windows Phone, vous pouvez lire cet article.

Configurer Free Mobile sur Windows Phone 7.5 Mango pour Internet et MMS

Si vous venez d’insérer votre carte SIM Free Mobile sur votre Windows Phone, et que votre ligne est activée, vous vous êtes surement rendu compte que ni les mms, ni internet ne fonctionnait.

Faire fonctionner Internet sur Free Mobile avec un Windows Phone 7.5 Mango

Pour vous faire gagner du temps, voici la démarche pour faire fonctionner la connexion internet par Free Mobile :

  • Allez dans les Paramettres > réseau mobile
  • Pour Option d’itinérance, selectionnez itinérance
  • Tout en bas, cliquez sur Ajouter APN
  • Dans le champs APN saisissez : free
  • Ne mettez rien sur les autres champs
  • cliquez sur l’icone pour valider
  • Redémarrez votre téléphone

Sans aucune autre modification, internet devrait fonctionner. Si jamais ce n’est pas le cas n’hésitez pas rajouter des commentaires pour décrire vos problèmes et éventuellement vos solutions.

Faire fonctionner les MMS sur Windows Phone 7.5 Mango avec Free Mobile

Ne cherchez pas : il n’est pas possible à l’heure actuelle de faire fonctionner les MMS et Internet en même temps sur Windows Phone si votre opérateur est Free Mobile

C’est un peu triste mais bon, il vous reste l’email 🙂

Pour les utilisateur de Windows Mobile 6, j’ai repris le commentaire de bernard dans un nouveau post ici .

Sweet DevTools

I just published few online tools for developers at devtools.manitra.net and I hope they will allow you to save time. The widgets currently available are :

Those tools already exist on the web but the key stuffs here is that they are :

  • tiny (minimalist web page without blabla about what a base64 encoding is etc ..)
  • embeddable as widget
  • free and ad-free

By the way, they are best used within a netvibes dashboard (Web Page Widget).

Enjoy 🙂

Criteo Publisher Marketplace : Claim you money starting from 50 USD/50EUR/50GBP

Starting from today, Criteo PM is reducing the minimum amount of money to get paid. The previous floor was 150€/$/£, and it is now as low as  50€/$/£, depending on your country.

If you have a website with more than 100k  displays a month and want to get more money, you can register now at Criteo PM and give it a try.

How could you get more money with Criteo PM ? here are the step :

  • calculate your current average CPM on your site
  • register to Criteo PM, and put a minimum CPM equal to your average value
  • put your current advertisement code in the Criteo PM “passback”  configuration
  • put the Criteo PM code on your web pages

Criteo will buy impressions at a price which is greater or equal to the minimum you set. And when we can’t buy it at that price (because we don’t know the end user), we’ll just drop your current advertisement code so that your usual ads are displayed (a passback).

Code of duty : le concours de programmation de Criteo

Criteo, ma société, lance un concours de programmation avec 10 000€ ou 20 IPAD2 à gagner. Les short listés auront de grandes chances d’être embauchés.

Si vous en avez marre des SSII ou des sociétés qui ne jurent que par le prestige des diplômes et que, comme moi vous êtes passionnés par la programmation, c’est le moment de vous bouger et de rejoindre le petit Google français.

p.s : ce n’est pas un jeu vidéo 🙂