HackCTF Write Up/Reversing

HackCTF Reversing Reversing Me Write Up

서원근양학계정 2021. 9. 19. 19:57

https://ctf.j0n9hyun.xyz/challenges

 

HackCTF

Do you wanna be a God? If so, Challenge!

ctf.j0n9hyun.xyz

 

이 문제는 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);
	
}

 

이 코드를 분석해보겠습니다.

일단 문자열을 입력받습니다.

입력한 문자열과 시리얼의 길이(53자)가 같으면 for문을 실행합니다.

for문은 53번 동안 입력한 문자열을 시리얼과 비교하는데

입력한 문자열의 배열 인덱스 % 2 값과 XOR한 값을 시리얼의 문자열과 비교합니다.

간단히 말하자면 입력한 문자열의 짝수번째 숫자를 1과 XOR해서

시리얼과 같으면 "정답일세!"가 출력되고 그것이 답이 됩니다.

 

이제 코드를 분석했으니 답을 구해보겠습니다.

#include <stdio.h>
int main() 
{
    int i;
    char serial [54] = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}";
    for(i=0;i<53;i++)
	{
		if(i%2==1)
		{
			serial[i]=serial[i]^1;
		}
	}
	printf("%s",serial);
	return 0;
}

저는 이런 식으로 코드를 짜서 답을 구해보았습니다.

 

답:{hey_success_D0_y0u_kn0w_r3verse_3n9ineer1n9?}

'HackCTF Write Up > Reversing' 카테고리의 다른 글

HackCTF Reversing Keygen Write Up  (0) 2021.09.20
HackCTF Reversing Strncmp Write Up  (1) 2021.09.19
HackCTF Reversing Handray Write Up  (0) 2021.09.19
HackCTF Reversing Welcome_REV Write Up  (0) 2021.09.19