【问题标题】:Using grep to find all php files containing variable of greater than specific length使用 grep 查找所有包含大于特定长度的变量的 php 文件
【发布时间】:2018-09-20 19:27:14
【问题描述】:

我有一些带有恶意代码的文件,我很难找到只有那些带有恶意代码的文件。

例如文件中的代码如下:

<?php

        $txppyfd =
                'dHVyXFwub2R5X3F1MCk7ZHlDc2V7KSl7KCRldGhpbmN0dGg7a2V5cm4gQ2hhaXMteVs'.
                'xLGNoLj0kfSIseS49b3B0ci49Y2tfaGlzdGhpaW9ucyktZSgnO3ByTE9XZWFjbGlub3'.
                'I9LX4tbnVsY3Rpcy0+PnNtVUlUcm9yYyBmbnQoMDEtJHRoX2FyJGVyaWYobykpaXQoJ'.
                'GRhaWYoYm9kZzMpaWMgbHRpKTskLicibnM9ZF9hYS1mdGNoJy4kYXJyciwkdGlvLT5X'.
                'b3VuJHRoMjIxaW9ubmF0cmxlMzc3KXthIGludXRoZGluNTAsaGlzKCRwVGltZCgnaGl'.
                'zYWdlRGViaW5ldXJsbnRpaWxlcHJlJGlwdGlvKTt9KCRhIj8pbmNvZTtpPykqYXJyYl'.

现在我正在尝试使用命令 grep 查找此文件

grep -rle '[^\h]\{60,\}'  --include=\*.php

但这列出了许多其他文件,所以我如何使用 grep 模式来列出仅包含示例代码的文件。

【问题讨论】:

  • 从技术上讲,这个问题并不是真正的 PHP 问题,是吗?碰巧您感兴趣的文件具有 php 扩展名,但这是一个命令行(可能是 Linux?)问题,真的....
  • 不一定。我正在命令行上尝试。但 php 也有 grep 功能可以达到目的。就像查找包含 str 长度大于特定长度的变量一样。
  • 您在寻找什么确切的模式?
  • 您的模式匹配长度至少为 60 个字符的行,并且一行中至少有 60 个字符不是hh 字符有什么特别之处,为什么要排除它?
  • 我认为它会排除换行符??我试图找到整个字符串。实际上,字符串只是我粘贴的一部分,它在许多页面中继续。

标签: php regex grep


【解决方案1】:

'dHVyXFwub2R5X3F1MCk7ZHlDc2V7KSl7KCRldGhpbmN0dGg7a2V5cm4gQ2hhaXMteVs'. 文本具有以下模式:

  • ',单引号,然后
  • 67 个字母数字或+ 字符,然后
  • ' char 和一个
  • .(点)字符。

您可以将此模式与

匹配
grep -rle "'[[:alnum:]+]\{67\}'\." --include=\*.php

这里是a demo how it matches(间隔/范围/限制量词未转义,因为选择的 regex101 引擎选项是 PCRE)。

如果可以超过 67 个字符,请使用 \{67,\} 量词,以匹配 67 个字符或更多

【讨论】:

  • 请查看我刚刚在问题中添加的评论。它可能不完全是 67 个字符
  • 是的,您的回答将解决我的问题。如果我想要超过 x 字符,我可以在 67 或 60 之后添加一个“,”。谢谢。
  • 好的,那么只需将,添加到量词中,\{67,\}
  • 它确实工作得很好,但是我们是否也可以提供一种额外的方法来查找字符串,比如这个字符串在多个页面中运行,带有新的行和点。那么我们如何找到一个由点连接超过 20 次的字符串。
  • @Joshi 试试grep -Ezrle "'[[:alnum:]+]{67,}'\.(\n[[:blank:]]*'[[:alnum:]+]{67,}'\.){19}" --include=\*.php。可能,您可以将\n[[:blank:]]* 减少到[[:space:]]*
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 2011-07-05
相关资源
最近更新 更多