Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

Re^2: is it irreversible

by diotalevi (Canon)
on Mar 14, 2003 at 13:39 UTC ( #243022=note: print w/replies, xml ) Need Help??

in reply to Re: is it irreversible
in thread Here is a commercial obfuscator

I think that if the primary benefit of this script is to rename all the meaningful symbols away then I can do that just as well using my text editor's replace-all function. I get that for free.

Seeking Green geeks in Minnesota

Replies are listed 'Best First'.
Re: Re^2: is it irreversible
by Anonymous Monk on Mar 14, 2003 at 13:47 UTC
    Won't work - it's terribly time-consuming and difficult since only perl can parse Perl. How do you plan to continue development (say there appeared a need in some new feature) after you've obfuscated you sources? :)

      You don't think I'd obfuscate the sources I planned to distribute Edit [ work with ] do you? That'd be nuts. Anyhow, this would happen two ways - most of the time it doesn't matter that only the perl lexer/parser can completely parse perl. If the source is written correctly the first time then its trivial to do the first two of the major obfuscations - symbol renaming and text string encoding. I think that if I were serious about having "obfuscated code" I'd hack up B::Deparse (exempting BEGIN blocks which would have to be done by hand or another method) so that it did all the work for me anyhow which alleviates all the problems you've described.

      Seeking Green geeks in Minnesota

        Usually after release of 1.0 version some versions come after. So you'll have to repeat this obfuscation process for each version. Parsing perl is needed because you have to destinguish sub names and same words inside string constants or regexps (e.g. "sub communicate {}" and "print q!unable to communicate!;"). Yes, the only viable solution is writing something similar to or hacking B::Deparse.
      it's terribly time-consuming and difficult since only perl can parse Perl

      cperl-mode comes darn close. I've seen it fooled a couple of times, but it's very rare. Almost all of the Obfuscated Perl Competition winners are correctly syntax-highlighted by cperl-mode, and excepting some disagreement between it and me about the correct indentation of lines that start with the catenation operator (I want subsequent ones to line up, and it indents each one further than the previous), automatically indented as well.

      cperl-mode, for those who don't know, is written in lisp, of course, and comes with Emacs.

      for(unpack("C*",'GGGG?GGGG?O__\?WccW?{GCw?Wcc{?Wcc~?Wcc{?~cc' .'W?')){$j=$_-63;++$a;for$p(0..7){$h[$p][$a]=$j%2;$j/=2}}for$ p(0..7){for$a(1..45){$_=($h[$p-1][$a])?'#':' ';print}print$/}

        cperl-mode is easily confused. Or at least it has been many times when I've preferred it wasn't. Its certainly no panacea though it should handle all the output from all of the recently mentioned obfuscators just fine.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://243022]
and a moth chases the moon...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (4)
As of 2017-07-24 21:09 GMT
Find Nodes?
    Voting Booth?
    I came, I saw, I ...

    Results (359 votes). Check out past polls.