Thấy tip này cũng hay, nên share cho bà con làm RE và forensics, dính tới datetime trên Win và Unix.
Thấy con số 116,444,736,000,000,000 này quài, quen thuộc, trong nhiều source, mà éo hiểu tại sao.
Trên Windows, có 2 struct time chính, là SYSTEMTIME VÀ FILETIME.
SYSTEMTIME lưu rõ từng field ngày, tháng, năm, giờ phút giây theo UTC.
FILETIME là 1 qword 64bit lưu 100 nanosecond interval tính từ ngày 1 tháng 1 năm 1601, cũng UTC. Vd nó lưu 10 thì là 10 * 100 = 1000 nanoseconds từ 1/1/1601.
1 giây= 1,000 mili giây = 1,000,000 micro giây = 1,000,000,000 nano giây.
Còn dạn Dos datetime thì không có struct riêng, tính từ 1/1/1980.
Trên Windows, các bạn coder, re, forensic sẽ gặp và có các API chuyển đổi giữa UTC qua lại Local, FILETIME qua lại với SYSTEMTIME và Dos datetime.
File time (create/modify/access…) được Windows lưu xuống harddisk ở FILETIME.
Trong khi đó, trong C, thì datetime lại được biểu diển bởi kiểu time_t, là 1 qword 64bit, nhưng lại là số giây (second) tính từ ngày 1 tháng 1 1970.
Do vậy, nên những gì phát triển lên từ C đều đa số dùng kiểu time_t này cho datetime: Unix, kiểu time trong Python….
Vậy chuyển đổi 1 FILETIME trên Windows qua lại với time_t trên Unix, Python thì như thế nào.
Thì phải đụng tới con số 116,444,736,000,000,000 này. Nó chính là 100 nanoseconds interval chính xác giữa 1/1/1601 và 1/1/1970.
Các bạn đọc thêm ở blog này.
Vì hồi mới quay lại làm rờ, độ script giải mã con Nanocore .NET, đụng tới datetime này, mình éo hiểu, bỏ qua, cứ cho mày in ra con số.
Nay đang phân tích con mèo vừa rồi, lại thấy số này. Quyết tìm hiểu cho ra ngọn ngành.
Nên nay mạn phép share lên cho anh em coder/RE/forensic. Ai biết rồi thì thôi, ai chưa biết thì đọc.
https://sunshine2k.blogspot.com/2014/08/where-does-116444736000000000-come-from.html?fbclid=IwAR0MQ4fdZ1yG_m6t6lCn069d46r8I1PvOSeMApoLduBsGFog3raZL_eB4d8
Nguồn: viblo.asia