쉬는시간/xcz.kr

[xcz.kr] PROB30 문제풀이

happy-nut 2015. 11. 13. 01:45

30번 문제의 Title은 「Easy DLL입니다.

리버싱 문제 특성상 풀이에 캡쳐 이미지가 많을 겁니다.

우선 Download Here 으로 다운을 받아보면 PROB30.dll이라는 파일이 다운받아 집니다.

저는 디버거로 Immunity Dbg(이하 이뮤니티 디버거라고 하겠습니다)를 선호하기 때문에, 이뮤니티 디버거에 dll을 올려보았습니다.

맨 처음 시작은 어차피이뮤니티 디버거에서 제공하는 LOADDLL.EXE가 차지할 것이기 때문에(dll을 로드를 해야 살펴 볼 수 있으므로), 볼 것도 없이 <ALT+E>를 눌러 모듈 별 Entry Point를 탐색해줍니다.

Entry Point는 모듈의 시작주소를 뜻합니다. 0x736C1A64가 PROB30.dll의 Entry Point입니다.

붉은색으로 박스친 부분은 별다른 내용은 아니고, 제가 군부대에서 이 문제를 풀다보니 부대PC에 설치된 보안프로그램중에 dll에 따라붙어 이벤트를 감지하는 모듈이 있길래, 경로를 공개하면 보안예규에 어긋날까봐 해둔 겁니다. (신경 쓰지 않으셔도 된다는 뜻입니다)

아무튼 노란색 박스친 부분에 있는 PROB30.dll에 <Enter>로 들어가줍니다.

이 프로그램이 어떻게 돌아갈지 대강 파악하고 돌리는 것과, 전혀 모르는 채로 돌리는 것은 천차만별이기 때문에 최대한 정보를 얻어내고 프로그램을 돌려보는 것이 좋습니다.(고수라면 상관이 없을텐데 저는 하수 축에도 못끼는 편입니다)

Search for > All referenced text strings에서는 해당 모듈에서 검색할 수 있는 모든 문자열을 찾아줍니다. 개발자가 코딩을 할 때, 문자열을 하나도 섞지 않고 프로그램을 짜기란 상당히 어려운 일 일겁니다. 따라서 대부분 프로그램이 문자열을 몇 조각 정도는 가지고 있게 되는데 가끔 이 문자열들 중에서는 큰 힌트를 주는 문자열도 있습니다. All referenced text strings기능은 그런 문자열을 찾았을 때 가장 큰 힘을 발휘합니다.

KEY값을 당장이라도 보여줄 것만 같은 "the key is %s"라는 문자열이 보입니다. <Enter>로 들어가봅시다.

0x736c12b0 ~ 0x736c137f까지가 키를 출력하는 부분이 담긴 함수 범위입니다. 물론 이 주소는 컴퓨터 마다 다를겁니다. 이는 프로그램이 메모리에 올려질 때 Base로 등록된 주소에 이미 다른 dll이 로드되어 있을 경우 내부적으로 재배치되는 주소를 계산하여 로드하는 Dll의 특성에서 비롯됩니다. 

0x736c12b0(맨 처음) 부분 OPcode 는 55인데, 그 앞을 보면 ">" 표시가 있습니다. 이 ">" 는 "다른 곳에서 이곳으로 jump를 해서 오게 되었다"는 표시입니다. 

(>대신에 $가 있는 경우는 Jump 가 아닌 Call 로 오게 될 때 표시됩니다)

하단에 "Jump from 736C100A" 라는 부분에서 0x736C100A부분에서 jump하여 이 함수에 도착했다라는 사실을 알 수 있습니다. 이걸 양심없이 고급지게 표현하자면 역추적(Back Tracing)이라고 하는데, 이렇게 계속 트레이싱을 해서 올라가다 보면 결국 모듈의 Entry Point를 만나게 됩니다. 

목적지에서 돌다리를 건너고 건너서 출발지에 돌아온 셈이니, 대략적인 로드멥이 그려졌을 겁니다. 이 로드멥을 따라 돌다리를 건너다 보면 아래처럼 Key를 출력하는 함수에 진입을 하게 됩니다. 

이미 Break Point는 걸어두었으므로 <F9>를 누르면 EDX레지스터에 바로 Key값이 노출될 것입니다.

따라서 ekfldntmtkrldi가 정답이 되겠습니다.


답 : ekfldntmtkrldi





'쉬는시간 > xcz.kr' 카테고리의 다른 글

[xcz.kr] PROB36 문제풀이  (0) 2015.11.22
[xcz.kr] PROB16 문제풀이  (0) 2015.11.12
[xcz.kr] PROB13 문제풀이  (0) 2015.11.07
[xcz.kr] PROB14 문제풀이  (0) 2015.11.07
[xcz.kr] PROB20 문제풀이  (0) 2015.11.05