[CodeEngn] Basic RCE L07 풀이
- 리버싱/CodeEngn
- 2020. 2. 20. 23:51
반응형
CodeEngn Basic RCE L07 문제 확인
컴퓨터 C 드라이브의 이름이 CodeEngn일 경우 시리얼이 생성되는데 시리얼 생성 과정에서 CodeEngn이 뭐로 변경되는지를 묻고 있다. C 드라이브 이름을 가져온는 것과 관련된 윈도우 API가 사용될 것이고 가져온 이름을 사용해서 시리얼을 생성하나보다.
아래와 같이 시리얼을 입력받고 있다.
CodeEngn Basic RCE L07 분석
시리얼을 맞게 입력했다는 문자열이 사용되는 함수로 먼저 가본다.
해당 함수로 가보니 GetVolumeInformationA라는 C드라이브의 이름을 가져올 것만 같은 API가 쓰이고 있다. 그리고 인자를 여러개 받는데 두번째 인자로 VolumeNameBuffer가 push되고 있다. 이 변수에 C 드라이브 이름이 저장된다고 가정하면 이 문자열과 "4562-AEX"가 strcat되고 있다.
그리고 몇번의 add연산이 수행된 후 다시 strcat, strcat 수행 후 두 문자열을 strcmp로 비교하고 있다. 하나는 시리얼이고 하나는 우리가 입력한 시리얼일 것이므로 이 부분을 동적으로 확인해보면 문제는 쉽게 풀릴 것이다(사실 위에 연산만 봐도 된다).
C드라이브 이름을 CodeEngn으로 변경하고 해당 부분에 bp를 걸어 확인을 해보니 예상했던 변수가 C드라이브의 이름을 담는 변수가 맞았다.
최종 시리얼은 아래 네모박스 친 부분의 값으로 확인된다.
C드라이브 이름에 add 연산을 몇번 했고 다른 문자열과 몇번 합쳤으므로 CodeEngn은 EqfgEngn으로 변경된 것으로 볼 수 있다.
'리버싱 > CodeEngn' 카테고리의 다른 글
[CodeEngn] Basic RCE L08 풀이 (0) | 2020.02.22 |
---|---|
[CodeEngn] Basic RCE L12 풀이 (0) | 2020.02.22 |
[CodeEngn] Basic RCE L06 풀이 (0) | 2020.02.20 |
[CodeEngn] Basic RCE L05 풀이 (UPX 패킹) (0) | 2020.02.19 |
[CodeEngn] Basic RCE L04 풀이 (IsDbuggerPresent) (0) | 2020.02.19 |