http://www.phpjm.net 这种混淆的原理是什么

2014-12-15 13:13:51 +08:00
 yakczh
3947 次点击
所在节点    问与答
4 条回复
feiyuanqiu
2014-12-15 14:55:29 +08:00
很蛋疼地试了一下。。。

原代码:
<?php
class Test
{
public function main()
{
echo 'hello';
}
}
$obj = new Test;
$obj->main();
?>

加密后代码:

...太长就不发上来了,简单说下我的理解吧:

1、它用这个函数混乱以下变量:

function func_1($a, $b)
{
return empty($b) ? base64_decode($a) : func_1(strtr($a, $b, strrev($b)));
}

$n=func_1("c3RycmV2‰"); // strrev
$o=func_1("c3RydHI=œ"); // strtr
$e=func_1("K3p1bmNvb€QByKQNz‚","ZMQPXHK"); // base64_decode(strtr('K3p1bmNvb€QByKQNz‚', 'ZMQPXHK', strrev('ZMQPXHK'))); => gzuncompress
$g=func_1("DmFLkTD0X2RlD29šZkQ==","YkLIzZD"); // base64_decode
$h=func_1("ezgxNDdlMDM1M“GViZDU1ZjQ1MG–RkZTZkMzUxM2Eœ0MzEye2U=„","LDsSje"); // /8167e2350ebf55d450dde6d3513a4312/e
$i=func_1("oXohbA==‡","ZByFo"); // eval
$j=func_1("EHJlZ19yZX—BsYWNl‹","cdTeE"); // preg_replace


2、它将原代码 base64_encode 之后,又使用 gzcompress 压缩,执行的时候先 base64_decode,再 gzuncompress,再 eval,这里它使用了 preg_replace,我记得好像 调用preg_replace的修饰符e 是可以执行代码的,这里就完成了原代码的执行
tabris17
2014-12-15 14:58:20 +08:00
不替换变量名的混淆都是蛋疼的混淆,但是PHP这种动态语言又不太好替换变量名
kmvan
2014-12-15 16:04:33 +08:00
效率不要太高!!
yakczh
2014-12-15 20:46:53 +08:00
是用什么方法把 return empty($b) ? base64_decode($a) : func_1(strtr($a, $b, strrev($b))); 里面的函数也替换掉的?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/154009

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX