본문 바로가기

INTERTLUDE/리버싱 스터디

[리버싱 스터디]_1주차 Codeengn Basic RCE 3

Codeengn Basic RCE 3

Q. 비주얼베이직에서 스트링 비교함수 이름은?

 

 Immunity Debugger 통해서 파일을 ex.3 파일을 연다. 

F8 키를 눌러 실행하였더니, 위와 같은 화면이 나타나는 것을 볼 수 있었다. 

      Recode를 입력하는 창이 나타나서 임의로 0000을 입력하고 버튼을 클릭하였더니,                                                                        Error! 메시지가 출력됨을 확인할 수 있었다. 

어셈블리어가 아닌, 다른 곳에서도 힌트를 얻기 위해 우클릭 > Search For > All referenced text strings을 확인하였다. 

--> 해당 과정을 통해, UNICODE "2G83G35Hs2" 같은 문자열을 발견하게 되었다. 

      

 

  • 문자열 탐색: Search for → All referenced text strings → UNICODE "2G83G35Hs2" 발견.
  • 참조 코드로 이동: 해당 항목 더블클릭 → 디스어셈블리에서 PUSH 03.00401DDC(문자열 포인터 푸시) 확인.
  • 비교 함수 확인: Search for → All intermodular calls → __vbaStrCmp 항목 발견(호출 주소 004028C2).
  • 즉 이 코드 흐름은 하드코딩된 문자열의 포인터를 vbaStrCmp에 인자로 전달하여(문자열 → PUSH) 바로 비교(CALL)한다는 것을 의미함. 

  • Text strings에서 UNICODE "2G83G35Hs2"를 찾았고, 해당 문자열의 주소가 PUSH 0x00401DDC로 스택에 전달된 직후 CALL … __vbaStrCmp(0x004028C2)가 실행되는 것을 확인했다. 따라서 이 지점은 사용자 입력과 하드코딩된 문자열을    비교하는 인증 루틴임이 명확함을 확인할 수 있다. 
  • 실제로 Regcode에 2G83G35Hs2를 입력하면 "Danke, das Passwort ist richtig!" 성공 팝업이 뜨므로, 정적 분석 결과가    동작으로 검증되었다.

-> 문제 해결 완료 -!