woonadz :)

[CodeEngn Basic] RCE L02 문제 풀이_nabi 본문

IT/codeengn 문제 풀이

[CodeEngn Basic] RCE L02 문제 풀이_nabi

C_scorch 2021. 9. 28. 02:07
반응형

기록용

3줄 TMI

요즘 나에게도 관심분야라는게 생긴 것 같다. 원래 관심분야가 없었던 것은 아니고 IT, 이쪽에 관련해 지식이 워낙 없다보니까 뭐 하나 배워보는게 너무나도 높게 느껴졌다. 사실 리버싱을 시작하기 전에 재미없을 것 같다는 전제를 하고 시작을 했었다. 지금 생각해보면 왜 그랬나 싶긴하다. 솔직히 리버싱 공부를 하는게 재밌다. 더 자세한 얘기는 끝인사 때 적는걸로ㅎㅎ


이미 2주전에 푼 문제지만 처음 보는 문제라 가정하고 처음부터 적어보겠다.

 

패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겼다. 패스워드가 무엇인지 분석하시오

 

먼저 프로그램을 실행 시켜보겠다.

이러한 문구가 뜨며 파일이 실행되지 않았다.

올리디버거에서 열어보겠다.

역시나 올리디버거에서도 실행되지 않았다.

이때 너무 당황해서 바로 구글링을 해 찾아보았다. 알고보니 올리디버거를 통한 풀이를 의도하고 낸 문제는 아니였다.

HxD 라는 프로그램을 깔아줘야 한다. (사실 이 문제에 풀이는 거의 없는 수준으로 간단하다...)

https://mh-nexus.de/en/downloads.php?product=HxD20 

 

Downloads | mh-nexus

Downloads I am looking for new translators, if you want to help, here is a list of unmaintained translations. Note: Starting with HxD 2.3, the portable edition is available as separate setup program, and can be run with minimal privileges (no admin rights

mh-nexus.de

이 사이트에서 우리나라 언어로 된 HxD 프로그램을 설치해주면 된다.

HxD 란?

사용자가 선택한 파일의 Hex code 를 보여주고 편집 기능도 제공하는 프로그램이다.

Hex code 는 그냥 16진수를 생각해주면 된다.

HxD 프로그램에서 02.exe 파일을 열어줌

참고로 offset 00000000,00000001 에 보이는 4D 5A는 매직넘버(MZ)라고 하는 파일 시그니처이다. 모든 exe(실행 파일)는 저 번호로 시작한다고 한다. 파일 시그니처는 파일 종류마다 다르므로 궁금하면 찾아보는 것도 좋은 것 같다. 또 4D 와 같은 한 칸이 1 바이트를 의미한다.

이제 내리면서 저장된 문자열들을 확인하겠다.

 

사진 1
사진 2
사진 3

 

사진 4

 

사진 5

사진 1은 간간히 알 수 없는 문자가 보이기에 일단 패스. 쭉 내려주겠다.

사진 2는 정말 뭔지 모르겠다... 구글링을 해보았지만 내가 잘못 검색한건지 아무런 정보도 얻을 수 없었다. 저런 알 수 없는 문자의 조합이 16진수 하나를 아스키 코드로 바꾼것이라는데... 흠 이해가 잘 되지 않는다. 문자열들을 잘만 나오는거 같은데

사진 3은 DialogBoxParamA, EndDialog, GetDlgItem, GetdlgItemTextA, MessageBoxA, SendMessageA, SetFocus, USER32.dll 등등. 외부 함수, API 등을 선언한 것 같다.

사진 4에서 ADDislog.ArturDents CrackME#1 이라는 부분이 있는데 2번 문제 이름이 CrackMe 이므로 넘기겠다. 그 뒤에는 Nope, try again!, Yeah, you did it! 이라는 문자열이 있다. 아마 입력되어있는 패스워드와 내가 작성한 패스워드가 불일치 또는 일치 했는데 나오는 문자열인것 같다. 

2주전에 풀었을 때는 블로그를 보고 풀어(사실 블로그를 보고 푼것도 아니다.. 명쾌한 해답을 쓴 블로그는 단 한개도 보지 못했다.) 답 같이 생겨서 답이구나... 이랬다ㅋㅋㅋ

이제 나름대로 분석(?)을 해보자면 codeengn basic 05,06 번과 관련이 있다. 이들의 공통점은 무엇일까? 바로 번호를 비교해 일치 여부를 가린다는 것이다. 05,06 번의 코드를 다시 생각해보면 성공/실패 문자열을 출력하는 함수 안에는 기존 패스워드와 내가 적은 패스워드를 비교하는 함수와 함께 기존 패스워드 값이 적혀있었다. 그렇게 유추를 해보면 이 문자열들 조합 안에 기존 패스워드가 있을 것이라는 결론을 내릴 수 있다.

JK#FJZh 이 문자열을 제외하고는 모두 의미가 있는 함수 또는 이름이다. 따라서 이 문자열이 답이라고 유추 할 수 있다.

사진 4도 알 수 없는 문자들의 조합니다.

 

사진 2와 사진 4에 대한 설명은 추후 공부를 더 한 후에 꼭 알아오겠다.

 

결국 정답 패스워드는 JK#FJZh 이다.

참 허무하네 ㅎㅎ

 

 

 

끝인사 및 느낀점

이번에 2번 문제를 다시 풀면서  PE파일 구조를 다시 공부해야겠다고 생각한 것 같다. 오늘 어떤 해킹 카페를 발견해 글을 읽어보던 중 코드의 전체적인 흐름을 잘 알고 분석해야 한다는 내용을 보았다. 그래야 다른 문제에서 비슷한 흐름을 발견할 경우 추측하기 수월하다고 했다. 뭔가 이 내용을 실천한 느낌(?)이여서 살짝 기분이 좋다. 내 추측이 틀렸을 수도 있지만 부끄럽진 않다. 후에 틀렸다는 걸 알아차리면 그냥 내 실수를 바로 잡았다고 생각할 것이다.

여담으로 올리디버거에 넣었을 때 나온 오류는 드림핵이라는 사이트에서 다운 받은 파일에서도 본 오류다. 지금 다시보니 같은 오류여서 갑자기 생각났다. 오늘 공부하다가 지겨워서 드림핵이라는 사이트에서 기초 리버싱 문제를 한문제 풀어보려고 했다.(나름대로 얼마나 늘었는지 확인하고 싶었다.) 파일을 다운 받고 올리디버거로 여니까 위와 같은 오류가 떴다. 근데 이번에는 파일이 손상돼서가 아니고 64비트에서 열리는 파일이었던 것 같다. 올리디버거는 32비트만 지원한다. 그래서 다음엔 x64dbg를 이용해 풀어보려고 한다.

아 TMI에서 한 말을 이어 하자면, 내가 리버싱이 재미없을 것 같다고 생각하고 시작한 이유는 실망감..?이었다. 우리가 생각하는 해커는, 또는 영화 드라마에 나오는 해커는 컴퓨터 3,4 대를 가지고 타자를 타다닥 쳐가며 쉽게 해킹한다. 근데 해킹 공부를 한 사람들은 실상은 거의 그렇지 않다는 것을 알았을 것이다. 해킹은 추측과 실행이 다다. 최대한 많이 추측해보고 실행해보고 되는걸 찾는 것이다. 나는 이런 점에서 실망을 했던 것 같다. 막상 해킹 공부를 해보니 코드를 하나 하나 뜯어 분석하고 전체 흐름을 읽고 추측하는 것에 흥미를 느끼고 있다. 그래서 요새는 모의해킹, 악성코드, 리버싱에 관심이 많다. 또 호기심이 가는 인공지능과 블록체인이 있다. 저번주부터 프로젝트를 진행하느라 현재 인프런에서 인공지능 관련 강의를 보며 독학하고 있다. 사실 인공지능은 정말 정말 하나도 모르고 너무 높은 벽 같아서 두려웠다. 현재 혼자공부하는 머신러닝/딥러닝 강의를 반정도 수강한 상태인데 알고리즘만 배우고 있지만 궁금증을 계속 유발하게 하는 것 같다. 앞으로 실습에 들어가면 얼마나 더 재밌을 지 기대가 된다. 나머지 하나는 블록체인이다. 블록체인은 저번주 동아리 시간에 오라클 사에 블록체인 테이블을 조사하며 개념을 처음 알게 되었다. 사실 블록체인 = 비트코인...? 이렇게만 생각하고 있었다. 보안과 관련된 분야라는 것은 부끄럽지만 전혀 몰랐다. 블록체인에 대해 많이 궁금해져서 중간고사가 끝나거나 겨울방학 때 인프런에서 독학해볼까 고민중이다. 

반응형