-榮-

[CodeEngn] Basic RCE L03 (+α All intermodular calls) 본문

CodeEngn/Basic

[CodeEngn] Basic RCE L03 (+α All intermodular calls)

xii.xxv 2021. 3. 20. 22:53

 

● CodeEngn Basic RCE L03 문제

 

CodeEngn Basic RCE L03

 

 

C언어에서의 strcpy 같은 문자열 비교 함수가 비주얼 베이식에서는 어떤 이름인지 찾는 문제입니다.

주어진 파일을 분석하여 비주얼베이직에서의 스트링 비교 함수를 찾아봅시다.

 

 

◎ 파일 실행 화면

 

 

파일 실행 화면 및 확인 버튼 클릭 후 화면
password failed

 

 

우측 사진의 [Regcode]에 입력된 문자열과 파일 내부의 문자열을 비교하여 일치할 경우, 성공 MessageBox를 띄우는 것으로 추정됩니다.

"PASSWORT FALSCH !"를 기준으로 분기점을 찾으면 될것 같습니다.

 


 

● CodeEngn Basic RCE L03 풀이

 

디버거 - OllyDbg / 디버기 - 03.exe (Basic RCE L03 실행파일)

 

 

앞에서 추측한 "PASSWORT FALSCH !" 문자열을 찾아봅시다.

 

 

문자열 찾기
All referenced text strings

 

해당 문자열 위치로 이동하면 해당 화면이 나옵니다.

 

password failed string

 

실패로 떨어지는 분기점을 찾기 위해 화면을 올려보면 성공 문자열과 비교 문자열을 확인할 수 있습니다.

 

내부 비교 문자열 / 분기점 / 성공 문자열

 

004028BA에 BP[F2]를 걸고 실행[F9]하면 [EBP-58]에 입력받은 문자열("abcd")을 확인할 수 있으며, 입력받은 문자열과 "2G83G35Hs2"문자열을 vbaStrCmp 함수를 통해 문자열 비교하는 것을 확인할 수 있습니다.

 

문자열 비교

 

 


● CodeEngn Basic RCE L03 확인

 

 

password success

 

 

 


+α 함수를 알고 있다면...

 

◎ 함수 이름을 알고 있으며, 특정 부분의 함수를 찾을 때

[All intermodular calls]에서 파일에 로딩된 함수들을 확인할 수 있다.

 

All intermodular calls

 

[Destination]을 클릭하여 이름순으로 정렬 후 원하는 함수에서 [우클릭 > Set breakpoint on every call to [함수 이름]]을 클릭하면 모든 [함수 이름]에 BP가 걸린다.

 

원하는 함수에 BP 걸기

 

모든 vbaStrCmp 함수에 BP

 

 

이후 실행[F9]하면

 

 

vbaStrCmp 함수 중 004028C2

 

같은 [함수 이름]에서도 찾는 함수의 주소를 찾을 수 있다.