1. Home
  2. 보안 강좌/CodeEngn
  3. [CodeEngn] Basic RCE L02 풀이

[CodeEngn] Basic RCE L02 풀이

문제

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

 

다운로드

02.exe
0.00MB

다운로드는 여기서 해볼 수 있습니다.

모든 파일 출처는 코드 엔진 사이트에 있습니다.

 

풀이

문제에서 보셨듯이, 패스워드로 인증하는 실행 파일이 "손상" 되었다고 나옵니다. 아마 PE구조가 손상된 거 같네요.

그래서 이번 문제는 실행해서 무언가 분석해볼 필요가 없습니다. 

 

실행 자체가 안되는 깨진 실행 파일이기 때문에 올리디버거로 열어서 분석할 수도 없습니다.

반대로 말하면 이번 문제는 올리디버거로 동적 분석 할 필요도 없다는 것입니다.

 

* IDA로 열면 일단은 열리긴합니다. 열어도 별로 할 수 있는건 없습니다.

 

이미지 출처 : https://yum-history.tistory.com/134

오늘은 HxD(Hex Editor) 를 이용해서 02.exe 파일을 열어볼겁니다. 기본적으로 파일의 종류는 크게 텍스트 파일, 바이너리 파일이 있습니다. 텍스트 파일은 문자열의 나열로 저장된 파일 입니다. 쉽게 말해서 메모장으로 열어서 볼 수 있는 텍스트로 적힌 모든 파일들(*.txt 등등) 입니다.

 

바이너리 파일은 0,1 로 이루어진 기계어 파일입니다. 우리가 컴퓨터에서 사용하는 프로그램 *.exe 파일은 모두 바이너리 파일입니다. 이런 파일들은 메모장으로 열면 깨집니다. 당연히 문자로 이루어진 것들이 아니기 때문입니다.

 

물론 exe 파일 안에도 문자로 해석될만한 (문자로 적혀있는) 몇가지 부분이 존재하긴 한데 이런 부분을 제외하곤 위 사진 처럼 ASCII 코드 값에 매칭되지 않는 모든 값들이 깨진 글자로 보이게 됩니다.

 

이런 텍스트 파일은 메모장이나 NotePad++ 같은 텍스트 에디터로 열듯이, 바이너리 파일 역시 열기 위한 전용 프로그램(?)이 존재하는데 바로 HxD Editor 입니다. HxD 에디터를 이용하면 0, 1로 이루어진 기계어를 16진수로 묶어서 보여줍니다.

기본적으로 $2^4 = 16$ 이라는 수학적 원리에 의해 2진수 4개를 16진수로 1개로 묶어 읽도록 약속했습니다.

 

그래서 HxD Editor 을 이용하면 2진수 4개, 즉 4비트를 1개의 16진수로 축약해서  읽을 수 있도록 도와줍니다.

쉽게 이야기 해서 HxD Editor는 바이너리 파일을 16진수 형태로 보여줍니다.

그래서 프로그램 이름이 "HEX Editor" 인 것이죠. [HEX = 16진수]

 

각설하고 이제 HxD 를 이용해서 02.exe를 열어봅시다. 단순히 HxD 를 열고 분석하고 싶은 프로그램을 끌어 땡기면 됩니다.

 

그러면 이렇게 02.exe의 바이너리 코드를 16진수로 출력해서 보여주게 됩니다. 그리고 오른쪽 Decoded text 부분에선 바이너리로 읽히는 부분 중에서 문자로 읽을 수 있는 부분을 해석 해서 보여주게 됩니다.

 

보시면 이 프로그램은 MessageBoxA, SendMessageA 같은 윈도우 API를 이용해서 무언가 코드를 수행하려 했음을 알 수 있습니다. 물론 실행 파일 자체가 깨져서 올리디버거 같은 디스어셈블러 도구로는 분석이 불가합니다.

 

사실 올리디버거 같은 프로그램에서 기계어를 어셈블리어로 복구해준 디스어셈블리 과정이 위 처럼 2진수(0,1)로 되어 있는 기계어 파일을 16진수로 묶어서 읽은 다음에 16진수로 된 기계어를 단순히 우리가 눈으로 볼 수 있는 문자로 치환한 것 뿐입니다. 예를 들어서 41 44 라는 기계어(16진수)를 우리가 알 수 있도록 mov 라는 문자로 치환한 것이죠. 실제로 16진수로 된 기계어나 어셈블리어 명령어나 거의 같은거라고 보시면 됩니다.
41 44를 mov라는 명령어로 해석 할 수 있는거고, mov는 사실 41 44라는 기계어로 해석 할 수 있는것이죠. 어셈블리어가 기계어와 1:1로 대응된다는게 이 뜻입니다.

 

HxD 아래의 부분을 보면 수상한 텍스트를 발견하실 수 있습니다.

 

CrackMe#1
Nope, try again!
Yeah, you did it!
Crackme #1 JK3FJZh

문자열을 보아하니 "JK3FJZh" 라는 부분이 이 프로그램에서 요구하는 패스워드 였던 거 같습니다.

실행 파일들을 여러가지 분석해보시면 알겠지만 가끔 이렇게 중요한 값들이 프로그램에 암호화 없이 그대로 박혀있는 경우가 있습니다. 

 

제출하니 맞았다고 나오네요. 보통 이렇게 HxD로 분석하는 경우는 거의 없고 십중 팔구가 디스어셈블러(올리디버거, IDA)로 분석하는 문제들이 대부분인데 이 문제는 아마 HxD 사용법을 익히도록 의도한 문제 같습니다. 

'보안 강좌 > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L06 풀이  (0) 2023.01.12
[CodeEngn] Basic RCE L05 풀이  (0) 2023.01.11
[CodeEngn] Basic RCE L04 풀이  (0) 2023.01.09
[CodeEngn] Basic RCE L03 풀이  (0) 2023.01.06
[CodeEngn] Basic RCE L01 풀이  (0) 2023.01.05
SNS 공유하기
네이버밴드
카카오톡
페이스북
X(트위터)

최근 글 파일의 IT 블로그
추천하는 글 파일의 IT 블로그
최근글
인기글
이모티콘창 닫기
울음
안녕
감사
당황
피폐