免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4891 | 回复: 14
打印 上一主题 下一主题

利用Zend Guard 加密php文件, 常量、字符串的没有难阅读化的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-08 16:28 |只看该作者 |倒序浏览
Zend Guard 可以加密php的代码文件, 但是问题依然不小,将加密后的文件恢复可以看到,
Zend Guard 的加密使原文件中的“变量”“类名”都发生了变化,使之难阅读化了(变量名很怪),但是对于字符串的加密却没有改变使之难阅读化。
如下所示是加密原文件和加密破解后文件,这样的话,如果我写:
define('CLASSNAME1', 'myNewClass');
$c = new CLASSNAME1;
这样的语句系统就会提示找不到名为myNewClass的类,原因很简单,因为myNewClass的文件一旦被加密,myNewClass这样的名称
其实不再存在了,它被“难阅读化了”,可能叫V92ebdpoerdasew5ffe之类的怪名字了。
如何解决这个问题,我还没找到答案。


test.php

<?php

$a = 1;
$b = 2;
$c = $a + $b;
echo $c;

/* comment comment comment */
echo "zzzzzzzzzzzzzzzzzzz\n";

class TestClass {
        var $test;
        function setTest($var){
                $this->test = $var;
        }
        function getTest(){
                return $this->test;
        }
}

// comment
$obj = new TestClass();
$obj->setTest(1);
echo $obj->getTest();
?>
test.php 難読化後

<?php $V0cc175b9 = 1; $V92eb5ffe = 2; $V4a8a08f0 = $V0cc175b9 + $V92eb5ffe; echo $V4a8a08f0; echo "zzzzzzzzzzzzzzzzzzz\n";
class F3b5abadd { var $V098f6bcd; function F5f854b88($Vb2145aac){ $this->V098f6bcd= $Vb2145aac; }
function F9c25887d(){ return $this->V098f6bcd; } } $Vbe8f8018 = new F3b5abadd(); $Vbe8f8018->F5f854b88(1);
echo $Vbe8f8018->F9c25887d(); ?>

论坛徽章:
0
2 [报告]
发表于 2007-01-08 16:34 |只看该作者
各位谁有解决的办法请指教

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
3 [报告]
发表于 2007-01-08 17:05 |只看该作者
用get_declared_classes取得所有定义的类名,然后用一个循环来进行操作。

循环操作之中,get_class_vars来取得实现给每个类定义的名字属性。

[ 本帖最后由 HonestQiao 于 2007-1-8 17:07 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-01-17 16:49 |只看该作者

to HonestQiao

HonestQiao : 你好,
我似乎没有明白你的意思,我觉得这个问题应该是zend guard 加密时的问题,或者是zend optimizer 解密时的问题。
个人觉得可能是设置的关系,或则是版本的问题,和编写程序编写应该没有什么关系吧。

我的情况是下面这样的,请指教:

1, 我把类的定义写在一个文件中,如class_file1.php里面的内容如下:
class myclass {
.........
}

2, 在另一个config.php 文件中定义常量,如下:
define('DEFAULTCLASS', 'myclass');

3, 在实际使用myclass类却是在另一文件中,如action.php 中
$myaction = new  DEFAULTCLASS

上面这样的语法在php中是可以用的,如果不用zend guard 加密也完全运行正常。
但是,如果加密了,网页上就会提示说 这个'myclass' 不存在的错误。
我也试过了,如果action.php文件中只有一些echo 这样的简单的php语句,zend 加密后 运行是没有什么问题的。
所以我觉得是,加密后class_file1.php中的内容已经发生了变化,解密后myclass这样的类名在class_file1.php已经是不存在的了,已经变成了一个很难“阅读”的怪名字,如同“V92eb5ffe”之类的,但是,config.ph 文件中的define('DEFAULTCLASS', 'myclass')这样的语句
却没有完全变化,字符串的内容依旧,所以当new  DEFAULTCLASS 时,就等于是new myclass, 但是zend opitimer 解密后的class_file1.php 文件中,只有class V92eb5ffe {。。。}这样的类定义了,
于是就报了“找不到myclass” 的错误了。

你有没有遇到过类似的zend 加密的问题, 请指教。

论坛徽章:
0
5 [报告]
发表于 2007-01-17 16:57 |只看该作者
按你描述的,那应该是种单向的加密,或称混淆,是不可还原的

论坛徽章:
0
6 [报告]
发表于 2007-01-17 17:02 |只看该作者
请问楼上,难道是因为我用的zend guard/ optimizer 不是正版的原因吗?
还有其他什么免费的加密软件或方法,可以使加了密的php文件在web 服务器(apache)上正常运行?请指教!

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
7 [报告]
发表于 2007-01-17 22:39 |只看该作者
我明白你的意思。

这个没有好的办法,因为,他并不知道,define('DEFAULTCLASS', 'myclass');这的myclass是一个类的名字。

不过你可以这么做,用匿名类给出自己的名字在这里调用。

论坛徽章:
0
8 [报告]
发表于 2007-01-18 00:32 |只看该作者
使用 ZendOptimizer 提供的 API:
string zend_obfuscate_class_name(string class_name) 和 string zend_obfuscate_function_name(string function_name)。

论坛徽章:
0
9 [报告]
发表于 2007-01-18 10:29 |只看该作者

thank u

感谢楼上各位的回答,我会继续尝试一下各位的办法。

论坛徽章:
0
10 [报告]
发表于 2007-01-23 09:47 |只看该作者

to soFTangeL

zend_obfuscate_class_name使用体会:
zend_obfuscate_class_name这个方法是可行的,用法是zend_obfuscate_class_name(DEFINED_CLASS_NAME_STRING)
还有很重要的是:含有zend_obfuscate_class_name语句的php文件不能加密。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP