peid를 통해서, 혹은 그냥 프로그램을 바로 켜봐도 느낌상 C# 파일이라는것을 확인할수 있다.
그러므로, net reflector를 이용해서 디컴파일했다.
코드를 쭉 살펴보다보면, 우리에게 보여주는 중요한 string은 암호화 되어있고
xor과 AES encrypt로 되어있다는것을 알수있다.
blocksize가 0x100이므로, Rijndael 방식중에서도 256비트라는것을 알수있고,
key값은 9e2ea73295c7201c5ccd044477228527 이다.
iv값도 key값과 같은 값을 사용한다.
그리고 중요한점은, utf-8방식으로 해야한다는것이다.
그래서 온라인상에 있는 rijndael decrypt 페이지에서는 안되더라..
그래서 처음엔 python으로 진행하다가 나중에 php를 이용해서 디코딩했다..
[python] 먼저 xor 디코딩
c = [ 0x3f, 30, 0x39, 0x2f, 20, 0x4e, 50, 0x36, 0x33, 5, 0x25, 0x29, 0x52, 40, 0x45, 30, 0x2a, 0x38, 0x24, 0x49, 60, 0x44, 0x4f, 0x56, 0x18, 0x49, 0x4c, 0x13, 9, 0x1b, 0x2a, 4, 0x52, 0x2a, 0x1c, 0x56, 0x4f, 11, 0x11, 0x3f, 0x17, 14, 0x30, 0x40 ] af = "" i=0 while i< len(c): af += chr(c[i] ^ 0x25 ^ 0x58) i = i+1 print af
[php] aes decrypt
class Foo { protected $mcrypt_cipher = MCRYPT_RIJNDAEL_256; protected $mcrypt_mode = MCRYPT_MODE_CBC; public function decrypt($key, $iv, $encrypted) { $iv_utf = mb_convert_encoding($iv, 'UTF-8'); return mcrypt_decrypt($this->mcrypt_cipher, $key, base64_decode($encrypted), $this->mcrypt_mode, $iv_utf); } } $encrypted = "BcDRi3OKNxXT/U8cWEY4A92+e41ntfWy/Wa+2vlBjsM="; $key = "9e2ea73295c7201c5ccd044477228527"; $iv = "9e2ea73295c7201c5ccd044477228527"; $foo = new Foo; echo $foo->decrypt($key, $iv, $encrypted);
'Computer Security > CTF' 카테고리의 다른 글
[plaid CTF 2013] web 150 write up (29) | 2013.04.23 |
---|---|
[Codegate 2013] Web 400 simple write up (1) | 2013.03.04 |
[Codegate 2013] Web 300 simple write up (4) | 2013.03.04 |
[Codegate 2013] Web 100 simple write up (1) | 2013.03.03 |
[PHDays 2012] Binary 100 Write up (0) | 2012.12.21 |