Tachatte
Un article de Haypo.
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



