2017-08-14 5 views
0

私は正常に戻したい難読化されたコードを持っています。regex正規表現と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 = "*[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ステートメントで渡す必要があります。例:あなたはまた、$a[0][2]を返すようにしようとする前に既存のキーを確認する必要があります

$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); 

関連する問題