https://ctf.j0n9hyun.xyz/challenges
이 문제는 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 |