Skip to main content Link Menu Expand (external link) Document Search Copy Copied

TAG

reversing Study

Basic RCE 15

image

image

image

그냥 실행하면 위와 같이 나온다. Name에 따라 어떤 과정을 거쳐 그에 맞는 Serial값이 만들어 지고, 그 값을 찾으면 되는 것으로 예상된다.

디버거에서 실행 해 보았다.

image

호출 구역에서, 많은 문자열 관련 함수들이 보인다. 그 중에 문자열 비교함수가 있어, 해당 부분에 BP를 걸고 문제를 진행 해 보겠다.

image

위처럼 입력하고 실행해보자.

image

문자열 비교 전, 시리얼 값은 정수고, 정수인지 확인 하는 부분이 있을 것이라는 예상이 되는 MessageBox가 나왔다.

시리얼 값 비교는 문자열 비교 함수가 아닌, 정수 처리 부분일 것이므로, 시리얼 값을 만드는 곳을 다시 찾아 BP를 걸어야 될 것 같다. 다시 모듈간 호출을 살펴보자.

image

실행 결과, 해당 부분은 serial값을 만드는 부분이 아니였다.

image

따라서, 잘못 된 시리얼 값을 입력 했을 때 출력되는 문자열을 찾아, 분기문을 탐색해 보았다.

image

쉽게 분기점을 찾아 볼 수 있었는데, 시리얼 값을 만드는 과정을 알아보기 위해, 다시 분기문 이전의 함수들을 따라가보며 로직을 탐색해 보자.

image

image

시리얼 값을 만드는 부분을 찾았다. 해당 로직은 다음과 같다.

private int makeSerial(string name)
{
	int key = 0;
	int len = name.Length;
	foreach(char c in name)
	{
		key += c << 3;
	}	
	key += len << 3;
	key = key << 2;

	return key;
}

해당 로직을 통해 다음처럼 name이 CodeEngn일 경우의 serial값을 확인해 보자.

namespace Basic_RCE_15_Serial_Logic
{
    public class Serial_Logic
    {
        private static void Main()
        {
			string? name = "";
			int? key;
			Console.WriteLine("Input nane to make seral...");
			name = Console.ReadLine();

            try
            {
				if (name != null)
				{
					key = makeSerial(name);
					Console.WriteLine("Serial Val : {0}", key);
                    Console.WriteLine("Press Enter to EXIT Program...");
					Console.Read();
					return;
				}

            }
			catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine("Program Error! try again...");
                Console.WriteLine("Press Enter to EXIT Program");
				Console.Read();
				return;
            }
        }

		private static int makeSerial(string name)
		{
			int key = 0;
			int len = name.Length;
			foreach (char c in name)
			{
				key += c << 3;
			}
			key += len << 3;
			key = key << 2;

			return key;
		}
	}
}

image

image

문제를 해결하였으며, 해당 프로그램이 곧 name별 Key Gen 프로그램이다.

image

image

모두 완료되었다.


Author

Reverser & Pwner