Basic RCE L14

hoon·2023년 6월 2일
0

CodeEngn

목록 보기
14/21

문제

Name이 CodeEngn 일때 Serial을 구하시오
(이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요)
Ex) 11111

실행화면

Name이 CodeEngn일 때 Serial이 일정한 패턴에 의해 생성되는 듯해 보인다.

Unpacking

UPX 패킹이 되어있다.

OEP -> 0x401000이니 가볍게 Unpacking을 해주자

IDA 분석

dword_403038 에 Name이 들어가고 byte_403138에 serial이 들어간다.
그 후 name에 따라 V5가 정해지고 sub_401383을 통해 입력한 serial이 일련의 연산작업을 거쳐 V5랑 같으면 성공 메시지를 보여준다.

sub_401383

입력한 serial의 길이만큼 반복문 시행
각 문자마다 -48 후 (문자열의 길이-1)만큼 x10을 반복한 후 그 값을 모두 더함

그 더한 값이 0x129A1이 되야함

정답

문제에서 5자리 숫자를 brute force 공격을 통해 알아내야 한다고 했으니
0~99999까지의 문자열을 모두 시도하면된다.

answer = 0x129A1
answer_list = []
for i in range(0,100000):
    serial = str(i).zfill(5)
    v1 = 0
    for idx, c in enumerate(serial):
        v5 = (ord(c) - 48)
        for j in range(5-idx-1):
            v5 *= 10
        v1 += v5

    if v1 == answer:
        print(serial)
        answer_list.append(serial)

print(answer_list)

그러면 딱 한가지 숫자가 나오는데 바로 76193이 된다.

0개의 댓글