상세 컨텐츠

본문 제목

[Reversing.kr] Easy Keygen

REVERSING/Reversing Study

by koharin 2021. 6. 1. 14:39

본문

728x90
반응형

따로 언패킹하지 않고 디컴파일러로 확인해본다.

EntryPoint에서 우클릭 다음을 찾기 → 현재 모듈 → 문자열 참조

Input Name 스트링에서 디스어셈블러에서 따라가기를 선택한다.

그럼 입력을 받는 어셈블리 코드를 확인할 수 있다.

이름을 입력받는다.

Serial 입력 전 반복문 구조를 확인할 수 있다.

esi를 0으로 초기화한 후 (xor esi, esi)

cmp esi, 3

jl easy keygen ~ 에서 esi >= 3 이면 esi 값을 0으로 초기화(xor esi, esi)한다.

따라서 i = 0부터 시작하고 반복문 안에서 조건문으로 i >= 3 이면 i = 0으로 만들 것이다.

i >= 3인 조건이 아니라면 xor ecx, edx를 해서 xor 연산을 한다.

esi에 따라 ecx는 0x10, 0x20, 0x30으로 증가하고 edx는 name의 처음부터 8자리 값까지 각각 가지고 있다.

따라서 0x10, 0x20, 0x30을 돌아가면서 name[0], name[1], .. 값과 xor 연산을 한 것이 serial이 된다.

serial은 ReadMe.txt에서 준 5B 13 49 77 13 5E 7D 13 으로, 16진수이므로 두 자리씩 끊어서 총 8자리로 name도 8자리이다.

IDA로 확인해보면 더 명확하게 serial이 구해지는 과정을 알 수 있다.

xor 연산 한 값을 sprintf 함수를 통해 serial이 저장되는 버퍼에 저장한다.

serial을 계산한 후 scanf로 입력받아서 동일한지 strcmp 함수로 비교한다.

 

name은 다음과 같이 구할 수 있다.

serial = [0x5B, 0x13, 0x49, 0x77, 0x13, 0x5E, 0x7D, 0x13]
xor = [0x10, 0x20, 0x30]
answer = []
j = 0
for i in range(len(serial)):
    if j == 3:
        j = 0
    answer.append(serial[i] ^ xor[j])
    j += 1
    print(chr(answer[i]), end='')

728x90
반응형

'REVERSING > Reversing Study' 카테고리의 다른 글

[CodeEngn] Basic RCE L14  (0) 2021.06.01
[CodeEngn] Basic RCE L13  (0) 2021.06.01
[Reversing.kr] Easy Crack  (0) 2021.05.25
CodeEngn Basic RCE L12  (0) 2021.05.23
CodeEngn Basic RCE L11  (0) 2021.05.23

관련글 더보기