早在2016年左右,我就开始使用各种PHP的加密手段保护我的源代码不被泄露,后来也购买了比较成熟的有扩展的加密工具,但是内心是渴望有一款无需安装扩展的加密产品的,可惜当时市面上的无扩展加密方案售价都高得离谱。
好了,我从2023年春节到2024年春节,整整一年时间的断断续续开发,完成了我现在要发布的产品《大牙PHP加密》,它采用了原生的虚拟化源码保护方案,无需安装任何扩展组件,可以对代码数据进行完全的混淆重构。
PHP代码加密 dyjm.ttmm.vip
它的核心是使用PHP再造了一个PHP的编译器和解释器,编译器将PHP代码编译为我自定义的汇编码,我写的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
//实现一个可以进行加减乘除的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寄存器的值
);
run($instructions); //执行虚拟机 它应该是最终将输出:float(-0.031007751937984496)
虚拟机原理大致就是这样咯,写这个加密真的是个苦力活,我想,未来哪个老哥要逆向破解应该也会掉头发吧,反正我自己是不想逆向这样的加密的,嗯,我还实现了源代码运行时间限制,源代码绑定域名,源代码绑定服务器IP(是内网IP和外网IP都支持的哦),欢迎大家来交流使用。。
在这里,我想起了我十多年前自学入门IT的时候,风筝师傅给我丢来了一个加密后的ASP脚本文件,当时我感叹,这字乱码都看不清读不懂,我能学会这个?嗯,网络上的一个领路人风筝师傅,谢谢。
好啦,有需要的加密的PHPer,可以可以来使用哦,大佬也给些建议呀。。