PHPの難読化文字+evalの復号化の考え方についてお聞きしたいです。 xuzuning や他の専門家が私を助けてくれることを願っています。
最近、難読化 + eval を使用しているように見える、うんざりするほど暗号化された 2 つの PHP ファイルに遭遇しました。
この混乱は 0|o の違いとは異なります。エンコードがめちゃくちゃで関数名がASCIIでエンコードされているようです。
専門家にアイデアを教えてもらえませんか?
あまりナンセンスではなく、コードにアクセスしてください
<?php global $?????;$?????=array('?????'=>__FILE__);if(!defined('FEEAABFAA')){define("FEEAABFAA",1395120187);function ?????($?????,$?????=""){global $?????;$?????=base64_decode($?????);if(empty($?????)) return "";if($?????==""){return ~$?????;}else{$?????=$?????['?????']($?????);$?????=$?????['?????']($?????,$?????,$?????);return $?????^$?????;}}}$?????['?????']=?????('jIuNk5qR','');$?????['?????']=?????('mpKPi4Y=','');$?????['?????']=?????('nZ6MmsnLoJua?JCbmg==','');$?????['?????']=?????('jIuN?I+emw==','');$?????['?????']=?????('AgYIDg==','gpibl4mKhJ8=');$?????['?????']=?????('GStOLDVHHCA?OEgu','iY+Kj5yP');$?????['?????']=?????('0MvIzsfMm?rPmsmex8+encnJyczM?8rGmcrKnsfHnsjO?Jo=','');eval($?????['?????'](' 写不下了,这里省略…………'));return;?>4861704e7c6c38ed5439414665b9adb0
別の
<?php if(!defined('BCCEFFAFDBEC')){define("BCCEFFAFDBEC",1377408872);function ?????($?????,$?????=""){global $?????;$?????=base64_decode($?????);if(empty($?????)) return "";if($?????==""){return ~$?????;}else{$侗?????$?????['侗?????]($?????);$?????=$?????['船???豹']($?????,$侗?????$?????);return $?????^$?????;}}}global $?????;$?????=array('?酣????=>__FILE__);$?????['?????']=?????('nZ6Mm?nLoJuan?Cbmg==','');$?????['侗?????]=?????('jIuNk5qR','');$?????['?????']=?????('mpKPi4Y=','');$?????['船???豹']=?????('jIuNoI+emw?=','');$?????['辜脯千?羌']=?????('0J2cz5?amZn?nsaZx?nLzJv?y53H?5qcy8?JzMjOys?H0Jo=','');$?????['?『???']=?????('CDomNQ==','mLGYqYGhx6M=');$?????['噶????']=?????('GChXHzBKKh?YVEwj','hZ2xo8Odt5/FoQ==');$?????['?????']=?????('/K73993Zn?b0kA==','k4qfiY+Vw7M=');@$?????['噶????']($?????['辜脯千?羌'],$?????['?『???'].'('.$?????['?????'].'('.$?????['?????'].'(\'这里省略…………写不下了');return;?>616df3258c3d0520a46c2829342b76be
2 つのコードをまとめました
リンク: http://pan.baidu.com/s/1tNVxs パスワード: gtip
I皆さんも楽しんでくださいね アドバイスをお願いします
ディスカッション(解決策)への返信
链接: http://pan.baidu.com/s/1tNVxs 密码: gtip
アドレスを再投稿します。
ファイルを実行すると、「問題がありますか?」というプロンプトが表示されますが、単独で実行しても問題はありませんが、エラーは報告されません。ダウンロードしてください、Baidu Netdisk
見た目が悪いと思う場合は、自分で文字に変更してください。原理は同じです。
変更を加えてみましたが、問題なく変更できました。
あなたのdadadi.phpはあなたによって変更されましたか?
rreee
これは問題ないはずです。
さらに、私は plugin.class.php を自分でクラックしようとして、次の 2 つの php を思いつきました
しかし、それが循環しているように見えることがわかり、コアアルゴリズムは
链接: http://pan.baidu.com/s/1qWLLFDa 密码: 4372
さらに、私は費やしました長い間自分でやっています。生成された 2 つのファイルは、plugin.class.php を復号化したものです。実行時にエラーが発生することはありません。後どうすればいいのかわかりません
暗号化された文字列を再度出力しようと思ったら、違う気がしました。決して正しい結果が得られることはありません。アドバイスをください
//function 在上面//定义了一个fun($var1,$var2='');大体意思是先先把$var1 base64还原 然后reutren ~取补数。再判断var2是否有值,下面那个好像没读懂 最后是 rerun aaa^bbb;(互斥)//下面加密了一串变量//放在一个数组中//数组的话,我后面的压缩包里面有个detempb可以弄出来,好像显示正确preg_match('正则表达式(我没有还原出来,还是还原错了感觉不对)',eval(gzuncompress(base64_decode(加密字符串穿))), ‘这里好像是一串数字’)
手動復号化の方法は、eval の変数の値を確認することです。出てくる値には eval が含まれている可能性があります。これを繰り返し実行する必要があります。とにかく肉体労働です。
ああ?当然のこととして考えてください
初めて出たときは eval はありません
手動復号化の方法は、eval で変数の値を確認することです。それでも eval が出てくる可能性があるので、それを繰り返します。とにかく肉体労働です。
ああ?当然のこととして考えてください
初めて出てくるときは eval はありません
手動による復号化の方法は、eval で変数の値を調べることです。それでも eval が出てくる可能性があり、そうする必要があります。これを繰り返します。とにかく肉体労働です。
私はそれが可能であると述べただけで、このコードを最初のパスで解決できる人がいるはずだとは言いませんでした。 1 つの問題を解決し、最終的に理解するまでに 3 ~ 4 回繰り返したという理由だけで、それは可能です。
ああ?当然のこととして考えてください
初めて出てくるときは eval はありません
手動の復号化方法は、eval で変数の値を調べることです。それでも eval が出てくる可能性があり、繰り返す必要があります。これ。とにかく肉体労働です。
これを実行すると、2回実行されるようです @gzuncompress(base64_decode( code....))
2番目の eval は前の配列に存在するようです
しかし、2回目では @gzuncompress(base64_decode( code...) ...)) 実行後にデータエラーが表示されますが、どうやって実行したのかわかりません。アイデアを教えていただけますか?
構造はもっと複雑です
第一層
链接: http://pan.baidu.com/s/1u3Tgy 密码: j15w
Array( [?????] => plugin.class.php.php [?????] => strlen [?????] => empty [?????] => base64_decode [?????] => str_pad [?????] => eval [?????] => preg_replace [?????] => /47183fe0e6a80ab66633459f55a88a71/e)
preg_replace (通常の追加属性 e) によって駆動されるため、インターセプトするのは困難です
で eval する必要があります配列をカスタム関数に変更します
解決されたコードは、最初に前のパラメータ設定を実行してから、後続の自己復号コードを処理する必要があります
彼の構造はより複雑です
最初の層は
Array( [?????] => plugin.class.php.php [?????] => strlen [?????] => empty [?????] => base64_decode [?????] => str_pad [?????] => eval [?????] => preg_replace [?????] => /47183fe0e6a80ab66633459f55a88a71/e [?????] => time [?????] => basename [?????] => die [?????] => ????? [?????] => explode [?????] => in_array [?????] => gethostbyname)
Array( [?????] => plugin.class.php.php [?????] => strlen [?????] => empty [?????] => base64_decode [?????] => str_pad [?????] => eval [?????] => preg_replace [?????] => /47183fe0e6a80ab66633459f55a88a71/e)
preg_replace(通常の追加属性e)で駆動されているためインターセプトが困難です
配列内のevalをカスタム関数に変更する必要があります
解決したコード分割する必要があります。最初に前のパラメータ設定を実行してから、後続の自己復号化コードを処理します
配列内の eval (元の暗号化) が元の位置の echo に置き換えられています 分割するにはどうすればよいですか?
他的结构比较复杂
第一层
Array( [?????] => plugin.class.php.php [?????] => strlen [?????] => empty [?????] => base64_decode [?????] => str_pad [?????] => eval [?????] => preg_replace [?????] => /47183fe0e6a80ab66633459f55a88a71/e)
第二层
Array( [?????] => plugin.class.php.php [?????] => strlen [?????] => empty [?????] => base64_decode [?????] => str_pad [?????] => eval [?????] => preg_replace [?????] => /47183fe0e6a80ab66633459f55a88a71/e [?????] => time [?????] => basename [?????] => die [?????] => ????? [?????] => explode [?????] => in_array [?????] => gethostbyname)
由于是通过 preg_replace 驱动的(正则附加属性 e)拦截起来比较困难
需要把数组中的 eval 改成自定义函数
解出的代码需拆分,先执行前面的参数设置,然后处理后面的自解码代码
能不能提供一下你解密获取array的代码,我研究一下
preg_replace('\b777fb918ffda23fb0979c4ca77ab814\e',eval(gzuncompress(base64_decode($code))),'??b777fb918ffda23fb0979c4ca77ab814???');
这个该如何重组,解码呢?
代码是这样的
应该是思路有点问题,做不下去了
$filename = __DIR__ . '/plugin.class.php';$gl = '';$old_vars = '';$c = explode('eval', file_get_contents($filename));file_put_contents($filename.'_0.php', $c[0]);$old_vars = get_defined_vars();include $filename.'_0.php';$new_vars = array_diff_key(get_defined_vars(), $old_vars);//print_r($new_vars);$gl = key($new_vars);$ev = array_search('eval', $$gl);${$gl}[$ev] = '$code';$code = create_function('$s', <<< CODEglobal \$$gl;echo \$s,PHP_EOL;eval(explode('@', \$s)[0]);file_put_contents('t_2.php', '<?php '. explode('@', \$s)[1]);CODE);file_put_contents($filename.'_1.php', '<?php eval'.$c[1]);include $filename.'_1.php';//include 't_2.php';print_r($$gl);
调整了一下思路,应该是解开了
$filename = __DIR__ . '/plugin.class.php';function code($s) { $v = $GLOBALS['gl']; $$v =& $GLOBALS[$v]; echo $s . PHP_EOL; $s = str_replace('eval(', 'code(', $s); eval($s);}$gl = '';$old_vars = '';$c = explode('eval', file_get_contents($filename));file_put_contents($filename.'_0.php', $c[0]);$old_vars = get_defined_vars();include $filename.'_0.php';$new_vars = array_diff_key(get_defined_vars(), $old_vars);$gl = key($new_vars);$ev = array_search('eval', $$gl);${$gl}[$ev] = 'code';file_put_contents($filename.'_1.php', '<?php eval'.$c[1]);include $filename.'_1.php';print_r($$gl);

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。
