본문 바로가기

2. Reversing (리버싱)/1) Write UP

[2021.09.18] CodeEngn Basic RCE L03, L04 풀이

코드엔진 3

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

 

 

필요하다고 뜨는 dll을 설치하고 실행시켜보니 특정 창이 떴다. 확인 버튼을 누르니 뭔가 입력할 수 있는 창이 뜬다. 뭔가 입력해보니 error 창이 뜬다.

 

오른쪽 마우스 클릭 후 search for > all referenced text strings로 들어가 이 메시지 텍스트가 어디있는지 확인해보니 00402A69 에 있었다. 그리고 조금 위를 더 살펴보니 이 패스워드가 맞다고 하는 주소인 004028F5도 확인할 수 있었다.

그래서 어디서 성공메시지를 출력시키는지 따라가보니 다음과 같은 화면을 확인할 수 있었다. 살짝 위를 살펴보니 유니코드 2G83G35Hs2가 있었고. 그 다음줄에 vbaStrCmp라는 함수를 CALL한다는 사실을 알았다. , 2G83G35Hs2를 입력하면 저 함수를 호출하고 그게 올바른 비밀번호라는 뜻인 것 같았다.

실제로 맞다는 안내창이 떴다.

, 스트링 비교함수 이름은 vbaStrCmp이다.

 

 

 

코드엔진 4

이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가?

 

일단 어떻게 동작하는지 알아보기 위해 실행해봤는데, 특이한 점을 발견했다.

그냥 파일을 실행시키면 정상이 연속적으로 뜨고 올리디버거를 켜서 F9를 눌러 실행하면 계속 디버깅 당함만 연속적으로 뜬다.

 

올리디버거로 실행하면 정상메시지가 아니라 디버깅 당함메시지가 뜬다는 점을 알았고, 문제 내용을 통해 디버거를 탐지하는 함수가 있다는 걸 알았으니까

도대체 어디서부터 디버깅 당함이라는 메시지가 뜨는지 알고 싶어서 F8을 통해 코드를 한줄한줄 실행시켜 보았다.

그랬더니 주소 00408454에서 실행이 멈추고 디버깅 당함메시지가 연속으로 뜨기 시작했다.

그래서 보니 CALL 04.0040100F 라고 작성되어 있어 0040100F를 찾아가 보았다.

가보니 이번에는 JMP 04.00401030 이 적혀있었다그래서 다시 00401030 으로 가보니 PUSH EBP가 있었고 연속적으로 어떤 코드들이 있었다.

 

comment 부분에 있는 IsDebuggerPresent인가 싶어서 여기에 F2를 걸고 실행을 해봤더니 0040105E를 실행할 땐 EAX0이었는데 바로 다음인 00401064를 실행할 땐 EAX1이 되는 것을 확인할 수 있었다.

 

그래서 다음 코드를 실행할 때 1로 바뀌는 걸 다시 0으로 바꾸고 실행해보니까 정상으로 출력되는 것을 확인할 수 있었다.

따라서 정답은 IsDebuggerPresent 이다