webhacking/etc

xcz.kr 21번.

qkqhxla1 2014. 12. 7. 23:35




난독화가 되어있다....... 이건 코드 난독화라기보다는 변수명? 난독화라 복호화할 수 있는 툴이


없다.(적어도 내가 알기로는... ) 파이썬과 hwp를 이용해서 복호화를 했다.


파이썬에서는 \x71같은거는 알아서 아스키로 변환해 준다. 그리고 대부분 코드 특성상 


세미콜론(;)으로 한줄이 끝나는걸 생각해 ;를 ;\n으로 바꾸어 출력했다. 


(for문의 ;도 한줄 내려가지만 어쩔수없었음.) 바꾸어 출력한뒤 줄을 맞추고, 각각의 변수명이 


엄청나게 더럽게 되있다. 예로 그냥 $a라고 쓰면 될것을.. 


${"GLOBALS"}["hpceeyxto"]="a";


${${"GLOBALS"}["hpceeyxto"]}로 선언해놓았다. 이것은 단순히 $a이다..


그리고 아랫줄에 $raraw="a"; 요런식으로 써서 같은 변수인 $a를 여러가지 방법으로... 표현해놓았다.


일부 예시이다. 아래의 변수는 ${${"GLOBALS"}["gasyarknd"]}와 ${$gflrozo} 인데. 이게 둘이


같은 변수($b)를 가리킨다. (복호화를 다 하지 않으면 코드 해석이 매우 힘들다.)


<?
$b = "variable  b";
${"GLOBALS"}["gasyarknd"]="b";
$gflrozo="b";

echo ${${"GLOBALS"}["gasyarknd"]} . "<br />";
echo ${$gflrozo} . "<br />";
if( ${${"GLOBALS"}["gasyarknd"]}==${$gflrozo} )
	echo "same!";
else
	echo "different..
"; ?>



hwp에서 변환 기능으로 하나하나 찾아서 변환하고, 변환이 끝난 변수는 지워서 깔끔하게 정리했다.


어쨋든 복호화한 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"; ?>


여기서 조건에 맞게 해주면 된다. 일단 중요한 함수인 h는 5글짜까지 세면서 하나하나를 아스키코드값


으로 변환한다음 그 값을 더하는 함수이다. explode함수는 첫번째 인자를 기준으로 두번째 문자열을


나눈다. 파이썬의 split같은거라고 보면 된다. is_numeric은 숫자인지 판별하는 함수이다.


if문이 많지만 자세히 보면 앞에서부터 조건을 맞춰주면 된다. 그리고 헷갈리면 밖의 if문만 쓴 뒤에


맞는지 확인하려면 내부의 if문을 지우고 특정한 문자열을 출력하게 해서 문자열이 출력되면 밖의


if문은 맞다고 생각하면 된다. (난 그런식으로 했다.) 이런식으로 내부 if문으로 하나씩 들어가면 된다.


어쨋든 위의 if문을 하나하나 조건에 맞게 만들어주면 난 22nn-d3333-d2dd-dd770-nn89 가 나왔다.


조건이 범위로 설정되었기에 사람마다 다른 답이 여러개 나올 수 있다.

'webhacking > etc' 카테고리의 다른 글

Security Override Basic  (0) 2014.12.17
Security Override Recon  (0) 2014.12.17
xcz.kr 32번.  (0) 2014.12.07
xcz.kr 18번.  (0) 2014.12.07
GoogleBig - HackGame  (0) 2014.12.01