Wobei man bei C/C++ in den meisten Fällen auch keinen Obfuskator mehr braucht, weil alles so durcheinander ist...
Wenn es um viel Geld geht, gut, aber sonst reicht der Compiler meistens auch.
Bin nicht mehr ganz am neuesten Stand, was Decompiler angeht, aber damals entsprach "von einem Programm automatisch generiert" ca. folgendem:
C++:
//----- (00401718) --------------------------------------------------------
FILE *__cdecl sub_401718()
{
FILE *result; // eax@2
int v1; // [sp+4h] [bp-4h]@6
byte_40E400 = 1;
byte_40E450 = 1;
while ( 1 )
{
result = File;
if ( File->_flag & 0x10 )
break;
while ( byte_40E450 % 17 && !(File->_flag & 0x10) )
{
--File->_cnt;
if ( File->_cnt < 0 )
v1 = _filbuf(File);
else
v1 = *File->_ptr++;
dword_40E478 = v1;
dword_40E478 = -dword_40E478;
dword_40E478 += byte_40E400;
if ( byte_40E411[0] == 1 )
{
byte_40E410 = Str[byte_40E450 % strlen(Str)];
while ( byte_40E410 >= 0 )
{
--byte_40E410;
++dword_40E478;
}
if ( dword_40E478 > 127 )
dword_40E478 -= 255;
}
fprintf(dword_40E408, "%c", dword_40E478);
++byte_40E450;
}
byte_40E450 = 1;
if ( byte_40E400 == 1 )
byte_40E400 = 5;
if ( byte_40E400 == 5 )
byte_40E400 = 6;
if ( byte_40E400 == 6 )
byte_40E400 = 3;
if ( byte_40E400 == 3 )
byte_40E400 = 7;
if ( byte_40E400 == 7 )
byte_40E400 = 2;
if ( byte_40E400 == 2 )
byte_40E400 = 4;
if ( byte_40E400 == 4 )
byte_40E400 = 1;
}
return result;
}
Compiler auf Release mit Geschwindigkeitsoptimierungen, kein Obfuskator.
Eigentlich war es eine ziemlich harmlose Funktion, liest aus einer Datei was aus und schreibt wieder irgendwas...
kompilieren und wieder zurück; wie man sieht ist das Ergebnis bewundernswert
Sprachen wie C# und Java kann man aber vergleichsweise gut dekompilieren, da sie nicht "echte" Programme erstellen, sondern ein eigenes, besser lesbares Binärformat haben.
Gruß
PS: Mir fallen gerade die if am Schluss auf...wtf ist das?
Ein
hätte es auch getan...
Dekompiler...