'crackme#15'에 해당되는 글 1건

  1. 2010.01.08 Crackme#15

2010.01.08 00:34 WarGame


문제를 받고 실행해보면

콘솔창에 비밀번호를 입력하라는 메세지만 덩그러니 나온다

문제가 엄청 쉽게 풀릴거 같은 느낌을 가지고

올리디버거를 실행시켰는..?

실행이 안된다 -

나만 그런가 싶어 다른 사람들은 어떤지 봤는데

아무문제 없이 실행되는거 같더라

OS 때문인가. Unpack 할때도 간간히 실행 안되더니

이럴때 말썽이다

아무튼 다른 방법으로 풀어야했다

PEID 로 보니



위와 같다

C# 으로 만들어진걸 crack 하기는 처음인데

아무튼 ..

.NET 이라니 .NET Reflector 가 떠올랐다

여기에 넣고 돌리면



ConsoleApp 3 가 추가된걸 확인 할 수 있고

여기서 소스를 그대로 거의 그대로 확인할 수 있다

정말 이정도로 소스가 쉽게 나올 줄은 몰랐는데

있는 함수 그대로 C# 프로젝트에 옮겨

붙여넣어주면 끝이다

좀 싱겁다면 싱거울 수 있는 문제지만

처음엔 이걸 어떻게 풀어야 하나 했다 -.-

아, 소스를 작성할 때 유의할 점이 있는데

RijdaelSimple class 구현부이다.

C#을 처음 접하다 보니

자꾸 RijdaelSimple 에서 오류가 나는데

왜 오류가 나는지 한동안 헤멨다

Google 을 약간 뒤져보면 어떤 식으로 구현하는지

직접 볼 수 있다.

이렇게 소스를 구현하고

Decrypt 함수의 리턴 부분을 출력 시켜주면 끝이다

    1 using System;

    2 using System.Collections.Generic;

    3 using System.Linq;

    4 using System.Text;

    5 using System.IO;

    6 using System.Security.Cryptography;

    7 

    8 

    9 namespace ConsoleApplication1

   10 {

   11     class Program

   12     {

   13         private static void Main(string[] args)

   14         {

   15             string plainText = "";

   16             string cipherText = "BnCxGiN4aJDE+qUe2yIm8Q==";

   17             string passPhrase = "^F79ejk56$\x00a3";

   18             string saltValue = "DHj47&*)$h";

   19             string hashAlgorithm = "MD5";

   20             int passwordIterations = 0x400;

   21             string initVector = "&!\x00a3$%^&*()CvHgE!";

   22             int keySize = 0x100;

   23 

   24             plainText = RijndaelSimple.Decrypt(cipherText,

passPhrase, saltValue, hashAlgorithm, passwordIterations, initVector, keySize);

   25             Console.WriteLine(plainText);

   26         }

   27 

   28         public class RijndaelSimple

   29         {

   30             public static string Encrypt(string plainText, string passPhrase, string saltValue, string hashAlgorithm,

int passwordIterations, string initVector, int keySize)

   31             {

   32                 byte[] bytes = Encoding.ASCII.GetBytes(initVector);

   33                 byte[] rgbSalt = Encoding.ASCII.GetBytes(saltValue);

   34                 byte[] buffer = Encoding.UTF8.GetBytes(plainText);

   35                 byte[] rgbKey = new PasswordDeriveBytes(passPhrase,

rgbSalt, hashAlgorithm, passwordIterations).GetBytes(keySize / 8);

   36                 RijndaelManaged managed = new RijndaelManaged();

   37                 managed.Mode = CipherMode.CBC;

   38                 ICryptoTransform transform = managed.CreateEncryptor(rgbKey, bytes);

   39                 MemoryStream stream = new MemoryStream();

   40                 CryptoStream stream2 = new CryptoStream(stream, transform, CryptoStreamMode.Write);

   41                 stream2.Write(buffer, 0, buffer.Length);

   42                 stream2.FlushFinalBlock();

   43                 byte[] inArray = stream.ToArray();

   44                 stream.Close();

   45                 stream2.Close();

   46                 return Convert.ToBase64String(inArray);

   47             }

   48 

   49 

   50             public static string Decrypt(string cipherText, string passPhrase, string saltValue,

string hashAlgorithm, int passwordIterations, string initVector, int keySize)

   51             {

   52                 byte[] bytes = Encoding.ASCII.GetBytes(initVector);

   53                 byte[] rgbSalt = Encoding.ASCII.GetBytes(saltValue);

   54                 byte[] buffer = Convert.FromBase64String(cipherText);

   55                 byte[] rgbKey = new PasswordDeriveBytes(passPhrase,

rgbSalt, hashAlgorithm, passwordIterations).GetBytes(keySize / 8);

   56                 RijndaelManaged managed = new RijndaelManaged();

   57                 managed.Mode = CipherMode.CBC;

   58                 ICryptoTransform transform = managed.CreateDecryptor(rgbKey, bytes);

   59                 MemoryStream stream = new MemoryStream(buffer);

   60                 CryptoStream stream2 = new CryptoStream(stream, transform, CryptoStreamMode.Read);

   61                 byte[] buffer5 = new byte[buffer.Length];

   62                 int count = stream2.Read(buffer5, 0, buffer5.Length);

   63                 stream.Close();

   64                 stream2.Close();

   65                 return Encoding.UTF8.GetString(buffer5, 0, count);

   66       }

   67 

   68         }

   69 

   70     }

   71 }


'WarGame' 카테고리의 다른 글

Vortex level2 풀이  (0) 2010.02.16
Vortex level1 풀이  (0) 2010.02.10
Vortex level0 풀이  (0) 2010.02.04
Code Gate 2009 본선 문제 stego_win 풀이  (0) 2010.02.03
Crackme#15  (0) 2010.01.08
CrackMe#14  (0) 2010.01.06
Posted by LinkC
이전버튼 1 이전버튼

블로그 이미지
LinkC

태그목록

Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.

공지사항

Yesterday30
Today3
Total328,675

달력

 « |  » 2019.5
      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  

최근에 받은 트랙백

글 보관함


. .