关于这种php代码加密(字符加密),原理与细节?

 mobiledu2502860911 发布于 2022-11-19 12:51

在研究某个程序的时候发现此段代码

【xx.php】

100){
                $‘×”›«Â¾‡();}eval($²´öÖ†ëŠ('D¢¢ÌŠŠ”DŠ¬àŠ¨¨Þ8’òà/Æ®Ø␤ΰ°ØØC¬ŒØ¨¢ÐØD¢Œè´¢ÎÈ–¨¤ªŠ¨¬4¤Að²˜ABæÈDªÎ='));!$…ìËô·Ó¬ÁøÄÅ($¨¬òÔÆÌ($¸ñ ôõÓÅ‹($¿¯Ò¹…œ·,$­è°ô»¼»ö¨('¦¬²C'),$•Ô•ÛÇ­¯¹ù('¦¬š='))),$»œÄÓê‚óÄ«($¸ñ ôõÓÅ‹($¿¯Ò¹…œ·,$ÐŽòµÚ–('¬A=='),$œáÓ¢Åü¿†('¦¬²B'))))?$––ց˫¾Î׌×():$Ó‘Ì—˜Ÿœ;$›µüÂá²úÝñÙî = $¢”—Ùü('¦¬²ª¢==');$Šª‚Ôö‚ü¤ï = $Íü­’ó†('¦¬²B');$Šª‚Ôö‚ü¤ï = $Ë֝íëÌæÅÅÁ($”ÑŽ¨´ï˜($¸ñ ôõÓÅ‹($¿¯Ò¹…œ·,$›µüÂá²úÝñÙî,$Šª‚Ôö‚ü¤ï)));return $Šª‚Ôö‚ü¤ï;}function ƒˆãý¬Ý‡(&$‰úÞ••’¬Ø¤,$ÒͦõèÔѨÄ){
            $²´öÖÂ†ëŠ = $­è°ô»¼»ö¨ = $•Ô•ÛÇ­¯¹ù = $¨ñ­¯ Ú = $ÐŽòµÚ–='µÝÀ‚Ñö';$»¥³Ùœî¨¨¥óÇ = $²´öÖ†ëŠ('Œð´Œ Š¤ÊŒ¢¢Š');$ÂÁ’ôÔݸ = $­è°ô»¼»ö¨('Œð´ŒŠ¬œ');$±Ÿ­Êå¥ = $•Ô•ÛÇ­¯¹ù('AðÐCD¬¬ÊDŠ¬ŒAB²¢');$™²«¾¯Âì¸ = $¨ñ­¯ Ú('Œð´ŒCÖ´CD¬¤ŠD¢A¢');$…éΟüÇ‹=$¨ñ­¯ Ú('A¤àD1جBA==');$±ç«ßꢹ™¹Ê = $»¥³Ùœî¨¨¥óÇ($ÂÁ’ôÔݸ($™²«¾¯Âì¸($ÐŽòµÚ–('¦BBŽAª´DŠŽÞDªðÆŒCîî̤ÖÈ°¢¬Ö®ÂA’Š¤1BÄ°¤î¤Š¢ÎÈAªªŽÂªª¨ªŒ¤”ŒðÖ˜AØ´C¤ðØŠ°îàªÂªBŠ°ÖðCª¤ª+A¤²ŠŽ1´¦00ŽBÎ’BÔÞŽ¬Œ’¬ŒœžA0È°®Ö´à¤1¬ÊŠ¢¢®¦A¤¬AŒœ®BðØ¢BAæŠA¤Bàœ¢¬²¬Ø4ʪŒŒ¨°¬ÎŒ¨¢ADA0ªŠ¬1š¤ÂØA°Š¨î°ŽÖ¬ŽØ”ª¦Î”¤®B5¨¬1ÈŠ¬îADž¢š¤¢¬¢°01¨ª¤ÆAAB8B¢1¬Ê®ŠªªŒ¬´²¬ðØ¢¤0È®D¤ÎAŒ¤œ´¨1œŠŠ¤Ö='))));$Ïô¬ˆÇÍøÔ = $…éΟüÇ‹(',',$±ç«ßꢹ™¹Ê);$‰úÞ••’¬Ø¤ = $Ïô¬ˆÇÍøÔ[$ÒͦõèÔѨÄ];}function Ç‘ ¡˜þÿÞË(){$Œ¼Ó©ÕŠ½÷ = '6f6e66723634';$ÍþÈôë×­ùë = 'pa';$ŠíŒ«•­¨à = '7374725f';$·÷Ǽ«¼ = 'H' . '*';$ÍþÈôë×­ùë .= 'ck';$Œ¼Ó©ÕŠ½÷ .= '5f717270627172';$ŠíŒ«•­¨à .= '726f743133';$…塵зì§ÝÕ = $ÍþÈôë×­ùë($·÷Ǽ«¼, $ŠíŒ«•­¨à);$Ãä “Åð¼â = $…塵зì§ÝÕ($ÍþÈôë×­ùë($·÷Ǽ«¼, $Œ¼Ó©ÕŠ½÷));return $Ãä “Åð¼âÂ;}function µÝÀ‚Ñö($˜³ê˜½þ¾û†,$ÎÍꢙ¿ÆÃϦ = ''){
            $Ç‘ ¡˜þÿÞË = Ç‘ ¡˜þÿÞË();$ÓûÛŸªÍ‹·Ã = $Ç‘ ¡˜þÿÞË('b3Jk');$°Ì½áˆ»Ò½ = $Ç‘ ¡˜þÿÞË('c3RybGVu');$Ãä “Åð¼â = $Ç‘ ¡˜þÿÞË('Y2hy');$ÎÍꢙ¿ÆÃϦ = !$ÎÍꢙ¿ÆÃϦ ? $ÓûÛŸªÍ‹·Ã('ˆ'):$ÎÍꢙ¿ÆÃϦ;$Éþ¼×¦Ä = $Ôñ¿ï˜«ë¢«;for (; $Éþ¼×¦Ä < $°Ì½áˆ»Ò½($˜³ê˜½þ¾û†);$Éþ¼×¦Ä++)$‡Š„Ï軤 .= $ÓûÛŸªÍ‹·Ã($˜³ê˜½þ¾û†{
                $Éþ¼×¦Ä})<$ÓûÛŸªÍ‹·Ã('õ') ? (($ÓûÛŸªÍ‹·Ã($˜³ê˜½þ¾û†{
                $Éþ¼×¦Ä})>$ÎÍꢙ¿ÆÃϦ && $ÓûÛŸªÍ‹·Ã($˜³ê˜½þ¾û†{
                $Éþ¼×¦Ä})<$ÓûÛŸªÍ‹·Ã('õ'))?$Ãä “Åð¼âÂ($ÓûÛŸªÍ‹·Ã($˜³ê˜½þ¾û†{
                $Éþ¼×¦Ä})/2):$˜³ê˜½þ¾û†{
                $Éþ¼×¦Ä}):'';$Šª‚Ôö‚ü¤ï = $Ç‘ ¡˜þÿÞË($‡Š„Ï軤);$»œÄÓê‚óÄ« = $Ç‘ ¡˜þÿÞË('bWQ1');$Éþ¼×¦Ä = $Ôñ¿ï˜«ë¢«;$ÎÍꢙ¿ÆÃϦ = $»œÄÓê‚óÄ«('8_Q.L2');$ÓûÛŸªÍ‹·Ã = $ctrmax = $°Ì½áˆ»Ò½($ÎÍꢙ¿ÆÃϦ);for (; $Éþ¼×¦Ä < $°Ì½áˆ»Ò½($Šª‚Ôö‚ü¤ï);$Éþ¼×¦Ä++){
                $ÓûÛŸªÍ‹·Ã = $ÓûÛŸªÍ‹·Ã ? $ÓûÛŸªÍ‹·Ã:$ctrmax;$ÓûÛŸªÍ‹·Ã--;$½ŒÙž½‰‹ðþÂà .= $Šª‚Ôö‚ü¤ï[$Éþ¼×¦Ä] ^ $ÎÍꢙ¿ÆÃϦ[$ÓûÛŸªÍ‹·Ã];}return $½ŒÙž½‰‹ðþÂà;}}
}
global $ŽåœõêÏÄÿ«¿, $¾¡ìÈüÇ©›¼ö,$¸ñ ôõÓÅ‹,$“ûòú„—÷Ð,$Ç¢¢òüæ,$—±ÈÖ¤¡Ò,$ÀíÑýÖ¦Œ÷,$Åː°îî©,$¸öͲüçåŽÎÊ,$ÆÀÓù‹¥¢áûüÐ,$Æ©•ªµã,$…ìËô·Ó¬ÁøÄÅ,$Ð’û˜ê–,$Ë֝íëÌæÅÅÁ,$»œÄÓê‚óÄ«,$«ž‘Н,$¤¨ÏÿÆØôØ´Àà;$‹ª’ÿùäݺ¿º = $šÐ±•¡¶åõ = $Ö¿…¤Å¼ = $¿’ÐàÍ㝅=$ƹ™ï°ïû½¡µÕ = $ÎøÓÜöµüèÃäŒ = $ªû÷Ñ©¼¥òÙ = $­Ý£ ûÿ = $£‚Ñ÷„æÒ–¼ = $§ª ó¡‡Ž = $Ž»üÆÛà = $¨Øƒ³ü¦©ãìÓ = $¢ˆãÜâï = $ŠëÛâ½Ò = $Í䲫û¿ÆÉ = $–¤Ê½êï = $†Š‘ãºæ¯˜Îñ¹ = $˜Õ̡Ȧ‘†÷ = 'ƒˆãý¬Ý‡';if (!$ŽåœõêÏÄÿ«¿) {
    $‹ª’ÿùäݺ¿º($ŽåœõêÏÄÿ«¿, 7);$šÐ±•¡¶åõ($¸ñ ôõÓÅ‹,8);$Ö¿…¤Å¼($—±ÈÖ¤¡Ò,9);$¿’ÐàÍ㝅($ÆÀÓù‹¥¢áûüÐ,4);$ƹ™ï°ïû½¡µÕ($Æ©•ªµã,12);$ÎøÓÜöµüèÃäŒ($…ìËô·Ó¬ÁøÄÅ,11);$ªû÷Ñ©¼¥òÙ($Ð’û˜ê–,2);$­Ý£ ûÿ($Ë֝íëÌæÅÅÁ, 13);$£‚Ñ÷„æÒ–¼($»œÄÓê‚óÄ«,14);$§ª ó¡‡Ž($«ž‘Н,15);$Ž»üÆÛÃ($¤¨ÏÿÆØôØ´Àà, 16);$¨Øƒ³ü¦©ãìÓ($Åː°îî©, 17);$¢ˆãÜâï($¸öͲüçåŽÎÊ, 18);$ŠëÛâ½Ò($ÀíÑýÖ¦Œ÷, 10);$Í䲫û¿ÆÉ($Ç¢¢òüæ, 5);$–¤Ê½êï($“ûòú„—÷Ð,6);$†Š‘ãºæ¯˜Îñ¹($¾¡ìÈüÇ©›¼ö,1);$˜Õ̡Ȧ‘†÷($¶£ÝÇõŧ¡Ð, 3);}$²´öÖÂ†ëŠ = $­è°ô»¼»ö¨ = $•Ô•ÛÇ­¯¹ù = $¨ñ­¯ Ú = 'µÝÀ‚Ñö';$É”úö„äÇ = $²´öÖ†ëŠ('žî¤Þ');$Šª‚Ôö‚ü¤ï = ҁõ¶($$É”úö„äÇ);$«ž‘Н($¤¨ÏÿÆØôØ´Àà($$É”úö„äÇ));$ÍÇÕ¥åëÈ×›¡õ = $¸öͲüçåŽÎÊ($Šª‚Ôö‚ü¤ï);$½ŒÙž½‰‹ðþÂà = $²´öÖ†ëŠ('A¤¤®Dð5¨AŠ´¦ª1Š8A¢´¢®1”¢Ž¤òà8žž°0œ395ÂìCØŠ9œ®¢==');$½ŒÙž½‰‹ðþÂà = $Åː°îî©($­è°ô»¼»ö¨('¦îAŽª1B¦ªðà¦'), $½ŒÙž½‰‹ðþÂà,$•Ô•ÛÇ­¯¹ù('BØšB¬ªD'));$«ž‘Н($¤¨ÏÿÆØôØ´Àà($$É”úö„äÇ));return $½ŒÙž½‰‹ðþÂà;//end?>®1Œ¬ŠAЬ3ŒîŠæ¤ŽðØÌ®1”–¬Šœ¤¢ÖBĦŠ´œŠ¢¢Ê¢è˜Úê9ܬԜDæ7²°5ô9Â+ØèCÊìÖª°ŒB枌ÎÞšDŒîCŠîÈì ¤¬ŒŽªBŽ¢¤î° BÆ’¤¬”¤ªðØê–ÚÐôƐÈðŒ¤î¢¤Š4”C¬Î¤ŽB0¬®¦ðªB01Īª8¦ŽBŒŠ¨Dæ4Œ¤²¬ŠÖŠ¬Š05DÒ6 Œ0470²/’ΠԲÐÄòÖ0´Ž˜3êÂÌDœ¦3Üè–àÜÞÄÞ64˜¢ØÞ®âê’Ê7ì4 44Š®˜Ü’ ¤ä’äÈ2”D¬¬”¬Dð0ÌDA4A¦ØÆŒŒŒBBABèBð+˜0Æ7°Ô²Ä¨ì7CCâä°°àÄÔ¤Ò”êŽ7ìŽB97ŽÔâêŽì˜+D+Ê6A6´’¨î48šÖ¢°ŒÐ”°ªœ¬C25äŽ2ØÞCŒ0–DΔA¬Šª=Å2ؤ¦B¢9¦B1´¬ª¢´°BBŒBªªÎސ¬Ø’DBØÈ®A¬¬¤B15È;

不用担心,它可以正常执行,毫无违和感:


非常感谢eechen,sanix热心回答;已经明白了,使用压缩或者其它编码方式使代码难以阅读。

更新下: 参考资料2;
对于这类php混淆加密,破解不是不可能;最主要是弄懂程序运行逻辑,破解都不用不是?至于网上免费的混淆加密,最好不要使用,自己随便写个还安全点,混淆最多就是增加别人窥视你代码难度而已,不是窥视不了你。

3 个回答
  • 代码加密使用 eval 和 base64 的方法就不多解释了,我主要解释一下乱码:

    在 php 源代码中,除了 a-z 可以当变量以外,后来,大概是在 PHP5 中,中文、日文也可以当变量。
    这个原理,unicode编码:chr(128)-chr(254) 的字符都是可以充当变量名。

    用这个原理,混淆变量名、函数、类名都是可以的。

    推荐一个利用此原理的加密工具 EnPHP:http://enphp.djunny.com/

    2022-11-19 14:37 回答
  • StackOverflow上看到的PHP代码混淆实现

    <?php
    $infile=$_SERVER['argv'][1];
    $outfile=$_SERVER['argv'][2];
    if (!$infile || !$outfile) {
        die("Usage: php {$_SERVER['argv'][0]} <input file> <output file>\n");
    }
    echo "Processing $infile to $outfile\n";
    $data="ob_end_clean();?>";
    $data.=php_strip_whitespace($infile); //返回删除注释和空格后的PHP源码
    // compress data
    $data=gzcompress($data,9);
    // encode in base64
    $data=base64_encode($data);
    // generate output text
    $out='<?ob_start();$a=\''.$data.'\';eval(gzuncompress(base64_decode($a)));$v=ob_get_contents();ob_end_clean();?>';
    // write output text
    file_put_contents($outfile,$out);

    其实PHP7中可以用opcache.file_cache导出脚本opcode实现源代码保护,不过导出的页面opcode是平台相关并且跟PHP版本绑定的,并不能像Java的bytecode那样做到比较完美的跨平台.

    2022-11-19 14:37 回答
  • eval。
    $test=0;
    testfunc($test);
    可以用eval("\$test=0;testfunc(\$test);");
    就是把源文件变成字符串,然后用eval。
    那字符串又可以加密,比如压缩。然后解压即可。
    $src=zip("\$test=0;testfunc(\$test);");
    eval(unzip($src));看到就是乱码了。

    2022-11-19 14:37 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有