测试文件
test.php
986eff599698be1107686c632aa0ae4c
1.加密方法:
a9163c158ff6acbe4fd1a93dd7b5f670 abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 长度
$q1 .= 64_decode -> base64_decode*/$s = '$' . $q6 . '=urldecode(%6e1%7a%62%2f%6d%615%5c%76%740%6928%2d%70%78%75%71%79%2a6%6c%72%6b%64%679%5f%65%68%63%73%77%6f4%2b%6637%6a);
$' . $q1 . '=$' . $q6 . '{3}.$' . $q6 . '{6}.$' . $q6 . '{33}.$' . $q6 . '{30};
$' . $q3 . '=$' . $q6 . '{33}.$' . $q6 . '{10}.$' . $q6 . '{24}.$' . $q6 . '{10}.$' . $q6 . '{24};
$' . $q4 . '=$' . $q3 . '{0}.$' . $q6 . '{18}.$' . $q6 . '{3}.$' . $q3 . '{0}.$' . $q3 . '{1}.$' . $q6 . '{24};
$' . $q5 . '=$' . $q6 . '{7}.$' . $q6 . '{13};
$' . $q1 . '.=$' . $q6 . '{22}.$' . $q6 . '{36}.$' . $q6 . '{29}.$' . $q6 . '{26}.$' . $q6 . '{30}.$' . $q6 . '{32}.$' . $q6 . '{35}.$' . $q6 . '{26}.$' . $q6 . '{30};
eval($' . $q1 . '(' . base64_encode('$' . $q2 . '=' . $c . ';eval(\'?>\'.$' . $q1 . '($' . $q3 . '($' . $q4 . '($' . $q2 . ',$' . $q5 . '*2),$' . $q4 . '($' . $q2 . ',$' . $q5 . ',$' . $q5 . '),$' . $q4 . '($' . $q2 . ',0,$' . $q5 . '))));') . '));';echo $s;file_put_contents('./test_encode.php', '71d31b5c01f8faf2a1a6b1423e62a04e');?>
运行加密后生成test_encode.php文件
<?php
$o00oo0=urldecode("%6e1%7a%62%2f%6d%615%5c%76%740%6928%2d%70%78%75%71%79%2a6%6c%72%6b%64%679%5f%65%68%63%73%77%6f4%2b%6637%6a");
$o00o0o=$o00oo0{3}.$o00oo0{6}.$o00oo0{33}.$o00oo0{30};
$o0oo00=$o00oo0{33}.$o00oo0{10}.$o00oo0{24}.$o00oo0{10}.$o00oo0{24};
$oo0o00=$o0oo00{0}.$o00oo0{18}.$o00oo0{3}.$o0oo00{0}.$o0oo00{1}.$o00oo0{24};
$oo0000=$o00oo0{7}.$o00oo0{13};
$o00o0o.=$o00oo0{22}.$o00oo0{36}.$o00oo0{29}.$o00oo0{26}.$o00oo0{30}.$o00oo0{32}.$o00oo0{35}.$o00oo0{26}.$o00oo0{30};
eval($o00o0o("je8wtzawmd0itghxqk16qw5zc29qulvmsvhkzvbgsff2q2fwrwtovfphy2lxdwxtymdkclz5s3r3rfnpeer2z2pick1mt1hrexvhafltvw5fcff3b1b0y2llq2vstkhkwlzhvelgc0fmegxxv3ptskjfejlxdffnq1bktuzzugphtzj2b1lqvwtswkjysxhqm0kzvvhsudrkslcwbfl6oct6d2s9ijtldmfskcc/picuje8wme8wtygktzbptzawkcrptzbpmdaoje8wtzawmcwkt08wmdawkjiplcrptzbpmdaoje8wtzawmcwkt08wmdawlcrptzawmdaplcrptzbpmdaoje8wtzawmcwwlcrptzawmdapkskpow=="));
?>
解析
<?php
// 所有的$o00oo等等都是变量!!!
/*
将
%6e1%7a%62%2f%6d%615%5c%76%740%6928%2d%70%78%75%71%79%2a6%6c%72%6b%64%679%5f%65%68%63%73%77%6f4%2b%6637%6
解码成
n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j
并赋值给$o00oo0
*/
$o00oo0=urldecode("%6e1%7a%62%2f%6d%615%5c%76%740%6928%2d%70%78%75%71%79%2a6%6c%72%6b%64%679%5f%65%68%63%73%77%6f4%2b%6637%6a");
// 从$o00oo0及其他变量字符串中获取对应字符后组成新的字符串,并赋值给对应的变量
// 例如 $o00oo0{3} 代表 n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j 字符串中的第三个字符,b
// $o00o0o = "base"
$o00o0o=$o00oo0{3}.$o00oo0{6}.$o00oo0{33}.$o00oo0{30};
// $o0oo00 = "strtr"
$o0oo00=$o00oo0{33}.$o00oo0{10}.$o00oo0{24}.$o00oo0{10}.$o00oo0{24};
// $oo0o00 = "substr"
$oo0o00=$o0oo00{0}.$o00oo0{18}.$o00oo0{3}.$o0oo00{0}.$o0oo00{1}.$o00oo0{24};
// $oo0000 = "52"
$oo0000=$o00oo0{7}.$o00oo0{13};
// $o00o0o = "base64_decode"
$o00o0o.=$o00oo0{22}.$o00oo0{36}.$o00oo0{29}.$o00oo0{26}.$o00oo0{30}.$o00oo0{32}.$o00oo0{35}.$o00oo0{26}.$o00oo0{30};
// 之后通过eval执行php代码
eval($o00o0o("je8wtzawmd0itghxqk16qw5zc29qulvmsvhkzvbgsff2q2fwrwtovfphy2lxdwxtymdkclz5s3r3rfnpeer2z2pick1mt1hrexvhafltvw5fcff3b1b0y2llq2vstkhkwlzhvelgc0fmegxxv3ptskjfejlxdffnq1bktuzzugphtzj2b1lqvwtswkjysxhqm0kzvvhsudrkslcwbfl6oct6d2s9ijtldmfskcc/picuje8wme8wtygktzbptzawkcrptzbpmdaoje8wtzawmcwkt08wmdawkjiplcrptzbpmdaoje8wtzawmcwkt08wmdawlcrptzawmdaplcrptzbpmdaoje8wtzawmcwwlcrptzawmdapkskpow=="));
/*
eval会执行后面的php代码
第一步为解码
$o00o0o 为 "base64_decode"。
即对后面的字符串进行base64解码
je8wtzawmd0itghxqk16qw5zc29qulvmsvhkzvbgsff2q2fwrwtovfphy2lxdwxtymdkclz5s3r3rfnpeer2z2pick1mt1hrexvhafltvw5fcff3b1b0y2llq2vstkhkwlzhvelgc0fmegxxv3ptskjfejlxdffnq1bktuzzugphtzj2b1lqvwtswkjysxhqm0kzvvhsudrkslcwbfl6oct6d2s9ijtldmfskcc/picuje8wme8wtygktzbptzawkcrptzbpmdaoje8wtzawmcwkt08wmdawkjiplcrptzbpmdaoje8wtzawmcwkt08wmdawlcrptzawmdaplcrptzbpmdaoje8wtzawmcwwlcrptzawmdapkskpow==
解码后
$o0o000="lhqbmzanysojrufixjepfhqvcapekntzgciwulmbgdrvyktwdsoxdvgjbrmfoxkyughysunepqwoptcikcernhdzvatifsalxlqwzmjbez9wtqmcpdmfypjao2voypukrzbxixj3i3uxrp4djw0lyz8+zwk=";
eval('?>'.$o00o0o($o0oo00($oo0o00($o0o000,$oo0000*2),$oo0o00($o0o000,$oo0000,$oo0000),$oo0o00($o0o000,0,$oo0000))));
第二步是执行解码后的代码
解码后为另外一份代码,根据加密算法可知$o0o000变量的值为密钥1+密钥2+源代码编码并进行替换后的字符串,
这边先将替换掉的字符串还原回去,之后再进行base64_decode进行解码,即可获得原来的代码!!!
注意:由于源代码已经包含<?php ?>,所以这边必须加入'?>'
*/
?>
2.解密方法
<?php
// 加密的文件格式必须固定!!
/*$o00oo0=urldecode("%6e1%7a%62%2f%6d%615%5c%76%740%6928%2d%70%78%75%71%79%2a6%6c%72%6b%64%679%5f%65%68%63%73%77%6f4%2b%6637%6a");
$o00o0o=$o00oo0{3}.$o00oo0{6}.$o00oo0{33}.$o00oo0{30};
$o0oo00=$o00oo0{33}.$o00oo0{10}.$o00oo0{24}.$o00oo0{10}.$o00oo0{24};
$oo0o00=$o0oo00{0}.$o00oo0{18}.$o00oo0{3}.$o0oo00{0}.$o0oo00{1}.$o00oo0{24};
$oo0000=$o00oo0{7}.$o00oo0{13};
$o00o0o.=$o00oo0{22}.$o00oo0{36}.$o00oo0{29}.$o00oo0{26}.$o00oo0{30}.$o00oo0{32}.$o00oo0{35}.$o00oo0{26}.$o00oo0{30};
eval($o00o0o("je8wtzawmd0itmv5selcamzrdk......1uyvnuuupny21uyvvooctotm89ijtldmfskcc/=="));?>*/
// 要解密的文件,去掉php标识
$encode_sourcecode = file_get_contents("./test_e.php");
$encode_sourcecode = str_replace('<?php','', $encode_sourcecode);
$encode_sourcecode = str_replace('?>','', $encode_sourcecode);
// 提取第一次需要解密的内容
// 即je8wtzawmd0itmv5selcamzrdk......1uyvnuuupny21uyvvooctotm89ijtldmfskcc/==echo '</br></br>------------------------------$encode_sourcecode_content</br>';
$start = strripos($encode_sourcecode, '("') + 2;$end = strripos($encode_sourcecode, '")');
$encode_sourcecode_content = substr($encode_sourcecode, $start, $end - $start);
echo $encode_sourcecode_content;// 解密加密部分的代码后的内容
// $o0o000="neyhibjfqvdmwo......josptgmdl3m3jgskqtib0nuh8+hno="; eval('......oo0000))));
echo '</br></br>------------------------------$decode_sourcecode_content</br>';$decode_sourcecode_content = base64_decode($encode_sourcecode_content);
echo $decode_sourcecode_content;
// 解密后还是一个加密的代码,需要再次解码,所以要再次提取需要被解密的内容出来
// 即neyhibjfqvdmwo......josptgmdl3m3jgskqtib0nuh8+hno=echo '</br></br>------------------------------$decode_sourcecode_content_encode_content</br>';
$start = stripos($decode_sourcecode_content, '"') + 1;$end = strripos($decode_sourcecode_content, '"') ;
$decode_sourcecode_content_encode_content = substr($decode_sourcecode_content, $start, $end - $start);
echo $decode_sourcecode_content_encode_content;// 根据加密规则,替换字符并解码,即可得到原文件echo '</br></br>------------------------------$decode_sourcecode_content_encode_content</br>';
$origin_content = base64_decode(strtr(substr($decode_sourcecode_content_encode_content, 104),substr($decode_sourcecode_content_encode_content, 52, 52),substr($decode_sourcecode_content_encode_content, 0, 52)));
var_dump($origin_content);
file_put_contents('./test_origin.php', $origin_content);
?>
以上就是php加密与解密的方法的详细内容。
