반응형

문제는 Key를 원하고 있다.

Die와 PEiD로 봤을 때 C#으로 짜여져 있다.

 

디버거로 열어보니 도저히 key를 찾는 구문이 나오지 않는다.

C# 디버깅 방식은 따로 있는 것 같아 찾아보니...

 

JAVA의 JVM처럼 C#은 .NET 프레임 워크를 사용한다고 한다.

JVM을 사용한 자바 프로그램은 디컴파일 했을 때 거의 온전한 원본 코드를 얻을 수 있는데,

C#도 비슷한 방법을 사용하기 때문에 디컴파일 했을 때 거의 온전한 코드를 얻을 수 있다.

 

C# 디컴파일러는 Dnspy도 있고 dotPeek도 있지만 

나는 젯브레인을 좋아하기 때문에 dotPeek을 사용했다.

 

dotPeek으로 exe를 열어보면,

이렇게 RijndaelSimpleTest 클래스와RijndaelSimple 클래스가 있다. 

코드 분석을 해보면, RijndaelSimple 에는 암호화와 복호화 하는 함수가 선언이 되어 있고,

RijndaelSimpleTest 에는 RijndaelSimple 의 암호화와 복호화 하는 함수를 가지고 와서 사용하고 있다.

 

이 구문이 실행되면 str에는 Key가 들어 있고 아래에 if문에서 Key와 비교하는 구문이 보인다. 

string str... 구문 아래에 str을 print해주는 구문("Console.WriteLine(str);")

을 추가 해주고 C# 온라인 컴파일러에 코드를 올려서 확인 해보면

 

(dotPeek에서는 class가 나누어져 있지만 객체지향언어의 특징을 아는 사람들은 상관 없다는 것을 알 것이다.)

 

Key는 "Leteminman"

 

 

이번 문제는 언어별로 디컴파일 하는 방법이 다 다르다는 것을 배울 수 있었다.

JVM은 잘 알고 있으면서 C#은 몰랐다는 것이 참 아쉬웠다.

반응형

'Reversing 문제 풀이 > CodeEngn.com_Basic (Clear)' 카테고리의 다른 글

codeengn-basic-L15 풀이  (0) 2022.04.19
codeengn-basic-L14 풀이  (0) 2022.04.08
codeengn-basic-L12 풀이  (0) 2022.04.05
codeengn-basic-L11 풀이  (0) 2022.04.02
codeengn-basic-L10 풀이  (0) 2022.03.31