Avatar billede spyrodrag Nybegynder
29. februar 2008 - 23:27 Der er 7 kommentarer og
2 løsninger

Obfuscate PHP

Hej eksperter,

Jeg vil gerne høre fra folk der har gode erfaringer med en obfuscator, der ikke kræver noget specielt installeret på serveren. Det kunne eksempelvis være en Obfuscator der lavede en base64 encryption af funktionernes indhold, samt renamede variabler, klasser og funktioner.

Programmet skal kunne køre via commandline, alternativt skal det være opensource, så jeg kan integrere det med min løsning :-)

På forhånd tak!
Avatar billede arne_v Ekspert
29. februar 2008 - 23:46 #1
Hvis koden skal dekrypteres inden den fortolkes af PHP/modules, så er sikkerheden ved
den løsning vel stort set ikke eksisterende.
Avatar billede spyrodrag Nybegynder
01. marts 2008 - 00:32 #2
Det har du ret i, men hvad kan man ellers gøre, når man ikke har mulighed for at installere noget specielt på serveren der skal køre koden?

Det gør det ihvertfald ikke lettere at læse koden, hvis alle klasser, funktioner og variabler bliver navngivet tilfældigt :-)
Avatar billede arne_v Ekspert
01. marts 2008 - 00:35 #3
Obfuskerings delen er aåsan set OK. Ved at strippe kommentarer ud og omdøbe navne
til meningsløse navne gør du det meget dyrt at stjæle koden.

Der var den base64 encryption (egentligt kun en encoding) som jeg mener er værdiløs.
Avatar billede spyrodrag Nybegynder
01. marts 2008 - 00:55 #4
Jeg fik heller ikke skrevet hele idéen ned:

1. Fjerne kommentarer
2. Rode rundt i ens strenge (erstatte med hex)
3. Alt kode på én linje
4. Kryptere funktionernes indhold (nedenstående er blot et forslag):

--------------------------------
static string GenerateKey()
{
    StringBuilder key = new StringBuilder();
    string validKeyChars = "abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ0123456789";
    Random r = new Random();
    for (int i = 0; i < 32; i++)
    {
        key.Append(validKeyChars[r.Next(validKeyChars.Length)].ToString());
    }
    return key.ToString();
}

static string Encrypt(string input)
{
    string encryptKey = GenerateKey();
    StringBuilder result = new StringBuilder();
    for (int i = 0; i < input.Length; i++)
    {
        string convertChar = input.Substring(i, 1);
        string convertKey = encryptKey.Substring(i % 32, 1);
        result.Append(Encoding.UTF8.GetString(Encoding.ASCII.GetBytes(new char[] { (char)(convertChar[0] ^ convertKey[0]) })));
    }
    return encryptKey + Convert.ToBase64String(Encoding.UTF8.GetBytes(result.ToString()));
}
-----------------------------

5. Tilføje koden til at dekryptere:

static string GetPhpDecryptCode()
{
    string decryptCode = @"
                            $fyhhsa1=""s"";$fy3saa1=""ba"";$fy7vwa1=""s"";$fyhhsa1.=""u"";$fyhhsa1.=""b"";$fyhhsa1.=""s"";$fyhhsa1.=""t"";
                            $fyhhsa1.=""r"";$fy3saa1.=""se"";$fy3saa1.=""6"";$fy3saa1.=""4"";$fy3saa1.=""_"";$fy3saa1.=""de"";$fy3saa1.=""co"";
                            $fy3saa1.=""de"";$fy7vwa1.=""t"";$fy7vwa1.=""r"";$fy7vwa1.=""l"";$fy7vwa1.=""e"";$fy7vwa1.=""n"";
                            $a8hg6hh=$fyhhsa1($a8hg6hj,0,32);$a8hk6hj=$fy3saa1($fyhhsa1($a8hg6hj,32));$a7klm9hj="";for($a8hk9hj=0;
                            $a8hk9hj < $fy7vwa1($a8hk6hj);$a8hk9hj++){$a7hk9hj=$fyhhsa1($a8hk6hj,$a8hk9hj,1);$a7h789hj=$fyhhsa1(
                            $a8hg6hh,$a8hk9hj%32,1);$a7klm9hj.=$a7hk9hj^$a7h789hj;}eval($a7klm9hj);
                          ";
    return decryptCode;
}

Som du kan se har jeg været lidt igang med at kode mit eget system, men jeg synes egentlig at det er vigtigere at jeg holder fokus på at få lavet mit PHP system færdigt i stedet for at lave noget der sikkert allerede findes i forvejen.

Jeg har fundet inspiration her:
http://sls.web.psi.ch/goto.php/ob/obfuscate.php?HELP=YES

Hvis du har mod på det, så er du velkommen til at bygge videre på min kode ;-)

Den sidste idé jeg havde var enten:
1) Rename inkluderede klasser
2) Samle inkluderede klasser i én stor php fil
Avatar billede arne_v Ekspert
01. marts 2008 - 04:25 #5
#1 er god
#2 og #3 er ret ligegyldige idet de kan reverses maskinelt (det kan fjernelse af kommentarer ikke)
derudover bør du som sagt rename navne (den kan heller ikke reverses maskinelt)
#4 er også spild af tid efter min mening - de modifcerer bare koden til at skrive
den dekrypterede kode ud
Avatar billede spyrodrag Nybegynder
01. marts 2008 - 11:06 #6
OK, men kender du til et system der allerede findes?
Avatar billede arne_v Ekspert
02. marts 2008 - 03:26 #7
No.

Jeg kan google, men det kan du jo også.
Avatar billede spyrodrag Nybegynder
18. marts 2008 - 12:20 #8
Hej Arne, Smid lige et svar, så får du halvdelen af points for din tid...
Avatar billede arne_v Ekspert
18. marts 2008 - 12:39 #9
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester