需要创建3个文件,分别命名为 r.php t.php w.php ,然后将以下代码保存到r.php文件中即可.
//生成需要执行的字符串
$s = array('+','-','*','/');
$dux = '
$myfile = fopen("w.php", "w") or die("Unable to open file!");
';
$duc = '$ttt='.mt_rand(1,10).$s[mt_rand(0,3)].mt_rand(1,10).';';
$duv = '
fwrite($myfile, $ttt);
fclose($myfile);
$myfile = fopen("w.php", "r") or die("Unable to open file!");
$du = fread($myfile,filesize("w.php"));
echo "读取文件:".$du;
fclose($myfile);
';
//将该字符串写入t文件,当然也可以不写入文件
$myfile = fopen("t.php", "w") or die("Unable to open file!");
fwrite($myfile, $dux);
fwrite($myfile, $duc);
fwrite($myfile, $duv);
fclose($myfile);
//读取t文件
$myfile = fopen("t.php", "r") or die("Unable to open file!");
$du = fread($myfile,filesize("t.php"));
fclose($myfile);
//执行t文件的代码
echo '本次算术php代码 : '.$duc.'
';
eval($du);
echo '
读取文件是已经执行代码后的结果
';
工作模式:
该程序有三个文件,分别为:
r.php 主程序,用来生成可执行代码并写入t文件;读取t文件的内容并执行,将执行结果写入w文件.
t.php文件 该文件内容不可执行,只能被其他文件读取.同样w.php文件用于保存r.php执行t.php后的结果
通过修改php文件,并使用eval函数执行修改后的代码,就可以实现原本没有设定的程序功能
如果程序足够聪明,能写出正确的php代码,那么它就可以自行扩展自己的能力,实现原本不可能完成的任务.
在本例中,r文件只做一件事,就是写文件和读取文件,并执行读取出来的内容.并没有对应的计算代码
你可以会说最终还是用eval执行了代码,其实也可以完全不用eval函数,在这里使用只是为了方便.我们完全可以将内容写进标签里去.