리버싱
시스템 스터디 드램핵 문제
곽도우너
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;
}
- for (int i = 0; i < 8; i++) { result[i] = s2[7 - i]; }: 반복문을 통해 문자열을 거꾸로 뒤집어 result 배열에 저장
- sscanf(result, "%x", &v7);: result에 저장된 문자열을 16진수로 읽어서 v7에 저장합니다. 즉, "7d1c4b0a"를 16진수로 변환하여 v7에 저장
- v7 ^= 0x1e8cc2f0;: XOR 연산자를 사용하여 v7의 값을 0x1e8cc2f0과 XOR 연산
- 최종적으로 계산된 v7 값을 출력합니다.