본문 바로가기

리버싱

[HackCTF]Reversing Me

code.c는 이렇다.

#include <stdio.h>
#include <string.h>

int main() {
	int i;
	char *serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}";
	char enter[54];
	printf("키를 입력하시게 : ");
	scanf("%s", enter);
	if (strlen(enter) == strlen(serial)) {
		for (i = 0; i < strlen(serial) && (enter[i] ^ (i % 2)) == serial[i]; i++);
		if (i - 1 == strlen(enter))
			printf("정답일세!\n");
	}
	else
		printf("그건 아닐세...\n");
		exit(0);
	
}

코드를 보면, enter는 우리가 입력한 키이다.

키와 시리얼의 길이가 같으면 for문을 돈다.

 

enter[i] ^ ( i % 2)를 보니 enter를 0또는 1로 xor 시키는 연산을 함을 확인했다.

그 후엔 정답인지를 출력하는 것을 볼 수 있다.

#include <stdio.h>
#include <string.h>

int main() {
	char *serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}";
	for (int i = 0; i < strlen(serial); i++)
	    printf("%c", serial[i]^(i%2));
}

그 연산을 코드로 작성해주면 되는 문제이다.

정답: HackCTF{hey_success_D0_y0u_kn0w_r3verse_3n9ineer1n9?}

반응형

'리버싱' 카테고리의 다른 글

[Reversing.kr]Easy Unpack  (0) 2020.08.16
[pwnable.kr]lotto  (0) 2020.08.15
[codeengn]코드엔진 Advance RCE L02  (0) 2020.08.13
[codeengn]코드엔진 Advance RCE L01  (0) 2020.08.12
[CodeEngn]코드엔진 Basic RCE L20  (0) 2020.08.09