PHP 코드 암호화의 몇 가지 방안
8420 단어 devops
코드 혼동 + 암호화
실제 암호화는 포함되지 않는다. 구체적인 실현 방향은 코드base64를 암호화한 다음에 base64의 문자열을 문자열로 비추는 것이다. 그리고 eval은 이런 100% 해독되어 복원될 수 있다.
대표 코드는 다음과 같습니다.
function RandAbc($length = "") { //
$str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
return str_shuffle($str);
}
$filename = 'index.php'; //
$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 = '$'.$q6.'=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");$'.$q1.'=$'.$q6.'{3}.$'.$q6.'{6}.$'.$q6.'{33}.$'.$q6.'{30};$'.$q3.'=$'.$q6.'{33}.$'.$q6.'{10}.$'.$q6.'{24}.$'.$q6.'{10}.$'.$q6.'{24};$'.$q4.'=$'.$q3.'{0}.$'.$q6.'{18}.$'.$q6.'{3}.$'.$q3.'{0}.$'.$q3.'{1}.$'.$q6.'{24};$'.$q5.'=$'.$q6.'{7}.$'.$q6.'{13};$'.$q1.'.=$'.$q6.'{22}.$'.$q6.'{36}.$'.$q6.'{29}.$'.$q6.'{26}.$'.$q6.'{30}.$'.$q6.'{32}.$'.$q6.'{35}.$'.$q6.'{26}.$'.$q6.'{30};eval($'.$q1.'("'.base64_encode('$'.$q2.'="'.$c.'";eval(\'?>\'.$'.$q1.'($'.$q3.'($'.$q4.'($'.$q2.',$'.$q5.'*2),$'.$q4.'($'.$q2.',$'.$q5.',$'.$q5.'),$'.$q4.'($'.$q2.',0,$'.$q5.'))));').'"));';
$s = '."
".$s."
".' ?>';
//echo $s;
// PHP
$fpp1 = fopen('temp_'.$filename, 'w');
fwrite($fpp1, $s) or die(' ');
?>
혼동 부호 문자
코드 혼동 변수는 1원리와 차이가 많지 않지만 문자열을 ascii 127에서 255 사이의 비인간적이고 편집기에서 볼 수 없는 문자로 바꾸면 결과적으로 100% 해독되고 복원될 수 있어 시간문제일 뿐이다.
opcode 배포
코드를 나누지 않고 먼저 PHP 코드를 미리 컴파일하고opcode를 나누면 PHP7 이후opcache가 이 물건을 깊이 있게 집적할 수 있다. PHP7 이후에는 이 방법으로 원본 코드를 보호할 수 있지만opcode에 의해 반컴파일되어도 해독될 수 있다.
혼동 + 암호화 + 쓰기 PHP 확장
혼동+암호화+쓰기 PHP 확장, 그러나 시작된 PHP 확장이라면 모두 해독될 수 있습니다. 자신이 암호화 알고리즘을 쓰고 PHP 코드를 암호화한 다음에 자신이 C음성으로 쓰기 확장 폐원을 사용하면 다른 사람들은 당신의 암호화 사고방식과 해독 사고방식을 모르고 해독될 가능성이 적습니다.
Swoole Compiler
swoole에서 나온 것은 생성된opcode를 가지고 혼동하여 암호화한 것이다. 그리고 이것은 강요했다. 이것은 분명한zend 엔진을 실행하려면 혼동된 암호화된opcode를 알 수 없기 때문에 그는 실제로zend를 다시 써야 한다. 그래서 조립된zend 엔진도 바꾸어야 한다.한천봉에 따르면 아직 해독될 가능성은 없다고 합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
GitLab CI에서 지정된 브랜치의 병합 요청을 만들 때(병합 전) 파이프라인을 이동하는 방법공유 개발/스테이징/프로덕션과 환경을 구분하고 있습니다 만, 공유 개발까지는 디버그 빌드 때문에 스루되고 있던 에러가 스테이징에의 배포시의 프로덕션 빌드로 에러가 되어 배포에 실패한다고 하는 것이 많이 있습니다. (...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.