본문 바로가기

Reversing/CTF

CodeEngn Basic RCE 03 문제 풀이

디버거 : CheatEngine , x64dbg

분석환경 : Window 10

 

문제 내용

 

우선 해당 프로그램을 실행해봤습니다.

Nag 잔소리 메세지 출력

실행하자마자 메세지박스가 뜨네요.

일단 나중에 이 Nag 메세지를 안띄우게 하기로 하고

 

시리얼을 입력하여 성공 , 실패 여부를 받는 프로그램인것 같습니다.

 

키젠 프로그램

 

 

해당 프로그램의 패킹 여부와 EntryPoint를 확인해봤습니다.

언어는 Visual Basic으로 코딩됬고 EP는 00401168 , 패킹은 안되있는것 같습니다.

 

EP 부분 비주얼베이직으로 코딩된 프로그램은 대부분 이렇게 실행됨

 

 

 

프로그램을 실행하여

아무 문자나 입력하니 역시 실패 문구가 뜹니다.

우선 디버거로 열어서 해당 주소를 찾아야하니 문자열을 이용하여 찾아줍니다.

 

치트엔진의 파인드아웃 기능

우선 파인드아웃 기능을 사용하여 해당 문자열을 사용하는 주소를 추적하여 

주소를 찾아봤습니다.

 

 

해당 문자열을 담고 메세지박스를 띄우는 주소부분을 찾은것 같네요.

 

cmp로 문자열을 비교하는것을 확인

해당 스크롤을 위로 올려보니 패스워드(?)로 추측되는 문자열이 매개변수로 들어가네요.

 

우선 MSVBVM50._vbaStrCmp  함수를 구글에 검색해봤습니다.
문자열 비교 결과를 나타내는 정수를 반환하는 함수이고

 

반환되는 값을 확인 해보면

 

Return 값

매개변수 2개를 받고 해당 스트링을 비교하여 같으면 0을 반환하네요.

 

매개변수 2개 데이터 확인

 

후에 MSVBVM50._vbaStrCmp 함수 호출되는 반환값으로 성공 , 실패 여부를 짓는것 같습니다.

해당 분기 코드가 보이네요. 

 

 

패스워드로 추측되는 2G83G35Hs2 를 입력해보았습니다.

 

성공 메세지 출력

뒤로 Nag 메세지박스를 없애기 위해 x64dbg로 열어보겠습니다.

 

Nag 메세지박스가 출력되는 함수부분

동일한 방법으로 Nag 메세지를 띄우는 주소를 찾아줬습니다.

 

그냥 해당 함수 프롤로그로 이동하여 ret 명령어를 사용해줍시다.

 

ret 명령어는 이 함수를 호출하기전 다음 주소로 복귀하는 명령어입니다.

그럼 해당 함수 프롤로그에 ret으로 바꾸면 아무것도 하지않고 복귀하게 되므로

Nag 메세지창이 뜨지 않을 것이므로 패치후 프로그램을 저장 해줍시다.

프롤로그 ret
파일 패치

 

 

'Reversing > CTF' 카테고리의 다른 글

CodeEngn Basic RCE 06 문제 풀이  (0) 2022.05.07
CodeEngn Basic RCE 05 문제 풀이  (0) 2022.05.07
CodeEngn Basic RCE 04 문제 풀이  (0) 2022.05.07
CodeEngn Basic RCE 02 문제 풀이  (0) 2022.05.07
CodeEngn Basic RCE 01 문제 풀이  (0) 2022.05.07