ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Reversing] Reversing Me
    Wargame/HackCTF 2019. 11. 21. 23:17

     

    문제설명

    이 코드는 입력값을 xor과 %를 이용하여 serial값과 비교한 값들이 모두 같으면 "정답일세!"를 출력하는 코드이다.

    #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);
    	
    }

    접근방법

    XOR은 다음과 같은 공식이 성립한다.

    "A ^ [고정값] = B" 은 "B ^ [고정값] = A"과 같다.

    그러므로 다음이 성립하게 된다.

    "enter[i] ^ (i % 2) = serial[i]" 은 "serial[i] ^ (i % 2) = enter[i]" 가 같다.

    풀이

    코드를 조금 수정하여 풀어보았다.

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

    Get Flag!

    'Wargame > HackCTF' 카테고리의 다른 글

    [Reversing] Static  (0) 2019.12.04
    [Reversing] Keygen  (0) 2019.11.24
    [Reversing] strncmp  (0) 2019.11.21
    [Reversing] Handray  (0) 2019.11.21
    [Reversing] Welcome_REV  (0) 2019.11.21

    댓글

Designed by Tistory.