@@Original: alias obtest1 { echo -a hello } alias obtest2 { echo -a hello2 } alias obtest3 { var %x = 1 while (%x <= 10) { echo -a %x inc %x } return %x } alias wtf { return lol } alias abc { return $rand(1,10) } alias def { return $r(1,10) } alias ghi { return $left($1,$2) } alias jkl { return $right($1,$2) } @@Obfuscated: alias obtest1 { echo -a hello } alias obtest2 { echo -a hello2 } alias obtest3 { var %OO0O0O0O0O = 1 while (%OO0O0O0O0O <= 10) { echo -a %OO0O0O0O0O inc %OO0O0O0O0O } return %OO0O0O0O0O } alias wtf { return lol } alias abc { return $O0OO0OO00(1,10) } alias def { return $O00000O0(1,10) } alias ghi { return $OO0O0000O0($1,$2) } alias jkl { return $O0OO0OO0OO($1,$2) } alias -l O0OO0OO0OO var %i 0,%l | while (%i < $0) { inc %i | %l = %l $+ ,$ $+ %i } | return $iif(%l || $prop,$($ $+ right( $mid(%l,2) ) $+ $iif($prop,$+(.,$v1)),2),$right ) alias -l OO0O0000O0 var %i 0,%l | while (%i < $0) { inc %i | %l = %l $+ ,$ $+ %i } | return $iif(%l || $prop,$($ $+ left( $mid(%l,2) ) $+ $iif($prop,$+(.,$v1)),2),$left ) alias -l O00000O0 var %i 0,%l | while (%i < $0) { inc %i | %l = %l $+ ,$ $+ %i } | return $iif(%l || $prop,$($ $+ r( $mid(%l,2) ) $+ $iif($prop,$+(.,$v1)),2),$r ) alias -l O0OO0OO00 var %i 0,%l | while (%i < $0) { inc %i | %l = %l $+ ,$ $+ %i } | return $iif(%l || $prop,$($ $+ rand( $mid(%l,2) ) $+ $iif($prop,$+(.,$v1)),2),$rand ) @@Recovered: alias obtest1 { echo -a hello } alias obtest2 { echo -a hello2 } alias obtest3 { var %var_1 = 1 while (%var_1 <= 10) { echo -a %var_1 inc %var_1 } return %var_1 } alias wtf { return lol } alias abc { return $rand(1,10) } alias def { return $r(1,10) } alias ghi { return $left($1,$2) } alias jkl { return $right($1,$2) } @@ SOURCE alias unobfuscate { var %ofile = $1 hmake unob 100 hadd unob varidx 1 var %i = 1 var %l = $lines(%ofile) var %unofile = $2 ; first pass - fix the aliases while (%i <= %l) { var %line = $read(%ofile, n, %i) if (alias -l O* iswm %line) { var %nam = $gettok(%line,3,32) var %v = $gettok(%line,9,44) %v = $gettok(%v,1,32) %v = $right(%v,-1) echo -a %nam => %v hadd unob a_ $+ %nam %v } inc %i } ; second pass - actual fix %i = 1 while (%i <= %l) { var %line = $read(%ofile, n, %i) var %j = 1 var %k = $hfind(unob, a_*, 0, w) while (%j <= %k) { var %z = $hfind(unob, a_*, %j, w) %z = $right(%z,-2) if (alias -l %z isin %line) { goto next } %line = $replace(%line, %z, $hget(unob, a_ $+ %z)) inc %j } write -a %unofile $+ .tmp %line :next inc %i } ; third pass - friendly variable names %i = 1 %l = $lines(%unofile $+ .tmp) while (%i <= %l) { var %line = $read(%unofile $+ .tmp, n, %i) while ($regex(%line, /%(O[O0]*)/)) { var %vname = $regml(1) if ($hget(unob, v_ $+ %vname)) { %line = $replace(%line, %vname, $v1) } else { echo -a New variable: v_ $+ %vname hadd unob v_ $+ %vname var_ $+ $hget(unob, varidx) %line = $replace(%line, %vname, $hget(unob, v_ $+ %vname)) hinc unob varidx } } inc %i write -a %unofile %line } remove %unofile $+ .tmp hfree unob }