>백엔드 개발 >PHP 튜토리얼 >암호화된 PHP 파일을 발견하면 디코딩 프로세스를 기록해 두십시오.

암호화된 PHP 파일을 발견하면 디코딩 프로세스를 기록해 두십시오.

WBOY
WBOY원래의
2016-08-08 09:25:34877검색


오늘 아침에 친구가 PHP 파일을 살펴보라고 했습니다. 문자가 깨져서 바뀌면 작업이 중단됩니다.

파일에는 한 줄만 있습니다. 다음은 내용의 일부입니다.

중간 문자 인코딩을 생략하면 최종 내용은 다음과 같습니다.

2Kx9yHSQyO/D+5+fnPf+v/BSrlfeg=')));return;?>5e813...32位MD5....3f6

처음에 ZendStudio+Xdebug를 이용하여 추적해 보았는데, 이렇게 한 줄로 압축된 코드는 디버깅이 불가능하다는 것을 알게 되었습니다! 시작해야 할 출발점이 없습니다.

오랜 시간 작업했는데도 여전히 안 되니까 수동으로 해결하는 게 나을 것 같아요.

간단히 살펴본 후 변수 이름을 특수 문자로 바꾸고 편집기로 열고 몇 가지 반복 키워드를 바꾸면 대략적인 아이디어를 얻을 수 있습니다.

이 기능은 파일 시작 부분에 "蜖棁ㄔ┄蓣"라는 사용자 정의 기능도 사용됩니다.

function 蜖棁ㄔ┄蕷($A,$B="")
{
	$A=base64_decode($A);
	if(empty($A)) return "";
	if($B==""){return ~$A;}
	else
	{
		$D=strlen($A);$B=str_pad($B,$D,$B);$str=$A^$B;return $str;
	}
}

몇 번의 간단한 교체 후에 각 필드에 무엇이 저장되어 있는지 알 수 있습니다


먼저 eval 함수로 시작하고 그 다음 2개의 복호화 함수, 함수 이름이 배열에 저장됩니다.

<?php
$arr[&#39;B&#39;]=&#39;base64_decode&#39;;
$arr[&#39;G&#39;]=&#39;gzuncompress&#39;;
//调用的时候可以这样用
eval($arr[&#39;G&#39;]($arr[&#39;B&#39;](&#39;一大堆乱码&#39;)))

과 비슷하게 풀어보면 수정 후 실행할 수 없는 키 코드를 볼 수 있습니다.

	$A=file_get_contents(&#39;origin.php&#39;);
	@substr($A,-32)==md5(substr(substr($A,0,-32).&#39;另外一个<span style="font-family: Arial, Helvetica, sans-serif;">32位MD5</span>',6))||die();

코멘트 처리하고 다음 코드를 계속 실행합니다.


또 다른 평가, 복호화 중...

복호화된 파일이 왜곡되어 있으므로 복사 및 붙여넣기를 직접 사용할 수 없습니다. 바이너리로 파일에 작성해야 합니다. , 그런 다음 바꾸기, 암호 해독 및 파일에 쓰기... 총 5번의 암호 해독 후에 최종적으로 소스 파일을 얻습니다.

마지막으로 정리하고 정규식을 작성해 파일을 수정한 뒤 바로 파일을 비활성화시켰습니다.

<?php
	$B='base64_decode';
	$G='gzuncompress';
	function A($A,$B="")
	{
		$A=base64_decode($A);
		if(empty($A)) return "";
		if($B==""){return ~$A;}
		else
		{
			$D=strlen($A);$B=str_pad($B,$D,$B);$str=$A^$B;return $str;
		}
	}
	$s=file_get_contents('origin.php');
	//第1次匹配
	preg_match('/\]\(\'(.+?)\'\)/',$s,$r1);
	$s=$G($B($r1[1]));
	
	//第2次匹配
	preg_match('/\]\(\'(.+?)\'\)/',$s,$r2);
	$s=A($B($r2[1]));
	
	//第3次匹配
	preg_match('/\]\(\'(.+?)\'\)/',$s,$r3);
	$s=($B($r3[1]));
	
	//第4次匹配
	preg_match('/\]\(\'(e.+?)\'\)/',$s,$r4);
	$s=$G($B($r4[1]));
	
	//第5次匹配
	preg_match('/\]\(\'(e.+?)\'\)/',$s,$r5);
	$s=(A($B($r5[1])));
	file_put_contents('code.php',$s);

	echo 'Done!';

관련 코드: http://download.csdn.net/detail/sbdx/8616319

위 내용은 암호화된 PHP 파일을 접하는 방법과 관련 내용을 포함하여 디코딩 프로세스를 적어 놓은 내용입니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.