2015年4月16日 星期四

PHP 逆向工程 - 列出已定的 function 及相關參數

最近接手一包程式碼,發現這個 php source code 裡頭的 function 定義搞了很多層:

<?php
if (!function_exists('a')) {
function a($input) {
$input = base64_decode($input);
// ...decoding
$raw = file_get_contents(__FILE__);
// comparing...
}
}
eval(a("XXXXX"));


因為是這樣的模式,猜測應該是有保護程式碼不能在其他地方用。為了想知道做了什麼事,就惡搞一下,試試能不能看到到底有哪些 function 被定義或是使用:

<?php
require '/path/enc_src.php';

print_r(get_defined_functions()['user']);
foreach(get_defined_functions()['user'] as $func) {
        $rf = new ReflectionFunction($func);
        echo "func name: [$func]\n";
        foreach( $rf->getParameters() as $param )
                print "$param\n";
}


如此一來,就可以發他定義了哪些 function 及參數意義等:

func name: [func_name_1]
Parameter #0 [ <required> $a ]
Parameter #1 [ <required> $b ]
Parameter #2 [ <required> $c ]
Parameter #3 [ <required> $d ]
Parameter #4 [ <required> $e ]
...

接下來有空再追開了什麼檔案...

沒有留言:

張貼留言