IT보안관의 공부 클라우드

[Xcz.kr] - prob21 본문

워게임/xcz.kr

[Xcz.kr] - prob21

ㅡㅡㅡㅡㄷ 2021. 2. 19. 19:29

Xcz.kr prob21

Prob21 PHP Obfuscation Crack

http://ddecode.com/hexdecoder/ 를 이용하여 소스 디코딩

http://www.phpformatter.com/ 를 이용하여 소스 포매팅

<?
${"GLOBALS"}["gasyarknd"]   = "b";
${"GLOBALS"}["rwliiiqfvfp"] = "i";
#함수
function h($a)
{
    ${"GLOBALS"}["pxzweahruqok"]    = "b";
    ${ ${"GLOBALS"}["pxzweahruqok"] } = "";
    ${"GLOBALS"}["uxoiiikapcv"]     = "b";
    for (${ ${"GLOBALS"}["rwliiiqfvfp"] } = 0; ${ ${"GLOBALS"}["rwliiiqfvfp"] } < 5; ${${"GLOBALS"}["rwliiiqfvfp"]}++) {
        $ydzorvqk                  = "a";
        $gflrozo                   = "b";
        ${"GLOBALS"}["erpxzozdey"] = "i";
        ${$gflrozo}                = ${${"GLOBALS"}["gasyarknd"]} + ord(substr(${$ydzorvqk}, ${${"GLOBALS"}["erpxzozdey"]}, 1));
    }
    return ${${"GLOBALS"}["uxoiiikapcv"]};
}

$jbojdbertutk                   = "KEY";
$vtefigaylx                     = "mun";
${"GLOBALS"}["hpceeyxto"]       = "a";
$ktjmdjm                        = "a";
${"GLOBALS"}["mimtemucybpc"]    = "mun";
${$jbojdbertutk}                = "Congratulations!</br>Key is ?????????????????????";
${"GLOBALS"}["gmfifbfl"]        = "a";
${${"GLOBALS"}["mimtemucybpc"]} = @$_GET["key"];
${"GLOBALS"}["wvdcxsdsqb"]      = "x";
@${$ktjmdjm} = explode("-", ${$vtefigaylx});
$gfxqkfxurga = "x";
$dlmordkk    = "a";

for (${${"GLOBALS"}["wvdcxsdsqb"]} = 0; ${${"GLOBALS"}["wvdcxsdsqb"]} < 5; ${$gfxqkfxurga}++) {
    if (preg_match("/[^a-zA-Z0-9]/", @${${"GLOBALS"}["hpceeyxto"]}[${${"GLOBALS"}["wvdcxsdsqb"]}])) {
        exit("Error!");
    }
}


if (is_numeric(substr(${${"GLOBALS"}["hpceeyxto"]}[0], 0, 2)) && !is_numeric(substr(${${"GLOBALS"}["hpceeyxto"]}[0], 4, 1)) && h(${${"GLOBALS"}["gmfifbfl"]}[0]) > 312 && h(${${"GLOBALS"}["hpceeyxto"]}[0]) < 333 && !is_numeric(substr(${$dlmordkk}[1], 0, 1)) && is_numeric(substr(${${"GLOBALS"}["hpceeyxto"]}[1], 3, 2))) {
    $qcpkjlbgy               = "a";
    ${"GLOBALS"}["oqotjbvn"] = "a";
    ${"GLOBALS"}["bbghzot"]  = "a";
    if (h(${${"GLOBALS"}["bbghzot"]}[1]) > 300 && h(${$qcpkjlbgy}[1]) < 326 && !is_numeric(substr(${${"GLOBALS"}["hpceeyxto"]}[2], 0, 1)) && is_numeric(substr(${${"GLOBALS"}["hpceeyxto"]}[2], 1, 1)) && h(${${"GLOBALS"}["oqotjbvn"]}[2]) > 349 && h(${${"GLOBALS"}["hpceeyxto"]}[2]) < 407) {
        ${"GLOBALS"}["wsjuxwxbzms"] = "a";
        ${"GLOBALS"}["ofvmiatcdko"] = "a";
        $oqhejquzit                 = "a";
        if (!is_numeric(substr(${${"GLOBALS"}["wsjuxwxbzms"]}[3], 0, 2)) && is_numeric(substr(${$oqhejquzit}[3], 2, 3)) && h(${${"GLOBALS"}["ofvmiatcdko"]}[3]) > 357 && h(${${"GLOBALS"}["hpceeyxto"]}[3]) < 359) {
            ${"GLOBALS"}["erqqjpct"]    = "a";
            ${"GLOBALS"}["okgondfidky"] = "a";
            if (round((h(${${"GLOBALS"}["hpceeyxto"]}[0]) + h(${${"GLOBALS"}["okgondfidky"]}[1]) + h(${${"GLOBALS"}["hpceeyxto"]}[2]) + h(${${"GLOBALS"}["hpceeyxto"]}[3])) / 4) == h(${${"GLOBALS"}["erqqjpct"]}[4])) {
                $oaqqkxn = "KEY";
                exit(${$oaqqkxn});
            }
        }
    }
}

echo "Wrong T.T";
?>

 

<?php

#function h($a) #배열의 아스키 값을 모두 합해서 리턴
function h($a)
{
    $b = "";
    for ($i= 0; $i<5; $i++) {
        $b = $b + ord(substr($a, $i , 1));
    }
    return $b; #b 리턴
}

$KEY= "Congratulations!</br>Key is ?????????????????????";
$mun = @$_GET["key"];
#GET 메소드로 key값을 받아 mun에 저장
@$a = explode("-", $mun);
# "-"  를 제거하고 @$a에 저장

#001aG-AU007-a0GCC-kk000-G69AT
#313   301  350  358     330
#@$a의 0~4번째 자리 검사 영문,숫자이어야 한다.
for ($x = 0; $x < 5; $x++) {
    if (preg_match("/[^a-zA-Z0-9]/", @$a[$x])) {
        exit("Error!");
    }
}

#조건문1 첫번째 배열의 0~1번재 자리는 숫자이고 00??? 첫번째 배열의 4번째 자리는 숫자가 아니고 ????a. h(첫번째 배열의 총 해쉬값은 312보다 크고 333보다 작고 두번재 배열의 0번째 자리는 숫자가 아니고 a???? 두번째 배열의 3~4번째 자리는 숫자이여야 한다. ??00?
if (is_numeric(substr($a[0], 0, 2)) && !is_numeric(substr($a[0], 4, 1)) && h($a[0]) > 312 && h($a[0]) < 333 && !is_numeric(substr($a[1], 0, 1)) && is_numeric(substr($a[1], 3, 2))) {
	
	#조건문2 두번째 배열의 총 해쉬값은 300초과 326미만이고 세번째 배열의 0번재 자리는 숫자가 아니고 a0??? 세번째 배열의 1번째 자리는 숫자이고 세번재 배열의 총 해쉬값은 349초과 407 미만이여야 한다.
    if (h($a[1]) > 300 && h($a[1]) < 326 && !is_numeric(substr($a[2], 0, 1)) && is_numeric(substr($a[2], 1, 1)) && h($a[2]) > 349 && h($a[2]) < 407) {
		
		#조건문3 네번째 배열의 0~1번재 자리는 숫자가 아니고 네번째 배열의 2~5번째 자리는 숫자이고 aa000 네번재 배열의 총 해쉬값은 357 초과 359 미만
        if (!is_numeric(substr($a[3], 0, 2)) && is_numeric(substr($a[3], 2, 3)) && h($a[3]) > 357 && h($a[3]) < 359) {
			
			#조건문4 첫밴째 두번째 세번재 네번째 배열의 해쉬값 / 4룰 반올림한 값과 다섯번째 배열의 총 해쉬값과 동일해야 한다.
            if (round((h($a[0]) + h($a[1]) + h($a[2]) + h($a[3])) / 4) == h($a[4])) {
                exit($KEY);
            }
        }
    }
}

echo "Wrong T.T";
?>

아스키 코드를 입력해서 총 합계를 구하는 함수를 파이썬으로 작성해서 진행하면 유용할 듯.

'워게임 > xcz.kr' 카테고리의 다른 글

[xcz.kr]prob18  (0) 2021.02.24
Comments