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/
<?
${"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";
?>
흠... 이렇게 해도 알아보기 쉬운편은 아니다.
한글 프로그램을 이용해 난독화된 변수명을 간단하게 바꾸었다.
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, $i, 1)); } 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], 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))) { 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) { if (!is_numeric(substr($a[3], 0, 2)) && is_numeric(substr($a[3], 2, 3)) && 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를 얻을 수 있다.
a[0]
- 1번째 2번째에 숫자가 와야한다.
- 5번째는 숫자가 아니어야 한다.
- 아스키값의 총합이 312초과, 333미만
a[1]
- 1번째에 숫자가 아니어야 한다.
- 4번째 5번째는 숫자가 와야한다.
- 아스키값의 총합이 300초과, 326미만
a[2]
- 1번째에 숫자가 아니어야 한다.
- 2번째는 숫자가 와야한다.
- 아스키값의 총합이 349초과, 407미만
a[3]
- 1번째에 숫자가 아니어야 한다.
- 3번째 4번째 5번째는 숫자가 와야한다.
- 아스키값의 총합이 357초과, 359미만
각 원소의 아스키값의 합의 평균이 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 |