[CodeEngn] BASIC RCE L01
Reversing/Reversing (Wargame)

[CodeEngn] BASIC RCE L01

728x90

◾ 실행환경: IDA pro(32bit)

처음 실행화면

코드를 수정해 HD를 CD-Rom이라고 생각하는 메시지가 출력될 수 있도록 한다.

(원본 캡쳐본들이 날아갔다..)

 

수정 후 graph view

수정한 부분은 loc401021에서 가장 마지막 점프 브랜치 명령이다. 원본 코드에서는 eax, esi 값을 비교하고 je short loc_40103D였다. 바로 위 cmp 명령코드부분에 breakpoint를 걸고 실행해보면,

이렇게 eax 레지스터와 esi 레지스터의 값이 다르다. 이 때 두 가지 방법이 있는데,

  1. breakpoint를 걸고 실행 중 eax 레지스터의 값, 혹은 esi 레지스터의 값을 변조하여 서로 같게 만들어 je 조건에 통과해 loc_40103D를 실행할 수 있도록 한다.
  2. eax, esi 레지스터의 값을 변조하지 않을 경우, 결과 값이 같지 않다 인 경우 점프할 수 있도록 je 명령을 jne로 바꾼다

성공!


문제에서 GetDriveTypeA의 리턴값이 무엇이 되어야하는지에 대한 답을 요구하고 있으므로 이에 대한 풀이도 접근을 해보자.

GetDriveTypeA

UINT WINAPI GetDriveType(
_In_opt_ LPCTSTR lpRootPathName
);
Return code value(정수값) 의미
DRIVE_UNKNOWN 0 알 수 없음
DRIVE_NO_ROOT_DIR 1 최상위 경로가 없음
DRIVE_REMOVABLE 2 이동식 저장장치 ex. USB
DRIVE_FIXED 3 고정형 저장장치 ex. HDD
DRIVE_REMOTE 4 네트워크 드라이브
DRIVE_CDROM 5 DVD, CD ROM 유형
DRIVE_RAMDISK 6 Ram Disk

원본 파일에서 Drive는 HD이므로, 3을 리턴한다. 리턴한 값이 EAX에 저장되어 있는 것을 확인할 수 있다. 따라서, GetDriveTypeA 함수의 리턴값, EAX 값을 5로 바꿔주면 CD-ROM으로 인식되었다고 바꿔줄 수 있다.

SMALL

'Reversing > Reversing (Wargame)' 카테고리의 다른 글

[CodeEngn] BASIC RCE L03  (0) 2021.05.04
[CodeEngn] BASIC RCE L02  (0) 2021.05.04
[HackCTF] Handray  (0) 2021.05.03
[HackCTF] Reversing Me  (0) 2021.05.03
[HackCTF] welcome_rev  (0) 2021.05.03