Tachatte

Un article de Haypo.

Retour à la page précédente Retour aux projets à Victor

Tachatte est un programme Python d'obscusification de code source C. Il remplace tous les mots clés, chaînes de caractères, et nombres par des mots générés aléatoirement.

Le dictionnaire de remplacement est écrit directement dans le sortie à l'aide de "#define". Exemple :

#define chAmeAu int
#define tAchaTte "encode"
#define gROSsEpuTe 'H'

Sommaire

[modifier] Téléchargement

Utilisez SubVersion pour obtenir la dernière version :

svn co http://haypo.hachoir.org/svn/misc/tachatte.py

Vous pouvez également consulter le code source en ligne.

[modifier] Exemples

[modifier] Code source original

void encodechar(unsigned char c){
        unsigned char i;
        for (i=0; i<8; i++)
        {
            putchar(tachatte[i][c & 1]);
            c >>= 1;
        }
        putchar(' ');
}

[modifier] Mode words

chAmeau TaRace(chameau cOUiLle TaChatTe){
        chameau cOUiLle merDE;
        for (merDE=enCuLe; merDE<grosSEpute; merDE++)
        {
            bAtaRD(gROssEpuTe[merDE][TaChatTe & mErDe]);
            TaChatTe >>= mErDe;
        }
        bAtaRD(tacHaTte); 
}

[modifier] Mode moo

mooooO MoOOoo(moOoOo MoOooo MOOooO){
        moOoOo MoOooo MooOoO;
        for (MooOoO=MOOoOo; MooOoO<MOoOOo; MooOoO++)
        {
            mooOoO(MOOOoO[MooOoO][MOOooO & mOOOoo]);
            MOOooO >>= mOOOoo;
        }
        mooOoO(MOOOoo); 
}

[modifier] Mode tachatte

tAchaTte TACHatte(tAChAtte TAChatte TacHaTte){
        tAChAtte TAChatte TAcHaTte;
        for (TAcHaTte=TacHAtte; TAcHaTte<TaCHAtte; TAcHaTte++)
        {
            tAcHaTte(TachATte[TAcHaTte][TacHaTte & tachAtte]);
            TacHaTte >>= tachAtte;
        }
        tAcHaTte(TachAtte); 
}

[modifier] Mode letter

e o(j c a){
        j c k;
        for (k=d; k<t; k++)
        {
            m(x[k][a & f]);
            a >>= f;
        }
        m(aa); 
}

[modifier] Mode moo êtreme

Mode moo avec les options poussées à fond (--mode=moo --eat-spaces --syntax=on --random --eat-comments) :

#define mOooO 1
#define moOoO )
#define MOoOO char
#define MoOOo [
(...)
#define MooOo 8
#define mooOo >>=
#define mooOO ;
#define mOoOo &
#define moooO (
#define MOOoO ++
#define MOooO }
mOOOo MoOOO moooO MOOOo MOoOO MooOO moOoO mOOoO MOOOo MOoOO MoOoO mooOO MOoOo
moooO MoOoO MoooO moOOo mooOO MoOoO MOOoo MooOo mooOO MoOoO MOOoO moOoO mOOoO
mOOOO moooO MOOOO MoOOo MoOoO moOOO MoOOo MooOO mOoOo mOooO moOOO moOoO mooOO
MooOO mooOo mOooO mooOO MOooO mOOOO moooO mOoOO moOoO mooOO MOooO

[modifier] Mode letter extrême

Mode letter avec les options poussées à fond (--mode=letter --eat-spaces --syntax=on --random --eat-comments) :

#define u =
#define a tachatte
#define z 8
#define w ]
(...)
#define n [
#define b }
#define j >>=
#define p putchar
#define e ' '
f  d  aa x  g  l  s  r
x  g  v  t  m  aa v
u  h  t  v  y  z
t  v  o  s  r  p
aa a  n  v  w
n  l  k  q
w  s  t  l
j  q  t
b  p  aa
e  s
t
b

(bon là j'ai réindenté les lettres pour m'amuser)

[modifier] À faire

  • Ecrire un mode qui va simplement modifier le nom des fonctions et des variables => n'a pas besoin de #define et reste compilable, mais rend le code incompréhensible :-)
  • Utiliser un parseur plus performant => voir python parsers

[modifier] Liens externes

  • IOCCC : The International Obfuscated C Code Contest, concours du code source C le plus illisible possible :-)