리버싱

시스템 스터디 드램핵 문제

곽도우너 2024. 7. 1. 23:00

 

v11 = v6 ^ v7;

XOR 연산

snprintf(s, 9uLL, "%08x", v6 ^ v7);

XOR 결과를 16진수 문자열로 형식화하고 배열에 저장

s 형식 지정자는 **"%08x"**16진수가 8자로 표현되고 필요한 경우 0으로 채워지도록 보장

for (i = 0; i <= 7; ++i)
    s1[i] = s[7 - i];

배열의 문자 순서를 반대로 바꾸고 **s**결과를 배열에 저장

printf("Result: %s\\n", s1);

저장된 역방향 16진수 문자열을 인쇄

s2 = "a0b4c1d7";
if (!strcmp(s1, "a0b4c1d7"))
{puts("Congrats!");
}

s1 은 반전된 16진수 문자열과 "a0b4c1d7" 문자열을 비교

동일하면 "Congrats!"가 출력

→ **v6**및 값에 대해 비트별 XOR 연산을 수행 **v7**하고 결과를 역방향 16진수 문자열로 형식화한 다음 "a0b4c1d7" 문자열과 일치하는지 확인

v7을 구하기 위해 작성한 코드

#include <stdio.h>
#include <stdint.h>

int main() {
    const char *s2 = "a0b4c1d7";

    char result[9];
    for (int i = 0; i < 8; i++) {
        result[i] = s2[7 - i];
    }
    result[8] = '\\0';

    uint32_t v7;
    sscanf(result, "%x", &v7);
    v7 ^= 0x1e8cc2f0;

    printf("input: %u\\n", v7);

    return 0;
}
  1. for (int i = 0; i < 8; i++) { result[i] = s2[7 - i]; }: 반복문을 통해 문자열을 거꾸로 뒤집어 result 배열에 저장
  2. sscanf(result, "%x", &v7);: result에 저장된 문자열을 16진수로 읽어서 v7에 저장합니다. 즉, "7d1c4b0a"를 16진수로 변환하여 v7에 저장
  3. v7 ^= 0x1e8cc2f0;: XOR 연산자를 사용하여 v7의 값을 0x1e8cc2f0과 XOR 연산
  4. 최종적으로 계산된 v7 값을 출력합니다.