我使用
PHP创建了一个应用程序,我将把它卖给我当地的市场.我个人会去他们的位置安装/配置Apache& MysqL以及安装我自己的代码.
我想要一个安全系统,以便如果有人试图将我的代码复制到未经授权的机器,它将无法运行.
我知道没有人可以阻止逆向工程应用程序.甚至.exe(二进制)文件都被破解,并且PHP(源代码)任何人都可以做.
在我的国家,那些逆向工程师真的很难找到,所以我想建议最小的安全选项,如:
1)创建类(例如,导航),该类标识系统信息,如cpu ID,计算机名称或硬件ID的任意组合,以生成UNIQUE_ID并与我给定的UNIQUE_ID(我向其销售应用程序的个人)匹配.如果有效,则返回导航菜单.否则它将简单地销毁数据库并通过抛出异常来停止执行,可能如下:
class Navigation { public function d() { return current system UNIQUE_ID; } public function get() { $a = file_get_contents('hash'); $c = $this->d(); if (crypt($c) != $a) { //destory database throw new Exception(''); } else { return "<ul><li><a>home</a></li></ul>"; //navigation menu } } }
2)然后在安装过程中,我将在“hash”文件中更改系统UNIQUE_ID,创建一个对象,并将其保存到文件(nav.obj)中:
(install.PHP了)
<?PHP $a=new Navigation; $out=serialize($a); file_put_contents('nav.obj',$out);
<?PHP $menu=file_get_contents('nav.obj'); $menu=unserialize($a); echo $menu->get(); ?>
我知道这种方法不是完全证明,但我很确定大约60%的PHP开发人员无法破解它!
现在我只需要获取当前系统UNIQUE_ID.
我创建了此函数以获取基于硬件(硬盘UUID)的唯一ID.可以使用不同的资源,如计算机名称,域甚至硬盘大小,以根据您的需要获得更好的方法.
function UniqueMachineID($salt = "") { if (strtoupper(substr(PHP_OS,3)) === 'WIN') { $temp = sys_get_temp_dir().DIRECTORY_SEPARATOR."diskpartscript.txt"; if(!file_exists($temp) && !is_file($temp)) file_put_contents($temp,"select disk 0\ndetail disk"); $output = shell_exec("diskpart /s ".$temp); $lines = explode("\n",$output); $result = array_filter($lines,function($line) { return stripos($line,"ID:")!==false; }); if(count($result)>0) { $result = array_shift(array_values($result)); $result = explode(":",$result); $result = trim(end($result)); } else $result = $output; } else { $result = shell_exec("blkid -o value -s UUID"); if(stripos($result,"blkid")!==false) { $result = $_SERVER['HTTP_HOST']; } } return md5($salt.md5($result)); } echo UniqueMachineID();