>  기사  >  백엔드 개발  >  PHP 코드 암호화의 여러 방법 소개

PHP 코드 암호화의 여러 방법 소개

尚
앞으로
2020-03-13 09:42:455440검색

PHP 코드 암호화의 여러 방법 소개

PHP 코드를 보호하는 방법:

코드 난독화 + 암호화

실제 암호화는 계산되지 않습니다. 구체적인 구현 아이디어는 base64로 코드를 암호화한 다음 base64의 문자열에 대해 문자열 매핑을 수행하는 것입니다. 무작위로 생성된 사전 난독화) 후 eval이 이 메서드를 실행하여 크랙 및 복원이 가능합니다.

대표 코드는 다음과 같습니다.

<?php

 function RandAbc($length = "") { // 返回随机字符串 
  $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 
  return str_shuffle($str); 
 } 

 $filename = &#39;index.php&#39;; //要加密的文件 
 $T_k1 = RandAbc(); //随机密匙1 
 $T_k2 = RandAbc(); //随机密匙2 
 $vstr = file_get_contents($filename); 
 $v1 = base64_encode($vstr); 
 $c = strtr($v1, $T_k1, $T_k2); //根据密匙替换对应字符。 
 $c = $T_k1.$T_k2.$c; 
 $q1 = "O00O0O"; 
 $q2 = "O0O000"; 
 $q3 = "O0OO00"; 
 $q4 = "OO0O00"; 
 $q5 = "OO0000"; 
 $q6 = "O00OO0"; 
 $s = &#39;$&#39;.$q6.&#39;=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$&#39;.$q1.&#39;=$&#39;.$q6.&#39;{3}.$&#39;.$q6.&#39;{6}.$&#39;.$q6.&#39;{33}.$&#39;.$q6.&#39;{30};$&#39;.$q3.&#39;=$&#39;.$q6.&#39;{33}.$&#39;.$q6.&#39;{10}.$&#39;.$q6.&#39;{24}.$&#39;.$q6.&#39;{10}.$&#39;.$q6.&#39;{24};$&#39;.$q4.&#39;=$&#39;.$q3.&#39;{0}.$&#39;.$q6.&#39;{18}.$&#39;.$q6.&#39;{3}.$&#39;.$q3.&#39;{0}.$&#39;.$q3.&#39;{1}.$&#39;.$q6.&#39;{24};$&#39;.$q5.&#39;=$&#39;.$q6.&#39;{7}.$&#39;.$q6.&#39;{13};$&#39;.$q1.&#39;.=$&#39;.$q6.&#39;{22}.$&#39;.$q6.&#39;{36}.$&#39;.$q6.&#39;{29}.$&#39;.$q6.&#39;{26}.$&#39;.$q6.&#39;{30}.$&#39;.$q6.&#39;{32}.$&#39;.$q6.&#39;{35}.$&#39;.$q6.&#39;{26}.$&#39;.$q6.&#39;{30};eval($&#39;.$q1.&#39;("&#39;.base64_encode(&#39;$&#39;.$q2.&#39;="&#39;.$c.&#39;";eval(\&#39;?>\&#39;.$&#39;.$q1.&#39;($&#39;.$q3.&#39;($&#39;.$q4.&#39;($&#39;.$q2.&#39;,$&#39;.$q5.&#39;*2),$&#39;.$q4.&#39;($&#39;.$q2.&#39;,$&#39;.$q5.&#39;,$&#39;.$q5.&#39;),$&#39;.$q4.&#39;($&#39;.$q2.&#39;,0,$&#39;.$q5.&#39;))));&#39;).&#39;"));&#39;; 

 $s = &#39;<?php &#39;."\n".$s."\n".&#39; ?>&#39;; 
 //echo $s; 
 // 生成 加密后的PHP文件 
 $fpp1 = fopen(&#39;temp_&#39;.$filename, &#39;w&#39;); 
 fwrite($fpp1, $s) or die(&#39;写文件错误&#39;); 

 ?>

깨진 문자 혼동

코드 난독화 변수와 몇 가지 사항은 1의 원리와 유사합니다. 그런데 문자열이 ascii 127로 바뀌어서 255에서 255 사이에는 편집자가 이해할 수 없는 사람이 아닌 문자가 있는데, 결과적으로는 100% 크랙이 가능하고 복구가 되는 것입니다.

Distribute opcode

코드를 배포하지 말고 먼저 PHP 코드를 미리 컴파일하고 opcode를 배포하십시오. PHP7 이후에는 opcache가 이 방법을 사용하여 소스 코드를 보호할 수 있습니다. 또한 opcode에 의해 다시 디컴파일됩니다.

난독화 + 암호화 + PHP 확장 쓰기

난독화 + 암호화 + PHP 확장 쓰기. 그러나 암호화 알고리즘을 직접 작성하고 PHP 코드를 암호화한 다음 C 음성을 사용하여 작성하지 않으면 모든 오픈 소스 PHP 확장은 크랙됩니다. 확장 프로그램을 직접 폐쇄 소스로 사용하면 다른 사람들은 귀하의 암호화 아이디어와 크래킹 아이디어를 알지 못하며 크랙될 가능성은 매우 적습니다.

Swoole Compiler

swoole에서 생성된 것은 생성된 opcode를 난독화하고 암호화하는 것입니다. 그러면 이것을 실행하려는 경우 zend 엔진이 난독화되고 암호화된 opcode를 인식할 가능성이 없다는 것이 분명합니다. , 그래서 실제로 zend를 다시 작성해야 하므로 지원하는 zend 엔진도 교체해야 합니다.

관련 권장 사항:

PHP 비디오 튜토리얼: https://www.php.cn/course/list/29/type/2.html

위 내용은 PHP 코드 암호화의 여러 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제