#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 |