본문 바로가기

리버스엔지니어링/크랙미 풀이

코드게이트 2013 바이너리 100분석

 

8938765cdf97403089c008e4d4b63d52.exe

코드게이트 바이너리 100점짜리 문제의 모습입니다.

 100점짜리 싸구려 도어락이며 참가한 500명 정도의 사람들 중에 250명정도의 사람들에게 뚫린 비운의 도어락입니다.

*을 누르면 INPUT PASSWORD라고 뜨고

아무 숫자나 입력해서 *를 누르면 코드가 아니라고 뜹니다.

 

 

 

이제 이 문제는 지금까지 풀던 방법과는 다르게 풀건데요 바로 올리디버거로 파일을 분석하지 않고 PEID로 먼저 분석을 하겠습니다.

위의 그림처럼 분석을 하게 되는데요, 디버거로 먼저 분석을 하지 않는이유는 저번 코드엔진 L05때도 그랬듯이 PEID로 먼저 보면 패킹의 여부등을 미리 알 수 있고요, 어떤 언어로 만들어 졌는지 등을 미리 알면 훨신 더 분석하기가 쉬워지기 때문에 그렇습니다.

좀 위험한 프로그램에서는 디버거로 막 열었다가 잘못해서 바이러스로 퍼져나갈수도 있기 때문에 PEID를 통해서 미리 안전하게 분석하는게 정석입니다.

 

 

그럼 이 순서를 따라서 PEID로 분석을 해보면 C#과 .NET에서 만들어 져있다고 써있습니다.

 

여기서 잠깐!!

.NET기반으로 만들어져있다는 사실이 리버싱을 하는데 얼마나 큰 영향을 주는지 알아보겠습니다.

.NET 프로그램은 MSIL(Microsoft Intermediate Language)라는 중간 언어로 컴파일이 된다고 합니다.

그런데 MSIL에는 프로그램에 대한 정보들이 IA-32보다 매우 자세히 포함됩니다. 그렇기 때문에 프로그램 안의 데이터의 거의 모든것이 쉽게 드러나고, 디컴파일러를 이용하면 실제 소스와 거의 동일한 소스를 얻어낼 수 있습니다. (디컴파일러란 : 컴파일이 소스에서 파일로 만들어주는 것이면 디컴파일은 파일에서 소스를 얻어내는 행위를 말합니다.)

 

그렇다면 이 프로그램은 귀찮게 디버거로 돌릴 필요없이 디컴파일러를 쓰면 되지 않을까요????

 

 

디컴파일러에는 종류가 많지만 .NET reflect가 유료화가 됬기 때문에 저는 무료인 Telerik을 사용합니다.

http://www.telerik.com/products/decompiler.aspx

 

 

 

프로그램은 디 컴파일러로 연 모습입니다.

이 모습은 왼쪽 창에서 파일이름->Crack_Test.exe->Crack_Test->Crack_Game을 누른 모습입니다.

변수 이름중 세번째를 보면 lowkey에 이상한 모습들이 써있는데요,

 

중간의 TransFormable에서 비교값으로 이용되는 것을 보아 코드값이 암호화되있다고 생각됩니다.

 

근데 저는 암호화코드를 읽을줄 모릅니다.

그러므로 저는 여기까지 풀었습니다.....(절대로 내가 500명중에 못푼 250명이라고 말할수는 없어!!!)

 

만약 C#을 잘하시는 분이라면 이 프로그램을 읽어서 코드를 복호화시킬수도 있겠네요.

근데 여기는 리버싱이 아니라 프로그래밍 쪽이므로 나의 리버싱 기술은 뛰어날거라 자기합리화를 시키면서 꼭 여러분들은 코드를 복호화 시켜보기를 바랍니다!!!