是否可以编写一个正则表达式来检查字符串(某些代码)是否被缩小?
许多PHP / JS混淆器删除了空白字符(以及其他内容)。 因此,最终缩小的代码有时看起来像这样:
PHP:
$a=array();if(is_array($a)){echo'ok';}
JS:
a=[];if(typeof(a)=='object'&&(a instanceof Array){alert('ok')}
在这两种情况下,在“{”,“}”,“;”等之前和之后都没有空格字符。还有一些其他模式可以提供帮助。我不期望高精度正则表达式,只需要一个检查至少100个字符串字符看起来像缩小代码。 谢谢你的建议。
PURPOSES:网络恶意软件扫描程序
答案 0 :(得分:2)
我认为缩小器将删除所有换行符,尽管如果缩小的代码粘贴在文本编辑器中,文件末尾可能还有一个。这样的事情可能会相当准确:
/^[^\n\r]+(\r\n?|\n)?$/
那只是测试整个事物中没有换行符,除了可能最后一个。所以没有保证,但我认为它适用于任何冗长的代码块。
答案 1 :(得分:2)
简短的回答是“不”,正则表达式不能这样做。
您最好的选择可能是对源文件进行统计分析,并与一些已知的启发式方法进行比较。例如,通过将变量名称与最小化代码中常见的变量名称进行比较。最小化的文件可能有很多单字符变量名,例如......并且在所有单字符变量名都用完之前不会有双字符变量名等等。
另一种选择是简单地通过最小化器运行源文件,并查看输出是否与输入完全不同。如果没有,它可能已经被最小化了。
但我必须同意sg3s的最后一句话:如果你能解释为什么你需要这个,我们可以为你的实际需要提供更有用的答案。
答案 2 :(得分:0)
没有。由于语法/代码及其意图没有改变,一些非常熟悉php和/或js的人会在一行上编写简单的函数而根本没有任何空格(me:s)。
你可以做的是计算一个字符串中的所有空格字符虽然这也是不可靠的,因为对于某些东西你只需要空格,比如x实例。此外,并非所有代码都被缩小并缩小为一行(请参阅jQuery UI),因此您无法真正依赖它....
也许您可以解释为什么您需要了解这一点,我们可以尝试找到替代方案?
答案 3 :(得分:0)
你无法判断它是否被缩小或只是手写(可能只适用于较小的脚本)。但是你可以检查它是否包含不必要的空格。
看看开源混淆器/缩小器,看看他们用什么规则去除空白。验证是否应用这些规则应该有效,如果正则表达式变得复杂,则可能需要一个简单的解析器。
请确保排除a="if ( b )"
之类的字符串文字。
答案 4 :(得分:0)
通过该特定语言的解析器运行它(即使是一个美化器可能正常工作)并修改它以计算未使用的字符数。使用未使用的字符的百分比与文档中的字符数作为缩小测试。我不认为你能用正则表达式准确地做到这一点,虽然计算空白与文档内容可能没问题。