L08 문제

#Advance RCE L08

Key 값이 5D88-53B4-52A87D27-1D0D-5B09 일때 Name은 무엇인가 힌트 : Name은 두자리인데.. 알파벳일수도 있고 숫자일수도 있고.. 정답인증은 Name의 MD5 해쉬값(대문자)

PEID로 먼저 열어보기로 했다.

델파이로 만들어진 프로그램인 것을 볼 수 있었고,

올리디버거로 열어봤다.

스트링검색부터 해보도록 하겠다.

저번 7번 문제가 상당히 골치아파서 역시 Advance 문제인가 했지만

성공메세지가 너무 쉽게 노출되는 것을 보고, 쉽게 클리어가 가능할 것이라고 에상했지만.. 힘들었다.

성공메세지와 실패메세지 위의 PUSH EBP에 BP를 걸고 실행했다.

폼에 키를 적고, 네임은 12으로 하여 체크를 했다.

위의 BP부분에서 걸렸고,

3글자 이상으로 입력하도록 된 것을 볼 수 있다.

이를 2로 수정하고, 파일을 저장하겠다.

2로 바뀐 것을 볼 수 있고,

F8을 눌러 실행을 하면 해당 부분에서 12에 해당하는 시리얼을 만드는 것을 알 수 있었다.

어떤식으로 시리얼을 만드는지 보도록 하겠다.

해당 부분에서 Name에 맞는 첫번째 4자리의 시리얼을 만드는 부분인 것 같다.

분석해보자면

MOV EBX,DWORD PTR SS:[EBP-4]  - EBX ebp-4 (12) 넣는다.

MOVZX ESI,BYTE PTR DS:[EBX+ECX-1] - ESI EBX+ECX-1(12)   1바이트(1) 넣는다.

ADD ESI,EDX - ESI+=EDX

IMUL ESI,ESI,772  - ESI*=772

MOV EDX,ESI - EDX ESI 값을 넣는다.

IMUL EDX,ESI - EDX ESI 값을 곱한다. ( EDX*=ESI )

ADD ESI,EDX - ESI+=EDX

OR ESI,ESI - ESI ESI OR연산 (2진수로 변환하여 진행)

IMUL ESI,ESI,474 - ESI*=474

ADD ESI,ESI - ESI+=ESI

MOV EDX,ESI - EDX ESI값을 넣는다.

INC ECX  - ECX++

DEC EAX - EAX--

JNZ SHORT 08_1.0045B89D 결과가 0 아니면 0045B89D 점프

간단하게 위의 분석으로 파이썬 코드를 짜봤다.

검색을 통해 찾고있는 5d88을 검색해봤다.

위의 글자를 입력했을때 5d88이 나오는 것을 알 수 있었고,

잘 인증이 되는지 확인해봤다.

인증이 되는 것을 볼 수 있었고,

‘MD5 해쉬값 대문자’로 인증하면 클리어가 된다.