#About


Author : Basse 2002


Korean :

정답은 무엇인가


English :

Find the answer




#Contents


Disassemble과 Decompile 차이의 이해와 C# 코드의 이해를 통한 코드 수정으로 암호화 된 값을 복호화 시키는 것을 목표로 한다




#Solution


[그림 1] - 실행화면


위 그림은 13.exe의 실행화면이며, 올바른 패스워드를 입력할 때까지 "Bad Luck! Try again!"을 외치는 것을 반복한다


문제도 간결하고 패스워드만 찾으면 되는 건가 하며 디버거로 열었을 때, 아래와 같은 에러를 확인할 수 있다


[그림 2] - 에러 메시지


디버거로 열지 못하는 파일이라면 어떤 "것"으로 짜여진 것인지 확인을 위해 PEiD를 사용했다


[그림 3] - C# Programming


위 그림을 보면 .NET 기반의 C# 프로그래밍이 되어 있음을 알 수 있다


 검색을 통해 C#은 디버거와 같은 디스어셈블리어로는 열리지 않고, 디컴파일러가 따로 필요함을 알 수 있었고

JetBrains의 "dotPeek"라는 프로그램에서 C# 디컴파일을 지원함을 알 수 있었다


https://www.jetbrains.com/decompiler/


[그림 4] - main


dotPeek를 실행시키고 프로그램의 main을 열어보면 평문을 솔트 값, 해쉬 알고리즘 MD5 등과 함께 암호화 하는 것을 확인할 수 있으며

주목해야할 부분은 반복문 while 위의 코드인 Decrypt 함수의 반환 값이 str에 저장되며, str은 while 문 안에서 사용자 입력과 비교를 한다


따라서 str에 저장 된 값이 복호화 된 평문이며 아래와 같이 조금의 코드 수정을 통해 평문을 얻을 수 있다


[그림 5] - C# 코드수정


비쥬얼 스튜디오를 통해 C# 코드를 암호화된 값이 아닌, 복호화 된 값이 나오게 끔 수정 해준 뒤, 리빌드를 진행했다


[그림 6] - Rebuild


리빌드를 진행하면 위 프로그램이 생성된 것을 확인할 수 있으며, 실행시키게 되면 문제에서 요구하는 정답인, 복호화 된 값을 확인할 수 있다


[그림 7] - Decoded Value



'Wargame' 카테고리의 다른 글

CodeEngn Basic 15  (0) 2017.10.12
CodeEngn Basic 14  (0) 2017.10.11
CodeEngn Basic 12  (0) 2017.10.08
CodeEngn Basic 11  (0) 2017.10.08
CodeEngn Basic 10  (2) 2017.10.02

+ Recent posts