PHPWPS

 找回密码
 立即加入

QQ登录

只需一步,快速开始

搜索
热搜: php discuz
查看: 6523|回复: 0

php zend解密:黑刀Dezender

[复制链接]

280

主题

420

帖子

1970

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1970
发表于 2015-9-15 16:08:29 | 显示全部楼层 |阅读模式
php的加密分组件加密和非组件加密两种,一般而言,非组件加密比较容易通过代码进行解密。而组件加密就需要专门的软件来解密。
php组件加密中用的比较多的是zend加密。一个比较经典的解密软件黑刀dezender。因为这个软件的作者已经从事其它行业,并且网站打开也很慢,所以,传到这里,比较放心点。


顺便附带相关的介绍及使用
关于三个解密内核的区别:

目前最新版本就是5.0三套解密内核版

首先,第一套和第二套内核本身没什么太大区别的,解密效果都差不多,嘿嘿,至少我是没看出什么差别来了。至于第三套内核与前两套的差别,貌似是第三套内核可以在前两套内核解密某些文件出现溢出时,将脚本解密出一个大致的东西来,最起码能看到function后面定义的函数名。这样的话兴许还能通过谷歌找到缺失的代码并进行补全。

所以,最常用的还是内核1和内核2。其他使用上的问题不再做介绍,只要不是太笨的童鞋们一看界面自然就会用。

关于混淆函数:

似乎现在大家也都知道了,除了丰富和扩充混淆函数库“config.ini”外,木有其他办法能解决这个问题。有某些强大的童鞋自己整理了一套比较规范的混淆函数库,据说,只要是严格按照PHP代码书写规范开发程序,就能通过他的函数库将代码正确的解密出来。怕就怕那些乱七八糟的自定义函数名,那恐怕做多大的字典来当混淆函数库也是无济于事的。。。


解密后的代码修复技巧篇:

这部分就比较实用了,通常dezend之后的php脚本,都会出现一些奇怪的错误。只要熟悉了这个规律,就能基本完整的将脚本恢复原貌。常见的错误有:

1、出现独占一行的 ( ); 代码
这种情况可以直接将之删除即可。。。

2、条件判断循环语句常见错误,如:

按照正确的php语法应该是这么写的:
  1. if ( i=0; i<100; i++ ){echo 'hahahaha'; }
复制代码
但用黑刀Dezender解密后往往会变成这个样子:
  1. i=0;if ( i<100; ++i ){echo 'hahahaha';}
复制代码
i=0; 被移动到了 if 的前面,i++ 变成了 ++i ,掌握了这个规律,就知道怎么修复了。同理,一部分 while 循环判断语句有时候也会出现类似的问题。

3、当出现整段的html代码使用echo输出的时候,dezend会将这一段html代码的每一行都用echo给输出出来。。。造成阅读不便。但多数情况下并不影响使用和执行。

4、调用某些函数时,函数的参数值被移动到上一行,如正确语句:
  1. $ABC = aabbcc($a,base64_encode($b),ccc($C));
复制代码
会在Dezender之后变为下面这样子:
  1. $a,base64_encode($b),ccc($C);$ABC = aabbcc();
复制代码
根据上面的规律修复即可。5解密后 $GLOBALS['msql'];  实际为 $msql = $GLOBALS['msql'];
6、$this->test = new test('page','id');
反编译后成:
("page", "id");
$this->test = new test();7、try-catch 中抛出异常的函数搞出来有问题(抛出异常部分)
比方说:
throw new Exception('失败');
会给解密成:
('失败');
throw new Exception();8、部分foreach的循环反编译不正确
比方说:
$array = $this->menu();
foreach ($array as $k => $r)
{
  $array[$k][\'menuid\'] = $r[\'id\'];
  $array[$k][\'parentids\'] = 3;
  $array[$k][\'childids\'] = \"\";
  unset($array[$k][\'classid\']);
  unset($array[$k][\'memo\']);
  unset($array[$k][\'id\']);
}

加密后反编译出来的可能是:
$array = $this->menu();
foreach ($array as $r)
{
  $r[\'menuid\'] = $r[\'id\'];
  $r[\'parentids\'] = 3;
  $r[\'childids\'] = \"\";
  unset($r[\'classid\']);
  unset($r[\'memo\']);
  unset($r[\'id\']);
}9、子类调用父类的析构函数反编译出不来,彼方说:
parent::__construct();
反编译后变成了:
$FN_-2147483646();10、class类中$this->system =& $system; 实际上$system是全局变量,应该是
$this->system =& $GLOBALS['system'];

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即加入

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

QQ|小黑屋|手机版|Archiver|phpwps Inc. ( 鄂ICP备14011625号-1 )

GMT+8, 2025-5-4 16:48 , Processed in 0.056707 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表