HackChang

[xcz.kr] Prob19 19번 문제 풀이 본문

W4RG4M3/R3V3RS1NG

[xcz.kr] Prob19 19번 문제 풀이

HackChang 2020. 7. 22. 19:49

Prob19

이번문제는 제목으로 봐서 리버싱 문제라는 생각을 했다.

우선 파일을 다운로드받아서 실행해보도록 하겠다.

 

운영체제가 프로그램을 보호하지만, 추가정보를 눌러서 실행하도록 하겠다.

 

위와 같은 화면이 출력된다.

우선 ADD기능을 실행해보도록 하겠다.

 

이런식의 내용으로 ADD을 실행했고, 같은 폴더에 log.txt파일이 생기고, 파일을 열면

 

1 hackchang 25 M A- - - - -

이런 텍스트가 추가되는 것을 볼 수 있다.

한명더 추가해보도록 하겠다.

 

1 hackchang 25 M A2 Hack 22 M B3 Hack 22 M A- - - - -

이런식으로 타입 뒤에 바로 다음 사람의 정보가 붙는 것을 볼 수 있었다.

해당 프로그램을 PEID에 먼저 올려보도록 하겠다.

 

c++로 만든 디버그 파일인 것을 알 수 있었다.

PEID는 첨부하도록 하겠다.

PEiD.exe
0.21MB

올리디버거로 해당 파일을 올려보도록 하겠다.

 

위와 같은 에러가 뜨고, 로딩이 되는 것을 볼 수 있다. 해당 오류에 대해서 아래 링크에서 설명하도록 하겠다.

 

https://hackchang.tistory.com/63

 

[OllyDbg] 올리디버거 오류 Module 'xxx' has entry point outside

올리디버거를 사용하다가 위와 같은 에러를 발견했다. 해당 에러는 엔트리 포인트를 찾지 못할 때 발생하는 에러로 올리디버거의 옵션을 고치면 해결될 것이라 생각했다. Options - Debugging options -

hackchang.tistory.com

올리디버거에서 스트링 검색을 해도 내용을 찾을 수 없어 IDA로 열어보도록 하겠다.

 

IDA를 통해 해당 프로그램을 열고, Shift + F12 를 누르면 스트링을 검색해준다.

 

Key값이 출력되는 부분을 찾을 수 있었고, 해당 부분으로 들어가보도록 하겠다.

 

해당 부분에 X를 눌러 참조되는 부분을 들어가보도록 하겠다.

 

여기서 헥스레이(HexRay)의 도움을 받아 소스코드를 보도록 하겠다. (F5)

 

위의 소스를 통해 XOR연산(^)을 하는 것을 알 수 있고,

여기서 우리는 a1의 값을 알 수 없기 때문에 이제 올리디버거의 힘을 빌리도록 하겠다.

 

올리디버거를 통해 EP를 찾았다. 찾는 과정은 생략하도록 하겠다.

 

 

조금 내리다보면 위와 같은 ESP에 4를 더하는 부분을 찾을 수 있다.

아래 더하는 부분도 반복문의 내용과 비슷하기 떄문에 위의 malloc함수에 BP를 걸어보겠다.

 

BP를 걸고 한줄씩 실행하다가 DS 에 C라는 문자열이 담긴 것을 볼 수 있었고, 아래 덤프창에 00bc1365주소로 가보도록 하겠다.

 

이렇게 log파일에 담긴 내용을 찾을 수 있었고,

다시 파일을 불러와서 봤는데

 

malloc - free 후 EDX주소에 가면 위와같이 이름이 나오는 것을 볼 수 있었다.

EDX주소 +4를하면 

 

이렇게 이름이 나오는 걸로 봐서

a1+4 = 이름이라는 것을 알았고,

28 , 29를 구해보도록 하겠다.

여기서 28을 더하면 안되고, 16진수로 바꾼 후 더해줘야한다. 

28 = 1C , 29 = 1D

 

M과 A는 우리가 처음 ADD할 때 입력한 성별과 타입이라는 것도 알게 되었다.

a1+28 = 성별 , a1+29 = 타입

다시 위의 헥스레이(hexray) 소스에서 a1+4 (이름) == 'E' 이므로,

이름이 E라는 조건에 만족해야한다.

우리는 이름만 알고, 성별과 타입은 알 수 없었다.

힌트와 문제 설명을 다시보도록 하겠다.

 

 

Description
B never good at studying doesn't
But, she has a lot of interest in the computer.
So, she likes computer.
Hint1. key is the ASCII code area.

 

B는 공부를 잘하지 않는다.

그러나 그녀는 컴퓨터에 많은 흥미를 가지고 있다.

그래서 그녀는 컴퓨터를 좋아한다.

힌트1 , 키는 아스키코드 영역이다.

 

여기서 B라해서 이름이 B라고 생각할 수 있지만,

우리는 이름은 E인 것을 알았고,

여기서 그녀라고 했기 때문에 성별에는 M이 아닌 W가 와야된다는 것을 알았다.

그러면 남은 것은 타입인데, 여기서 B가 이름이 아닌 타입이라 생각됐고, 타입에 B가 오면된다.

 

Comments