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. 몰랐던 개념
'워게임 > 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 |
Uploaded by Notion2Tistory v1.1.0