늘모자란, 개발 :: [wargame.kr] Challenge 27 - Crypto Crackme Basic

늘모자란, 개발

Simple Reverse Engineering.

Can you Reversing for C# Application?


c# 크랙미라고 한다. c#은 리플렉터라고 해서 디컴파일러가 정말 개짱많다. 아무거나 구해서 열어보기로 했다

main은 이렇게 이루어져있다

private static void Main(string[] args)
{
    Console.Write("Input your name : ");
    string name = Console.ReadLine();
    Console.Write("Password : ");
    string str2 = myEncrypt(Console.ReadLine(), name);
    if ((name == "BluSH4G") && myCmp(str2, getps(name)))
    {
        Console.WriteLine("\n::Congratulation xD ::\n");
    }
    else
    {
        Console.WriteLine("\n:: WTF AUTH FAILED ::\n");
    }
}


name은 BluSH4G 라고 한다.
그런데 비밀번호는 myEncrpyt에 name을 넣은값을 입력해야한다고 한다. 안볼수 없지

private static string myEncrypt(string strKey, string name)
{
    DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
    provider.Mode = CipherMode.ECB;
    provider.Padding = PaddingMode.PKCS7;
    byte[] bytes = Encoding.ASCII.GetBytes(mPadding(name));
    provider.Key = bytes;
    provider.IV = bytes;
    MemoryStream stream = new MemoryStream();
    CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(), CryptoStreamMode.Write);
    byte[] buffer = Encoding.UTF8.GetBytes(strKey.ToCharArray());
    stream2.Write(buffer, 0, buffer.Length);
    stream2.FlushFinalBlock();
    string str = Convert.ToBase64String(stream.ToArray());
    stream2 = null;
    stream = null;
    provider = null;
    return str;
}


myEncrpyt는 이렇게 생겼다.
서버에 아이디를 넣어 호출해주면 비밀번호가 돌아오는데(getps) 비밀번호가 매치하도록 작성해야하는것 같다.
역시 서버를 통하기때문에 전사공격은 어려워보인다. 우선 스니핑을해서 name을 입력했을때 돌아오는 값을 확인해 저장해두었다.

먼저 myEncrpyt function을 분석해봐야 할 것 같다.

먼저 bytes에 name을 꾸겨넣는데 mPadding을 거친다

private static string mPadding(string s)
{
    int length = s.Length;
    if (length != 8)
    {
        if (length > 8)
        {
            return s.Substring(length - 8);
        }
        for (int i = 0; i < (8 - length); i++)
        {
            s = s + "*";
        }
    }
    return s;
}


name은 BluSH4G 이니 7자이다. 고로 8자가 될때까지 *를 붙이는 패딩을 수행한다. 7자이므로 8자까지 채워
BluSH4G* 가 되었다
그 이후 key와 IV는 동일하기 때문에 이제 DES를 decrypt 하면 된다.
나는 des decrpyt online 뭐 이런식으로 검색했던거 같다. MODE는 소스코드상에 ECB라고 나와있으니 선택하고..

답이 나왔다.

2016/06/15 21:05 2016/06/15 21:05