使用PHP为开发语言十年了,很多时候我们需要将交付给客户的代码进行加密或实时授权,之前购买了市面上的其他PHP加密产品是有扩展的,当时一直希望有一款适合自己的无扩展加密方案,嗯,现在,我终于将这个产品开发完善好,可以发布了,我的这款加密和传统的加密方式如eval模式加壳加密不同,这是基于虚拟机原理的大牙PHP加密。
大牙PHP加密采用原生虚拟化源码保护方案,无需安装任何扩展组件,我们对代码数据进行了完全的混淆重构,可选域名限制,可选绑定服务器IP,可选限制代码的运行时间等保护,为您的源代码提供全方位的保护。
大牙PHP加密地址 https://dyjm.ttmm.vip
大牙加密的核心是使用PHP再造了一个PHP的解释器,这个解释器实现了大部分PHP的语法。破解者如果需要破解大牙加密,就需要阅读虚拟机的执行流程,然后再跟着虚拟机的执行流程去逆向重写加密代码,这复杂度不亚于重写开发一套新的源代码,在这里,我贴出一些PHP虚拟机加密的原理代码。
<?php
//大牙PHP加密 https://dyjm.ttmm.vip
//大牙PHP加密的核心是使用PHP再造了一个PHP的解释器,这个解释器实现了大部分PHP的语法.
//破解者如果需要破解大牙加密,就需要阅读虚拟机的执行流程
//然后再跟着虚拟机的执行流程去逆向重写加密代码,这复杂度不亚于重写开发一套
//大牙加密,每一个文件都可能有着一个不同的虚拟机执行机制,这样就可以让破解者更加难以逆向
/*
* 举例一个简单的寄存器虚拟机, 加减乘除功能
* 实际上虚拟机的完整实现是非常复杂的,这里只是简单的实现了一个寄存器虚拟机
*/
//原始PHP代码如下:
$a=11;
$b=22;
$c=33;
$d=44;
$a=$a+$b;
$c=$c*$d;
$a=$a-$c;
$d=$d/$a;
var_dump("原生的PHP执行结果:",$d); //输出结果为:float(-0.031007751937984496)
/*实现一个可以进行加减乘除的PHP虚拟机*/
// 定义操作码,操作码是指虚拟机可以执行的指令,例如加、减、乘、除等。
define('CMD_ADD', 1);
define('CMD_SUB', 2);
define('CMD_MUL', 3);
define('CMD_DIV', 4);
define('CMD_VARDUMP', 5);
//定义寄存器 寄存器是指虚拟机用来存储数据的位置,存储计算结果、动态变量值等。
$registers = array(
'AX' => 11,
'BX' => 22,
'CX' => 33,
'DX' => 44
);
// 虚拟机核心,解释器函数,用来执行操作码的.
// 该函数使用switch语句根据操作码执行相应的操作。每个操作将寄存器中的值进行修改,以便在执行下一个操作时使用。
function run($instructions) {
global $registers;
foreach ($instructions as $instruction) {
$opcode = $instruction[0]; //操作码
$op1 = $instruction[1]; //操作数
$op2 = $instruction[2]; //操作数
switch ($opcode) {
case CMD_ADD:
$registers[$op1] += $registers[$op2];
break;
case CMD_SUB:
$registers[$op1] -= $registers[$op2];
break;
case CMD_MUL:
$registers[$op1] *= $registers[$op2];
break;
case CMD_DIV:
$registers[$op1] /= $registers[$op2];
break;
case CMD_VARDUMP:
var_dump("PHP虚拟机执行结果:",$registers[$op1]);
break;
}
}
}
//编写汇编程序,将汇编程序转换为虚拟机指令
$instructions = array(
array(CMD_ADD, 'AX', 'BX'), //首先将BX寄存器的值加到AX寄存器中
array(CMD_MUL, 'CX', 'DX'), //然后将DX寄存器的值乘到CX寄存器中
array(CMD_SUB, 'AX', 'CX'), //接下来,它将CX寄存器的值从AX寄存器中减去
array(CMD_DIV, 'DX', 'AX'), //最后将AX寄存器的值除以DX寄存器的值并将结果存储在DX寄存器中
array(CMD_VARDUMP, 'DX', ''), //输出DX寄存器的值,它应该是最终操作的结果:float(-0.031007751937984496)
);
run($instructions); //执行虚拟机
更巧妙的是,在大牙PHP加密中,我们随机使用goto和switch打乱了部分源码,每一个文件都可能有着一个不同的虚拟机执行机制。我们将大部分变量名和方法名修改为随机二进制字符串,包括变量名、类的私有变量名、私有函数名、虚拟机类名、局部变量等等,使得破解者更加难以逆向。
<?php
// <!--在大牙PHP加密中,我们随机使用goto和switch打乱了部分源码-->
// <!--原始PHP的代码-->
$a = "1";
$b = "2";
$c = "3";
echo $a, $b, $c;
// <!--使用goto打乱控制流后的代码-->
goto a;
ccc:
goto c;
aaa:
$a = "1";
c:
$c = "3";
echo $a, $b, $c;
goto over;
a:
goto bbb;
bbb:
$b = "2";
goto ccc;
over:
//<!--使用switch打乱控制流后的代码-->
$index=[20,13,52,83]; //case条件动态加密
$ip=0;
while (true){
if ($ip>3) break;
switch ($index[$ip]){
case 52:
$c = "3";
break;
case 83:
echo $a, $b, $c;
break;
case 20:
$a = "1";
break;
case 13:
$b = "2";
break;
default:
break;
}
$ip++;
}
同时,大牙PHP加密提供了强大的反调试功能,几乎不影响性能,可以放心使用。我们提供了3大类反调试代码,每个大类下有多个不同的反调试代码,这些反调试代码将被动态的插入虚拟机和汇编代码中,且某些反调试代码是概率性执行的,随机插入,使得反调试更加难以检测。
大牙PHP加密相当于将你的源码编译为了汇编代码,再由我们用PHP制作的CPU来执行这些汇编代码,这样就可以有效的防止逆向破解。在大牙PHP加密的保护下,即使你的系统某个核心文件被破解,破解者也不能正常执行你的程序。
总的来说,大牙PHP加密为您的源代码提供了强大的保护,让您的源代码安全无忧。让我们一起,用大牙PHP加密,守护我们的源代码,保护我们的软件资产。