我正在编写一个脚本来反编译PHP代码。而且大多数情况已经完成;唯一剩下的就是解码代码中的字符串。所以我的输入文件可能是这样的:
<?php
$myString="\x48\x45\x4c\x4c\x4f";
$myOtherString="\x57\x4F\x52\x4C\x44";
?>
现在,在我的脚本中,我有一个循环遍历所有字符串,逐个替换它们。因此,我(作为循环的一部分)使用以下代码($ S被声明为循环中的混淆字符串 - 以防万一你想知道$ S来自哪里):
$S='"\x48\x45\x4c\x4c\x4f"'
REALSTRING=`php -r 'eval("echo ".$argv[1].";");' $S`
ESCAPEDREALSTRING=`printf "%q" "$REALSTRING"`
ESCAPEDSOURCE=`printf "%q" "$S"`
CODE4=`echo $CODE4 | sed "s/$ESCAPEDSOURCE/$ESCAPEDREALSTRING/g"`
我在网上搜索了一个解决方案,建议使用printf步骤正确地转义字符串。真实文本中的一些字符串甚至是RegExes,因此Sed可能不适合这项工作。有人有想法吗?
此尝试使用sed,但perl,awk或任何其他工具也可以,只要在标准Linux / MacOS系统上默认使用Bash。
作为示例对:
"\x5c\50\x22\133\x30\55\x39\101\x2d\132\x61\55\x7a\134\x2b\57\x3d\135\x2a\42\x5c\51"
应转换为
"\("[0-9A-Za-z\+/=]*"\)"
这是我提到的可能出现的RegEx之一。
祝你好运 梅林