블로그 이전했습니다. https://jeongzero.oopy.io/
[CodeEngine] Advance RCE L02
본문 바로가기
워게임/CodeEngn

[CodeEngine] Advance RCE L02

728x90

1. 문제


win10에서는 동작하지 않는다. win7에서 수행해야한다.

비밀번호를 찾으면 될듯

2. 접근방법


아이다에선 메인이 디컴파일이 안되서 기드라랑 같이 분석을 시작했다

문자열 기준으로 검색을 했을때 0x401d80함수에서 Enter password 를 사용한다. 저 함수는 단지 해당 문자열을 출력만 해줄 뿐 실제 입력은 받지 않는다

실제 입력은 0x402010함수에서 받는다.

'1234' 라고 입력했을 때 0x18f568에 저장되는 걸 볼 수 있다. 저기를 기준으로 분석을 시작하면 된다

3. 풀이


이어서 계속 분석해보자

사용자의 입력을 저장하고 루프를 돈다. 근데 입력값을 컨트롤 하는 로직은 아닌거 같다. 중요한 건 입력값을 키젠시키는 로직과 정답 비밀번호와 비교하는 부분을 찾아야한다. 저 루프를 벗어나자 일단.

그다음은 귀찮아서 traceoverbeyondtracerecord 기능을 이용하여 call 어셈만 확인하면서 입력값이 인자로 들어가는지를 확인해봤다. 커맨드는 다음과 같다

tobt dis.iscall(cip)==1

트레이싱을 하다보면 call edx 부분을 볼 수 있다. 여기서 두번째 인자에 입력 값이 들어간다. 원래는 0x18f568 에 초기에 저장되었지만 뭐 건너띈 로직에서 저곳에도 저장을 하나보다. 저 함수 내부 로직을 파악해보자

보면 입력 값을 통한 키젠 과정 따로없이 그대로 한바이트 씩 어떤 문자와 비교하는 걸 볼 수 있다

확인을 해보면 비교하는 문자열은 CRAAACKED! 이다. 이를 다시 입력으로 해서 첨부터 디버깅 해보자

조건을 다 만족시키면 msgbox를 호출한다. 내용은 Well Done이다.

4. 몰랐던 개념


728x90

'워게임 > CodeEngn' 카테고리의 다른 글

[CodeEngine] Advance RCE L04  (0) 2021.01.28
[CodeEngine] Advance RCE L03  (0) 2021.01.27
[CodeEngine] Advance RCE L01  (0) 2021.01.25
[CodeEngine] Malware Analysis L08  (0) 2021.01.23
[CodeEngine] Malware Analysis L07  (0) 2021.01.23