在Sed中替换混淆的PHP字符串

时间:2017-05-13 06:55:53

标签: php string bash sed substitution

我正在编写一个脚本来反编译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\5‌​7\x3d\135\x2a\42\x5c‌​\51"
应转换为
"\("[0-9A-Za-z\+/=]*"\)"
这是我提到的可能出现的RegEx之一。

祝你好运 梅林

0 个答案:

没有答案