반응형
반응형
반응형

Title
PHP Obfuscation Crack

Description

Wrong T.T




소스보기를 하면 php코드가 나온다.


<html>
<head>
<link rel="shortcut icon" href="../images/favicon.ico" type="image/x-icon">
<title>Prob21</title>
</head>
<body style="background-image:url('../images/content-tail.gif');">
<b>Title</b></br>
<i>PHP Obfuscation Crack</i></br></br>
<b>Description</b></br>
<font size="2px">
<a href="prob_files/prob21.html" target="_blank">View source</a></br></br>
<?
${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x67\x61\x73y\x61\x72\x6b\x6e\x64"]="\x62";${"\x47\x4c\x4f\x42AL\x53"}["r\x77\x6cii\x69\x71\x66\x76\x66\x70"]="i";function h($a){${"\x47\x4cO\x42\x41L\x53"}["\x70x\x7a\x77\x65\x61h\x72\x75\x71\x6f\x6b"]="\x62";${${"\x47LO\x42\x41\x4c\x53"}["\x70\x78z\x77\x65\x61\x68\x72u\x71\x6f\x6b"]}="";${"GL\x4fB\x41\x4c\x53"}["u\x78\x6fi\x69i\x6b\x61pcv"]="\x62";for(${${"\x47\x4c\x4f\x42A\x4c\x53"}["r\x77\x6c\x69\x69i\x71\x66\x76fp"]}=0;${${"\x47\x4c\x4f\x42A\x4cS"}["\x72\x77l\x69i\x69\x71\x66\x76\x66\x70"]}<5;${${"G\x4c\x4f\x42\x41\x4c\x53"}["\x72\x77\x6ci\x69\x69qf\x76\x66\x70"]}++){$ydzorvqk="\x61";$gflrozo="\x62";${"\x47\x4cOB\x41\x4cS"}["\x65\x72p\x78\x7a\x6fz\x64\x65y"]="i";${$gflrozo}=${${"G\x4c\x4f\x42AL\x53"}["\x67\x61sy\x61\x72k\x6e\x64"]}+ord(substr(${$ydzorvqk},${${"\x47\x4c\x4f\x42ALS"}["\x65rp\x78\x7a\x6fz\x64e\x79"]},1));}return${${"\x47\x4c\x4fBA\x4cS"}["\x75x\x6fi\x69i\x6b\x61\x70\x63v"]};}$jbojdbertutk="\x4b\x45\x59";$vtefigaylx="mu\x6e";${"G\x4cOB\x41L\x53"}["\x68p\x63eeyx\x74o"]="\x61";$ktjmdjm="a";${"\x47\x4c\x4f\x42ALS"}["\x6d\x69mt\x65\x6du\x63\x79\x62\x70c"]="\x6d\x75\x6e";${$jbojdbertutk}="\x43o\x6e\x67\x72a\x74\x75\x6ca\x74\x69\x6f\x6es\x21</\x62r\x3e\x4be\x79\x20i\x73 ?????????????????????";${"GL\x4f\x42\x41\x4cS"}["\x67\x6d\x66i\x66\x62f\x6c"]="\x61";${${"G\x4c\x4f\x42AL\x53"}["\x6d\x69\x6d\x74em\x75c\x79\x62p\x63"]}=@$_GET["\x6b\x65y"];${"GL\x4f\x42A\x4c\x53"}["w\x76d\x63\x78\x73\x64\x73\x71b"]="x";@${$ktjmdjm}=explode("-",${$vtefigaylx});$gfxqkfxurga="\x78";$dlmordkk="\x61";for(${${"\x47\x4c\x4fBA\x4cS"}["w\x76\x64\x63\x78\x73\x64\x73\x71b"]}=0;${${"\x47\x4c\x4f\x42\x41LS"}["\x77v\x64\x63\x78s\x64\x73\x71\x62"]}<5;${$gfxqkfxurga}++){if(preg_match("/[^a-\x7a\x41-\x5a\x30-\x39]/",@${${"\x47\x4cOB\x41\x4c\x53"}["\x68pc\x65e\x79\x78\x74\x6f"]}[${${"\x47\x4cO\x42A\x4c\x53"}["\x77vd\x63\x78\x73ds\x71\x62"]}])){exit("\x45rr\x6f\x72!");}}if(is_numeric(substr(${${"\x47LO\x42\x41\x4c\x53"}["\x68p\x63e\x65y\x78to"]}[0],0,2))&&!is_numeric(substr(${${"\x47\x4c\x4f\x42\x41\x4cS"}["\x68\x70\x63ee\x79\x78t\x6f"]}[0],4,1))&&h(${${"\x47\x4c\x4f\x42\x41\x4c\x53"}["gm\x66\x69fbfl"]}[0])>312&&h(${${"\x47L\x4f\x42A\x4cS"}["h\x70\x63e\x65yx\x74\x6f"]}[0])<333&&!is_numeric(substr(${$dlmordkk}[1],0,1))&&is_numeric(substr(${${"\x47\x4c\x4fB\x41LS"}["hpc\x65ey\x78to"]}[1],3,2))){$qcpkjlbgy="\x61";${"G\x4c\x4f\x42\x41\x4c\x53"}["\x6f\x71\x6f\x74\x6a\x62\x76\x6e"]="\x61";${"G\x4cO\x42ALS"}["bb\x67h\x7a\x6f\x74"]="\x61";if(h(${${"\x47\x4c\x4f\x42\x41LS"}["b\x62g\x68z\x6ft"]}[1])>300&&h(${$qcpkjlbgy}[1])<326&&!is_numeric(substr(${${"GL\x4f\x42\x41\x4c\x53"}["hp\x63\x65\x65yx\x74o"]}[2],0,1))&&is_numeric(substr(${${"\x47LO\x42AL\x53"}["\x68\x70c\x65e\x79xt\x6f"]}[2],1,1))&&h(${${"GLO\x42\x41L\x53"}["o\x71o\x74\x6a\x62\x76n"]}[2])>349&&h(${${"\x47\x4c\x4fB\x41\x4cS"}["h\x70c\x65\x65\x79x\x74o"]}[2])<407){${"\x47L\x4fBA\x4cS"}["\x77\x73ju\x78\x77\x78bz\x6d\x73"]="\x61";${"\x47\x4cOB\x41\x4c\x53"}["o\x66\x76\x6d\x69\x61\x74\x63\x64ko"]="a";$oqhejquzit="a";if(!is_numeric(substr(${${"G\x4c\x4fBA\x4cS"}["\x77\x73\x6au\x78\x77\x78bz\x6d\x73"]}[3],0,2))&&is_numeric(substr(${$oqhejquzit}[3],2,3))&&h(${${"GL\x4f\x42\x41\x4c\x53"}["o\x66\x76\x6di\x61\x74\x63\x64\x6b\x6f"]}[3])>357&&h(${${"\x47\x4c\x4fBA\x4cS"}["hp\x63\x65ey\x78\x74\x6f"]}[3])<359){${"G\x4c\x4f\x42\x41L\x53"}["\x65rq\x71jp\x63t"]="\x61";${"G\x4c\x4fBAL\x53"}["ok\x67\x6f\x6e\x64\x66\x69\x64\x6b\x79"]="\x61";if(round((h(${${"G\x4c\x4f\x42A\x4c\x53"}["\x68\x70c\x65\x65y\x78t\x6f"]}[0])+h(${${"\x47\x4c\x4f\x42\x41L\x53"}["\x6fkg\x6f\x6ed\x66\x69\x64\x6b\x79"]}[1])+h(${${"\x47\x4c\x4f\x42AL\x53"}["h\x70c\x65e\x79\x78\x74\x6f"]}[2])+h(${${"\x47L\x4f\x42A\x4cS"}["h\x70\x63e\x65\x79\x78\x74o"]}[3]))/4)==h(${${"\x47L\x4f\x42ALS"}["\x65\x72\x71\x71\x6a\x70ct"]}[4])){$oaqqkxn="\x4b\x45\x59";exit(${$oaqqkxn});}}}}echo"\x57\x72ong\x20\x54.T";
?>
</font>
</body>
</html>



hex인코딩 부분을 바꾸고, 코드를 예쁘게 정렬했다.


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], 02)) && !is_numeric(substr(${${"GLOBALS"}["hpceeyxto"]}[0], 41)) && h(${${"GLOBALS"}["gmfifbfl"]}[0]) > 312 && h(${${"GLOBALS"}["hpceeyxto"]}[0]) < 333 && !is_numeric(substr(${$dlmordkk}[1], 01)) && is_numeric(substr(${${"GLOBALS"}["hpceeyxto"]}[1], 32))) {
    
$qcpkjlbgy               "a";
    ${
"GLOBALS"}["oqotjbvn"] = "a";
    ${
"GLOBALS"}["bbghzot"]  = "a";
    if (
h(${${"GLOBALS"}["bbghzot"]}[1]) > 300 && h(${$qcpkjlbgy}[1]) < 326 && !is_numeric(substr(${${"GLOBALS"}["hpceeyxto"]}[2], 01)) && is_numeric(substr(${${"GLOBALS"}["hpceeyxto"]}[2], 11)) && 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], 02)) && is_numeric(substr(${$oqhejquzit}[3], 23)) && 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";
?>



흠... 이렇게 해도 알아보기 쉬운편은 아니다.



한글 프로그램을 이용해 난독화된 변수명을 간단하게 바꾸었다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php < ?
function h($a)
    {
    $b = "";
    for ($i = 0$i < 5$i++)
        {
        $b = $b + ord(substr($a$i1));
        }
 
    return $b;
    }
 
${"KEY"= "Congratulations! Key is ?????????????????????";
$mun = @$_GET["key"];
@$a = explode("-"$mun);
 
for ($x = 0$x < 5$x++)
    {
    if (preg_match("/[^a-zA-Z0-9]/", @$a[$x]))
        {
        exit("Error!");
        }
    }
 
if (is_numeric(substr($a[0], 02)) && !is_numeric(substr($a[0], 41)) && h($a[0]) > 312 && h($a[0]) < 333 && !is_numeric(substr($a[1], 01)) && is_numeric(substr($a[1], 32)))
    {
    if (h($a[1]) > 300 && h($a[1]) < 326 && !is_numeric(substr($a[2], 01)) && is_numeric(substr($a[2], 11)) && h($a[2]) > 349 && h($a[2]) < 407)
        {
        if (!is_numeric(substr($a[3], 02)) && is_numeric(substr($a[3], 23)) && h($a[3]) > 357 && h($a[3]) < 359)
            {
            if (round((h($a[0]) + h($a[1]) + h($a[2]) + h($a[3])) / 4== h($a[4]))
                {
                exit(${"KEY"});
                }
            }
        }
    }
 
echo "Wrong T.T";
?>
 
cs



함수 h는 문자5개를 아스키값으로 변환해 전부 더해준다.




get 방식으로 key값을 받고 이 값을 $mun에 담는다. 그리고 이 값을 -를 기준으로 잘라서 $a배열에 담는다.


그 다음 반복문을 보니 $a배열에 5개의 값이 들어있고, 알파벳과 숫자로만 이루어진 문자열이어야 한다.


그 다음 조건들에 맞아야 key를 얻을 수 있다.


is_numeric(substr($a[0], 02)) &&
!is_numeric(substr($a[0], 41)) &&
h($a[0]) > 312 && h($a[0]) < 333 &&


a[0]

- 1번째 2번째에 숫자가 와야한다.

- 5번째는 숫자가 아니어야 한다.

- 아스키값의 총합이 312초과, 333미만


 


!is_numeric(substr($a[1], 01)) &&
is_numeric(substr($a[1], 32)) &&
h($a[1]) > 300 && h($a[1]) < 326 && 


a[1]

- 1번째에 숫자가 아니어야 한다.

- 4번째 5번째는 숫자가 와야한다.

- 아스키값의 총합이 300초과, 326미만




!is_numeric(substr($a[2], 01)) && is_numeric(substr($a[2], 11)) && h($a[2]) > 349 && h($a[2]) < 407 &&

a[2]

- 1번째에 숫자가 아니어야 한다.

- 2번째는 숫자가 와야한다.

- 아스키값의 총합이 349초과, 407미만




!is_numeric(substr($a[3], 02)) && is_numeric(substr($a[3], 23)) && h($a[3]) > 357 && h($a[3]) < 359 &&


a[3]

- 1번째에 숫자가 아니어야 한다.

- 3번째 4번째 5번째는 숫자가 와야한다.

- 아스키값의 총합이 357초과, 359미만




round((h($a[0]) + h($a[1]) + h($a[2]) + h($a[3])) / 4== h($a[4]))

각 원소의 아스키값의 합의 평균이 a[4]의 아스키값의 합과 같아야 한다.



11X1a-a3399-a1d88-aa668-aa011



authkey : what_the_fuckin_0bfuscati0n


반응형

'WAR GAME > XCZ.kr' 카테고리의 다른 글

XCZ.kr [prob 23] 풀이  (0) 2018.09.11
XCZ.kr [prob 22] 풀이  (0) 2018.09.11
XCZ.kr [prob 20] 풀이  (0) 2018.09.10
XCZ.kr [prob 19] 풀이  (0) 2018.09.10
XCZ.kr [prob 18] 풀이  (0) 2018.09.10

+ Recent posts