如何正则表达式匹配和正则表达式替换php中的字符串

再塑化剂

我有一段混淆代码,我想恢复正常。

我想出了一个简单的想法,preg_replace_callback()并在其中preg_match()嵌套进行替换。

出于某种原因,虽然我的代码不想匹配,特别是回调中的 preg_match

这是我的代码片段。

在我的调试中,preg_match_all()(我也尝试过常规preg_match()的数组返回空,尽管它在回调之外工作。

<?php
$code = '
public function encrypt($UDw2y33pQ_22) { 
        goto eKGyEfM327pq; 
    YlzBCxTNCJzo: 
        $p7nCDJiybOtp = mcrypt_create_iv($I9ryzFUJtil4, 
    MCRYPT_RAND); 
        goto zqGNmmifhK7G; 
    eKGyEfM327pq: 
        $IE19PrOpdkbJ = "*97@$S8&8&*as&*SA7sa*SA7alnIU&7#$%gf^IsPj8"; 
        goto uR63Cxb5ZtRs; 
    uR63Cxb5ZtRs: 
        $I9ryzFUJtil4 = mcrypt_get_iv_size(MCRYPT_BLOWFISH, 
    MCRYPT_MODE_ECB); 
        goto YlzBCxTNCJzo; 
    TdHsUlVktK5b: 
        return base64_encode($pcLABic8Iiv1); 
        goto XJlxnac4pgAr; 
    zqGNmmifhK7G: 
        $pcLABic8Iiv1 = mcrypt_encrypt(MCRYPT_BLOWFISH, $IE19PrOpdkbJ, utf8_encode($UDw2y33pQ_22), MCRYPT_MODE_ECB, $p7nCDJiybOtp); 
        goto TdHsUlVktK5b; 
    XJlxnac4pgAr: 
}';
$deobfuscated = preg_replace_callback("/goto ([a-zA-Z0-9_]+);/", function($match){
    preg_match_all("/({$match[1]}:)((\s|\S)*?)([a-zA-Z0-9]{12}:)/ms", $code, $a);
    return $a[0][2];
},$code);

echo $deobfuscated;

实际结果:

public function encrypt($UDw2y33pQ_22) { 

YlzBCxTNCJzo: 
    $p7nCDJiybOtp = mcrypt_create_iv($I9ryzFUJtil4, MCRYPT_RAND); 

eKGyEfM327pq: 
    $IE19PrOpdkbJ = "*97@$S8&8&*as&*SA7sa*SA7alnIU&7#$%gf^IsPj8"; 

uR63Cxb5ZtRs: 
    $I9ryzFUJtil4 = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB); 

TdHsUlVktK5b: 
    return base64_encode($pcLABic8Iiv1); 

zqGNmmifhK7G: 
    $pcLABic8Iiv1 = mcrypt_encrypt(MCRYPT_BLOWFISH, $IE19PrOpdkbJ, utf8_encode($UDw2y33pQ_22), MCRYPT_MODE_ECB, $p7nCDJiybOtp); 

XJlxnac4pgAr: 
}

预期结果:

public function encrypt($UDw2y33pQ_22) { 
    $IE19PrOpdkbJ = "*97@$S8&8&*as&*SA7sa*SA7alnIU&7#$%gf^IsPj8"; 
    $I9ryzFUJtil4 = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB); 
    $p7nCDJiybOtp = mcrypt_create_iv($I9ryzFUJtil4, MCRYPT_RAND); 
    $pcLABic8Iiv1 = mcrypt_encrypt(MCRYPT_BLOWFISH, $IE19PrOpdkbJ, utf8_encode($UDw2y33pQ_22), MCRYPT_MODE_ECB, $p7nCDJiybOtp); 
    return base64_encode($pcLABic8Iiv1);
}
尼尔斯·鲁克曼

$code在闭包中未定义。您需要通过use语句传递它例子:

$deobfuscated = preg_replace_callback("/goto ([a-zA-Z0-9_]+);/", function($match) use ($code) {
    preg_match_all("/({$match[1]}:)((\s|\S)*?)([a-zA-Z0-9]{12}:)/ms", $code, $a);
    return $a[0][2];
},$code);

您还应该在尝试返回之前检查现有密钥$a[0][2]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式-查找并替换字符串

来自分类Dev

如何在正则表达式匹配项中替换字符串

来自分类Dev

正则表达式替换字符串

来自分类Dev

如何在JavaScript字符串替换中负匹配正则表达式?

来自分类Dev

用正则表达式替换字符串

来自分类Dev

PHP正则表达式字符串替换

来自分类Dev

根据正则表达式匹配替换数据框中的字符串值

来自分类Dev

PHP从字符串中删除正则表达式,但保持匹配和休息

来自分类Dev

正则表达式替换重复字符串

来自分类Dev

如何用匹配的正则表达式模式替换特定位置的字符串

来自分类Dev

替换正则表达式匹配的字符串中的字符

来自分类Dev

R中的正则表达式,在替换中重用匹配的字符串

来自分类Dev

使用正则表达式替换字符串

来自分类Dev

正则表达式替换字符串

来自分类Dev

使用JavaScript正则表达式匹配和替换字符串

来自分类Dev

使用正则表达式替换字符串中的匹配项

来自分类Dev

文件中单个匹配项的正则表达式字符串替换

来自分类Dev

Java字符串替换正则表达式

来自分类Dev

用记事本++和正则表达式替换内部匹配的字符串

来自分类Dev

如何使用正则表达式和PHP选择和替换字符串中的HTML属性?

来自分类Dev

字符串数字正则表达式替换

来自分类Dev

用正则表达式替换匹配项中的子字符串

来自分类Dev

正则表达式中的字符串替换

来自分类Dev

正则表达式替换总字符串

来自分类Dev

正则表达式用于字符串替换

来自分类Dev

正则表达式-替换匹配字符串中的字符

来自分类Dev

仅在Perl中的正则表达式匹配中替换字符串

来自分类Dev

如何替换匹配正则表达式模式的字符串?

来自分类Dev

匹配和替换子字符串的正则表达式

Related 相关文章

热门标签

归档