본문 바로가기

Computer Security/CTF

[Codegate 2013] Binary 100 simple write up

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);