![]()
#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 해쉬값 대문자’로 인증하면 클리어가 된다.
![]()