php简单混淆类加密⽂件如何解密?
最近在整理单位购买的源码时,发现源码⾥好多⽂件都混淆加密了。虽然不解密也不影响使⽤,但是⼼⾥总觉得有些别扭,便试着将加密的⽂件解密。
⾸先,百度了⼀下,看⽹上是否有现成的混淆类解密⼯具,搜到了⼀个。尝试了⼀下,这个还真是好⽤,免费的,解密速度挺快。但是当解到⼀个⽐较⼤的⽂件时,发现⽂件
上传不上去了,⽹站提⽰:⽂件⽆法上传。开始以为是不是解密次数多了,⽹站限制了。隔了⼀天试了⼀下,还是不⾏,后来打开了⽂件⼀下打算仔细的看看,觉得⽂件打开的
⽐较迟钝,硬盘也吱吱的响,这才注意到这个⽂件的体积还挺⼤的,都4M多,我说怎么上传不上去。
⽆法通过⼯具解密了,就只有⾃⼰想办法,试着⾃⼰解密试试,结果踩到了⼀个坑。
先发⼀个混淆类加密的样式:
$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}.
eval($O00O0O("JE8wTzAwMD0iZENvVnp1dGtJSnllUVd4VXJxQVNOb*************));
⾸先在第⼀⾏后插⼊ echo $O00OO0; die(); 便可输出 urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6****"); 到底是什么字符串了,通过输出发现这⼀串字符是:
n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j
接着再继续输出  $O00O0O、$OO0O00、 $OO0000 三个变量所表⽰的字符串了,还是在每⼀⾏后⾯添加 echo $O00OO0; die(); 继续⽤输出。便可以知道这三个变量表⽰的是什
么含义了。这⼉要⼩⼼,⼀不⼩⼼,就容易掉到坑⾥了。
那就是将第⼀⾏要将 $O00OO0=urldecode("%6E1%7A%62%2F%6D%"),这⼀句变成 $O00OO0=‘n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j’; ⽽不是
$O00OO0="n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j"; ,要不然就整体都错了⼀位,调试出的变量所代表的函数就都似乎成了未知函数。(后来想
想,$O00OO0=urldecode("%6E1%7A%62%2F%6D%")这⾏代码可以保持原样不动,就不会踩坑了)
错位后的变量所代表的字符变成了
$O00O0O='bawh';
$O0OO00='w0k0k';
$OO0O00='wqbw0k';
$OO0000='58';
$O00O0O.='bawhl+eghs4gh'
通过正确的输出,便发现加密的函数为:
$O00O0O='base';
$O0OO00='strstr';
$OO0O00='substr';
$OO0000='52';
php文件下载源码
$O00O0O.='base64_decode'
接下来⾸先对  eval($O00O0O("JE8wTzAwMD0iZENvVnp1dGtJSnllUVd4VXJxQVNOb*************")); 解密,将换成 echo (
base64_decode("JE8wTzAwMD0iZENvVnp1dGtJSnllUVd4VXJxQVNOb*************"));便会得到
$O0O000="dCoVzutkIJyeQWxUrqASNlMvwpFPhLRsXTcnbBZaKgHfEODGijYmWHhSVxLTIveKzZCPFpEgQOoUmqunkltfyDNJBjwbXRadAirGscMYnr9mbaEXlehpHsEpIuQLMyv0KgjmBaSJbZ4XIH >'.$O00O0O($O0OO00($OO0O00($O0O000,$OO0000*2),$OO0O00($O0O000,$OO0000,$OO0000),$OO0O00($O0O000,0,$OO0000))));
继续将变量替换成  base64_decode(strtr(substr($O0O000,52*2),substr($O0O000,52,52),substr($O0O000,0,52)));便可以得到源码了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。