woonadz :)

[CodeEngn Advance] RCE L03 문제 풀이 및 분석_nabi 본문

IT/codeengn 문제 풀이

[CodeEngn Advance] RCE L03 문제 풀이 및 분석_nabi

C_scorch 2022. 11. 16. 23:15
반응형

RCE L03 문제

 

 

RCE L03 문제 풀이

문제 파일
시리얼 값 입력 시 출력되는 메시지 주소로 이동
EXE 파일의 입력값을 가져오는 주소로 추측되는 곳에 BP를 걸고 실행
Name = CodeEngn & Serial = 1234 입력값
Name이 CodeEngn인지 검사하는 코드를 확인
GetDlgItemTextA 함수 발견


GetDlgItemTextA 함수

dialog box에서 제어와 관련된 제목이나 텍스트를 검색한다.

UINT GetDlgItemTextA(
  [in]  HWND  hDlg,
  [in]  int   nIDDlgItem,
  [out] LPSTR lpString,
  [in]  int   cchMax
);

함수가 성공하면 반환 값은 종료 null 문자를 포함하지 않고 버퍼에 복사된 문자 수를 지정한다.

함수가 실패하면 반환 값은 0이다. 


dialog box를 확인

메모리를 확인하면 keygen 에 관한 내용이 나오는 것을 확인할 수 있다. (문자열 검색에서도 확인 가능하다.)

D라는 값을 반환

함수의 매개변수에 적혀있는 버퍼의 주소로 들어가면, 필자가 입력한 시리얼 값을 불러온 것을 확인할 수 있었다.

 

wsprintfA 함수 실행

wsprintfA 함수를 실행시키자 매개변수인 CDFCFCF6 값을 형식화한 값을 00403284 주소의 버퍼에 적는다.

 

lctrcmpA 함수 실행

wsprintfA 함수를 통해 얻은 메모리 값과 필자가 입력한 비밀번호 123을 비교한다. 따라서 Name...CodeEngn 의 비밀번호가 3455909110 인 것을 알 수 있었다.

하지만 답이 아니라고 한다. (설마 Name... 때문인가 해서 다시 시도해보았다.)

 

입력값
Serial 값 발견

3265754874 라는 값과 필자가 입력한 123 이라는 값을 비교하는 것을 확인할 수 있다.

 

이전에 Serial 값을 인증받아 두번 성공했다는 메시지가 뜬다

Serial : 3265754874

 

반응형