2017-08-14 25 views
0

我有一块混淆的代码,我想恢复正常。如何正则表达式匹配和正则表达式替换字符串在php

我想出了一个简单的preg_replace_callback()preg_match()巢的想法替代。

出于某种原因,虽然我的代码并不想在回调

这里匹配,特别是的preg_match是我的代码片段。

在我debbuging的阵列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 = "*[email protected]$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 = "*[email protected]$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 = "*[email protected]$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); 
} 
+0

实际和预期响应是什么? – ggdx

+0

不好意思,谢谢你的提问。我编辑帖子以反映这些文章 – Repastificationer

+0

您试图去混淆代码?这是你的代码吗?看起来很奇怪你试图去加密一个加密函数。 – GrumpyCrouton

回答

2

$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]之前,您还应该检查现有密钥。