Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Study

CodeEngn Basic 07 본문

Reversing/코드엔진

CodeEngn Basic 07

마늘부추 2019. 9. 8. 21:18

7. CodeEngn Basic 07

[그림 7.1]

 

 

7.1 문제 풀이

[그림 7.2]

해당 파일에서 사용되는 함수 목록이다.
드라이브 정보를 추출하는 함수로 보이는 부분을 찾았다. BP를 걸고 진행하여 해당 함수로 가보자.

 

[그림 7.3]

해당 함수를 호출하기 위한 인자들이 스택상에 쌓인 모습이다.

여기서 잠깐 멈추고 MSDN에서 GetVolumeInformationA 함수에 대한 정보를 찾아보자.

 

[그림 7.4]

첫 번째 인자 lpRootPathName에 대한 설명이다.


NULL을 지정하면 현재 경로의 루트 디렉터리가 지정된다.

 

내 경우, 파일이 존재하는 곳은 바탕화면이므로 루트 디렉터리는 C:\가 된다.

 

문제를 풀기 위해서는 드라이브 이름을 CodeEngn으로 바꾼 후 시도해야 하는데.. 어.. 그냥 바꾸기 싫었다.

그렇다고 "로컬 디스크"라는 이름으로 관찰하고싶지도 않았기 때문에 일단은 "D:\"를 인자로 넣어 실행해보았다.

 

함수 인자 수정은 다음과 같이 하면 된다.

 

[그림 7.5]

우선 스택상에 lpRootPathName 값으로 입력된 주소가 NULL이기 때문에 새로 문자열의 주소로 수정해주어야 한다.
나는 사용되지 않는 위치에 "D:\"를 입력해두었다.

 

그 후

[그림 7.7]

스택에서 lpRootPathName의 값을 해당 주소로 수정한다.

 

[그림 7.8]

그다음 함수를 실행시키면 EAX에는 함수 성공을 알리는 1이 저장되고, 버퍼인 VolumeNameBuffer 멤버의 값인 0040225C위치에 문자열 "GSP1RMCkHPFRER_KO_DVD"가 입력된다.

 

이 문자열이 어떻게 되는지 더 실행시켜보자.

 

[그림 7.9]

DL 레지스터에 2가 세팅되고 반복문이 돌면서 DL이 1씩 감소한다. 2번 반복된다는 의미이고 그 내용은 한번 루프가 돌 때마다 0040225C~0040225F 위치의 값을 각각 1씩 증가시키는 내용이다.
루프를 1회 돌자 해당 위치의 값이 HTQ2가 되었다.

 

그럼 여기에서 정답을 추측해볼 수 있다.

CodeEngn을 넣었다면 Code 부분의 Hex 값이 각각 2씩 증가한 형태가 된다.(____Engn)

 

 

7.2 Comment

이 문제에서 얻어가야 할 것은 무엇인가...

'Reversing > 코드엔진' 카테고리의 다른 글

CodeEngn Basic 06  (0) 2019.06.15
CodeEngn Basic 05  (0) 2019.06.15
CodeEngn Basic 04  (0) 2019.06.15
CodeEngn Basic 03  (0) 2019.06.13
CodeEngn Basic 02  (0) 2019.06.13