今年年初,本站用了某兄弟写的Wordpress Open Social 付费版插件,但是该插件和我的网站的另外一个QA插件有冲突,需要注释 Open Social 插件的其中一行代码。以前都是岁月静好,可是从4.0版本开始,原作者对PHP文件源码做了简易的混淆处理。把页面中的字符串转换成了16进制和8进制,导致我升级插件后找不到需要注释的代码行。
都是同行,何必相互为难?
我的目标就是要把PHP源文件中的字符串从16进制和8进制转换成原始字符串。
比如要把:“\x3c\151\x6e\x70\165\x74\x20\x74\x79\160\x65\x3d\x22\x68\x69\x64\x64\x65\x6e\x22\x20\x69\144\x3d\x22”
转换成:
“<input type=”hidden” id=””
字符串是以”\x或者\数字开始,\x打头的是16进制,\数字打头的是8进制
#
# 解密委托
#
$DecodeEvaluator =
{
param([string]$Str)
$Str = $Str.Substring(1,$Str.Length-2)
$tokens = $str -split '\\' | select -Skip 1
$result = $tokens | foreach {
$char = $_
if($char -like 'x*')
{
[char]([convert]::ToInt32("0"+$char,16))
}
else
{
[char]([convert]::ToInt32([int]$char,8))
}
}
$result = '"{0}"' -f ( $result -join '')
$result
}
$ErrorActionPreference = 'stop'
# 读取源文件
$text = Get-Content D:\test.php -Raw
# 正在替换,并保存新文件
[regex]::Replace($text, '"(\\(x|\d)).*?"', $DecodeEvaluator) | Out-File D:\test2.php

解密前 
解密后
本文链接: https://www.pstips.net/regex-replace.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!


