[C언어] Data Conversion Tool - RawVera

◎ Timestamp 탭이 하는 일
- RawVera의 Timestamp 탭은 포렌식에서 자주 마주치는 날짜·시간 데이터를 서로 다른 형식으로 바꿔 주는 변환기입니다.
- 이미지에서 보이듯이 위쪽은 날짜 문자열을 다양한 타임스탬프로 Encode하는 영역이고, 아래쪽은 숫자·16진수·텍스트로 들어온 값을 다시 날짜로 풀어 보는 Decode to Date 영역입니다.
- 단순 변환기처럼 보이지만, 실제로는 Windows Filetime, Unix time, Apple 계열 시간, GPS, Chromium, OLE Automation, Twitter Snowflake, UUID 타임스탬프까지 폭넓게 다룹니다.
◎ 입력 방식과 화면 구성
- 이 탭의 장점은 입력 형식이 매우 다양하다는 점입니다.
- 상단 Date Input에는 yyyy-MM-dd HH:mm:ss.ff 같은 패턴을 기준으로 문자열을 넣을 수 있고, Pattern 드롭다운에서 자리수와 표기 방식을 바꿀 수 있습니다.
- 하단에서는 Value Input Format으로 숫자형, 16진수 little-endian, 16진수 big-endian, 텍스트, Base64를 고를 수 있으며, Value Text Input 칸에 직접 값을 넣으면 됩니다.
- 즉, 사람이 읽는 시간을 기계가 쓰는 값으로도, 반대로 포렌식 덤프 속 값도 바로 다룰 수 있습니다.
◎ 엔코딩 기능 살펴보기
- 상단의 Encode 기능은 현재 시간이나 직접 입력한 날짜를 여러 타입으로 바꾸는 역할을 합니다.
- 코드에서는 gStartupTime과 정밀 프랙션 값을 이용해 날짜를 조립하고, 패턴에 따라 yyyy-MM-dd, yyyy-MM-dd HH:mm, yyyy-MM-dd HH:mm:ss, 초 이하 소수점 자리수까지 확장한 형식을 생성합니다.
- 또한 요일 표기, AM/PM 표기, T 구분자 형식, .NET 스타일 타임스탬프까지 만들어 줄 수 있어 보고서용 문자열 생성에도 유용합니다.
◎ 시간대 처리와 정밀도
- 프랙션 처리도 꽤 세밀합니다. 코드에서는 100ns 단위의 정밀 시간을 기준으로 소수점 자릿수를 2자리부터 7자리까지 잘라 보여 주거나, 필요한 경우 반올림한 결과를 생성합니다.
- 이 때문에 단순히 초만 보는 것이 아니라 밀리초, 마이크로초 수준까지 고려한 날짜 표현이 가능합니다.
- 실제 로그에서 2026-06-21 18:37:46.08처럼 짧은 소수점이 필요한 경우에도 맞게 대응합니다.
◎ 실무 활용 포인트
- 중간의 Time Zone 옵션은 이 탭의 실무 가치를 크게 올려 줍니다.
- 상단 Encode 쪽과 하단 Decode 쪽 모두에서 Time Zone Adjustment를 선택할 수 있고, No TimeZone Adjustment뿐 아니라 지역 시간대나 UTC 기준 해석을 맞춰 볼 수 있습니다.
- 코드에서는 로컬 타임존 오프셋을 계산해 UTC와 지역 시각을 바꾸고, 출력 샘플에도 그 영향이 반영됩니다.
- 시간대가 섞인 로그를 다룰 때 이 기능이 없으면 해석이 틀어지기 쉬운데, 이 탭은 그 부분을 꽤 신경 쓴 편입니다.
◎ 디코딩 기능 살펴보기
- 하단 Decode to Date 영역은 포렌식 실무에서 특히 자주 쓰이실 만합니다.
- Windows Filetime, Unix seconds, Unix milliseconds, Unix microseconds, Apple Absolute Time, Apple HFS/HFS+, Chromium microseconds/milliseconds/seconds, GPS System Time, GPS Time, Microsoft Ticks, Nokia Series 30, OLE Automation, WebKit WallTime 같은 값들을 날짜로 되돌립니다.
- 숫자 입력만 넣어도 후보 포맷을 추정하고, 결과를 여러 형식으로 나열해 주는 방식이라 “이 값이 뭘 의미하는지” 빠르게 확인하기 좋습니다.
◎ 지원 포맷과 특수 형식
- 특수 포맷 판별 기능도 눈여겨볼 부분입니다.
- 코드에는 입력값의 범위, 길이, 문자 패턴을 보고 자동으로 별도 형식을 추정하는 로직이 들어 있습니다.
- 예를 들어 아주 큰 정수는 Twitter Snowflake로, 1601년 기준 범위에 맞는 값은 Windows Filetime으로, 1970년 전후나 이후 범위는 Unix time 계열로, 특정 길이의 16진수 값은 UUID timestamp나 SYSTEMTIME, MS-DOS 형식, BCD 형식으로 분류합니다.
- 즉, 사용자가 정확한 타입을 모르는 상태에서도 후보를 좁히는 데 도움이 됩니다.
- 16진수 입력은 little-endian과 big-endian을 모두 지원합니다.
- 코드에는 바이트 순서를 뒤집어 읽는 함수와 64비트·32비트 읽기 로직이 따로 있고, 포맷별로 LE와 BE 결과를 각각 출력합니다.
- 예를 들어 같은 8바이트 값이라도 Windows Filetime LE와 BE, Chromium LE와 BE, Unix seconds LE와 BE처럼 서로 다른 해석 결과를 비교할 수 있습니다.
- 덕분에 메모리 덤프나 네트워크 페이로드처럼 엔디안이 헷갈리기 쉬운 데이터에 강합니다.
- 텍스트 입력도 단순 문자열만 보는 것이 아닙니다.
- 코드에서는 Google URL EI 파라미터, Gmail MIME Boundary, Seagate Date Code, Windows Filetime을 텍스트 형태로 해석하는 루틴을 따로 둡니다.
- 예를 들어 Base64처럼 보이는 짧은 문자열이나, 하이픈이 들어간 UUID 형태 문자열, 혹은 특정 규칙의 5자리 날짜 코드까지 자동 판별합니다.
- 실제 악성코드 분석이나 로그 분석에서 “숫자처럼 보이지만 사실은 다른 코드”를 만나는 경우에 유용합니다.
◎ 정렬, 판별, 보조 로직
- 또 하나의 실용 포인트는 결과 정리 방식입니다.
- 코드에서는 결과 라인을 비교·정렬하는 로직이 있고, 라벨에서 공통 접미사나 분류어를 제거해 비교하기 쉽게 만듭니다.
- 그래서 출력창에 쌓이는 다양한 포맷 결과를 보기 좋게 정렬할 수 있고, 같은 계열의 결과를 나란히 비교하기가 쉬워집니다.
- 단일 변환 결과를 보여 주는 도구가 아니라, 여러 후보를 한 번에 놓고 보는 분석 도구에 가깝습니다.
- 상단 Output Sample과 하단 결과 영역은 사용자를 배려한 구조입니다.
- Encode를 실행하면 바로 예시 문자열이 바뀌고, Decode를 실행하면 숫자나 원시 값이 사람이 읽을 수 있는 날짜로 풀립니다.
- 코드에서는 입력 예시를 패턴에 맞춰 자동 생성하기 때문에, 현재 선택한 포맷이 어떤 모양인지 바로 감을 잡을 수 있습니다.
- 초보자도 실수 없이 포맷을 익히기 좋고, 숙련자도 빠르게 값 변환을 반복할 수 있습니다.
◎ 마무리
- 정리하면 RawVera Timestamp 탭은 날짜 문자열 입력, 패턴 선택, 엔코딩, 디코딩, 시간대 보정, 소수점 정밀도 처리, 숫자/16진수/텍스트/Base64 입력, 엔디안 변환, 특수 포맷 자동 판별, 결과 정렬, 샘플 출력까지 갖춘 포렌식용 시간 변환기입니다.
- 단순한 날짜 계산기가 아니라, 여러 로그와 덤프에서 섞여 들어오는 시간 값을 빠르게 해석하고 서로 다른 형식으로 대응시키는 실전 도구라고 보시면 됩니다.









