How to read captchas
I've always wondering how can the bots on the internet crack captchas. How can
a algorithm read an image.
Then I heard about OCRs (Optical Character Recognition) which are developped in
order to do such tasks.
The captcha below will be our example:
Homemade algorithm
First I tried to follow the article decoding
captcha's and to develop a homemade
algorithm.
After creating a kind of database of the letters, the result was clearly bad. I
mean I had 0 cracked captcha...
The main fact is that I assumed the text was horizontal but it's not always the
case.
Moreover, the space between the letters is really thin sometimes.
So when the algorithm was trying to split the letters, some of them were
gathered by 4.
Comment hook une fonction standarde avec LD_PRELOAD
Futex m'a parlé il y a peu d'un trick unix qui m'était inconnu jusqu'alors :
poser un hook avec LD_PRELOAD.
Pour faire simple, LD_PRELOAD permet de charger une lib avec celles
standardes.
Cette méthode peut être utile si vous voulez modifier le comportement d'un
programme de manière simple mais efficace.
Pour cela, il suffit de créer une fausse lib contenant votre fonction maison
ayant le même nom que celle que vous voulez hook et renseigner le chemin
d'accès vers celle-ci dans la variable d'environnement LD_PRELOAD.
La méthode est applicable seulement si le programme cible a été compiler pour
pouvoir utiliser des lib partagées.
C'est généralement le cas puisque les fonctions standardes de C comme printf,
strcmp, etc. sont contenues dans ce type de lib.
Donc si la cible les utilise alors vous pouvez appliquer ce trick.
Pour en être certain il suffit d'utiliser le tool file et de regarder si
c'est le cas.
$ file example
example: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically
linked (uses shared libs), for GNU/Linux 2.6.32,
BuildID[sha1]=0x24a0e0e2aa5e5603263aa9f6e89d839dc1eb4090, not stripped