[Reversing.kr] Easy Keygen

semon·2022년 11월 3일
0

Reversing

목록 보기
2/10

문제

reversing.kr의 두 번째 문제인 Easy Keygen 문제입니다.

해당 exe파일과 같이 들어있는 readME.txt를 보면 serial 5B134977135E7D13에 해당하는 Name을 찾으라고 합니다.

분석

IDA를 통해 문자열을 살펴보면 Correct 문자열이 있습니다. 해당 문자열이 있는 곳을 가보면 Serial을 만드는 부분이 있을 것입니다.

windbg로 해당 부분에 break point를 걸고 실행을 시켜보니

메모리에 마치 serial 같은 값이 생성되었고

값을 입력해보니 serial 값이 맞았습니다.

serial 값은 해당 부분을 통해서 생성되었고 중간에 반복을 하는 부분이 있습니다.

이 부분에서 0x10, 0x20, 0x30을 순서대로 [esp+10h], [esp+11h], [esp+12h]에 각각 저장합니다. 이때 esp의 값은 0x19fdfa입니다.

메모리를 보면 0x10,0x20,0x30이 저장되어 있고 그 이후에 Name으로 준 값이 저장되어 있습니다.

그 후 해당 부분을 보면 edx와 ecx를 xor 연산을 하는 부분이 보입니다. 또 이 부분이 반복이 되는 부분입니다.

이때 edx, ecx의 값은 각각 [esp+esi+0xc], [esp+ebp+0x10]이며 이는 각각 0x19fdf8(esp)+0x00(esi)+0xc = 0x19fe04, 0x19fdf8(esp)+0x0(ebp)+0x10 = 0x19fe08입니다.

이는 해당 메모리 부분으로 각각 0x10과 입력의 첫 번째 값을 xor 연산을 합니다.

그 후 각각 ebp, esi의 값을 1씩 증가시키므로 입력 값의 인덱스가 증가함에 따라 0x10, 0x20, 0x30과 xor 연산을 함을 알 수 있습니다. 이를 python으로 다음과 같이 작성하여 name을 구할 수 있습니다.

profile
보안을 공부합니다

0개의 댓글