DotNet 리버싱 문제
닷넷은 .NET 라고도 쓰며
마이크로소프트에서 제공하는 윈도우 프로그램 개발 환경을 말한다.
닷넷 앞에있는 PE는 Portable Executable 의 약자로
윈도우에서 실행파일을 의미한다.
그냥 exe 파일이라고 생각하면 된다.
문제 제목에 있는 0 protection 은 아무런 보호조치가 되어있지 않다는 뜻으로
아주 쉬운 문제임을 알려준다.
문제 파일로 주어지는것은 ch22.exe 파일이다.
exe 파일을 실행시켜 보면
이렇게 조그만 창이 하나 뜨면서 Password 입력을 요구한다.
비밀번호 입력창에 hello 라고 시험삼아 입력해봤는데
당연히 틀렸기때문에
Bad password 라는 알림창이 뜬다.
좀더 자세히 보기위해 IDA 라는 디스어셈블러를 이용했다.
IDA를 실행시키고 ch22.exe를 열어주면 이렇게 보인다.
Main 함수부터 살펴보는데
역시 닷넷으로 개발되에서 C로 개발된 프로그램과 달리 가독성이 너무 떨어진다.
아까 프로그램을 실행시켰던걸 생각해본다.
비밀번호를 입력한 뒤 Valider 버튼을 누르면
비밀번호가 틀렸다는 문구가 나타났다.
당연하겠지만 프로그램에서 비밀번호를 검증하는 루틴은
버튼을 눌렀을때 실행될 것이다.
오른쪽 Functions window에서 Button1_Click 이라는 함수를 찾았다.
이 함수가 관련이 있을듯하다.
Button1_Click 함수를 클릭하면 나오는 그래프를 보면
버튼이 클릭되었을때 CompareString 이라는것이 call 되면서
프로그램 흐름을 양갈래로 나누고 있다.
왼쪽에는 위에 보이는것 처럼 Bad password 로 가는 길이고
그림이 길어서 짤렸는데
오른쪽 끝으로 가면 Bravo! 를 만날 수 있다.
그럼 CompareString을 할때 어떤 String이랑 비교를 하는지 알아보면 될것이다.
사실 비교하는 string은 바로 위에 써있었다.
사용자가 입력한 값이 저 값과 똑같은지 확인한 후,
Bravo! 와 Bad password 중 하나를 출력하는 것이다.
사실 닷넷으로 개발된 프로그램의 경우
IDA 보다는 dnSpy 라는 도구를 이용하면 더 쉽게 분석할 수 있다.
dnSpy 를 실행시키고, 분석할 파일을 드래그 앤 드롭한 뒤,
Buttion1_Click 함수를 찾아가주면
이렇게 소스코드를 바로 확인할 수 있다.
찾아낸 비밀번호를 입력해주면
Bravo! 라고 뜨는것을 볼 수 있다.
'워게임 > Root Me' 카테고리의 다른 글
[Root Me] PHP - Filters - 웹해킹 / LFI / PHP wrapper (53) | 2022.07.18 |
---|---|
[Root Me] PHP - assert() - 웹해킹 / Command Injection (56) | 2022.07.14 |
[Root Me] Directory traversal - 웹해킹 (31) | 2022.07.09 |
[Root Me] JSON Web Token - Introduction - 웹해킹 / JWT (70) | 2022.07.06 |
[Root Me] ELF C++ - 0 protection - 리버싱 / IDA / GDB (64) | 2022.06.30 |