{"id":479570,"date":"2026-05-13T10:00:51","date_gmt":"2026-05-13T10:00:51","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=479570"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=479570","title":{"rendered":"\u0422\u0443\u043d\u043d\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 NTFS: \u043f\u043e\u0438\u0441\u043a USN Record \u0432 \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c50\/22d\/cd9\/c5022dcd9f0435aa5a8f206fffe39eae.png\" width=\"3114\" height=\"1743\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c50\/22d\/cd9\/c5022dcd9f0435aa5a8f206fffe39eae.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c50\/22d\/cd9\/c5022dcd9f0435aa5a8f206fffe39eae.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041d\u0430 \u0441\u0432\u044f\u0437\u0438 uFactor. <a href=\"https:\/\/habr.com\/ru\/companies\/usergate\/articles\/1001804\/\">\u0412 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439<\/a> \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043e \u0442\u0443\u043d\u043d\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b NTFS \u0438 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b\u0438 \u0442\u0435\u043c\u0443 \u043a\u0430\u0440\u0432\u0438\u043d\u0433\u0430. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u2014 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u2014 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 USN-\u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0432 \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438.    <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430: \u043c\u044b \u043f\u043e\u0434\u043c\u0435\u043d\u0438\u043b\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 <code>5ac761dd7e05df02eef0f0d7562f45c2.png<\/code>, \u0437\u0430\u043f\u0438\u0441\u0430\u0432 \u0432 \u043d\u0435\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438 \u0432 $MFT. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u0442\u0443\u043d\u043d\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0442\u0443\u043d\u043d\u0435\u043b\u044f \u2014 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430: file \u2192 new_file \u2192 file. \u0422\u0430\u043a\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 Reason \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 <code>RENAME_NEW_NAME<\/code> \u0438 <code>RENAME_OLD_NAME<\/code>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0437\u0430\u043f\u0438\u0441\u0438 USN-\u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/163\/928\/da9\/163928da9cbdccd93bc3f550f7257f60.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. \u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 USN-\u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0442\u0443\u043d\u043d\u0435\u043b\u0435\u043c\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. \u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 USN-\u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0442\u0443\u043d\u043d\u0435\u043b\u0435\u043c\" width=\"1472\" height=\"104\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/163\/928\/da9\/163928da9cbdccd93bc3f550f7257f60.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/163\/928\/da9\/163928da9cbdccd93bc3f550f7257f60.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. \u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 USN-\u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0442\u0443\u043d\u043d\u0435\u043b\u0435\u043c<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 1 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0424\u0430\u0439\u043b \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <code>5ac761dd7e05df02eef0f0d7562f45c21.png<\/code> \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p>\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0437\u0435\u043b\u0435\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e MFT Entry;<\/p>\n<p>\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0436\u0435\u043b\u0442\u044b\u043c \u2014 Sequence Number;<\/p>\n<p>\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u043a\u0440\u0430\u0441\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u2014 Parent Entry Number \u0438 Parent Sequence Number.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0444\u0430\u0439\u043b <code>5ac761dd7e05df02eef0f0d7562f45c2.png<\/code> \u0432 $MFT.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2c4\/089\/73d\/2c408973da0552f3e244a83d68cc1dbc.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. \u0424\u0430\u0439\u043b \u00ab5ac761dd7e05df02eef0f0d7562f45c2.png\u00bb \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043c\u0435\u043d\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. \u0424\u0430\u0439\u043b \u00ab5ac761dd7e05df02eef0f0d7562f45c2.png\u00bb \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043c\u0435\u043d\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e\" width=\"1152\" height=\"137\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/2c4\/089\/73d\/2c408973da0552f3e244a83d68cc1dbc.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2c4\/089\/73d\/2c408973da0552f3e244a83d68cc1dbc.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. \u0424\u0430\u0439\u043b \u00ab5ac761dd7e05df02eef0f0d7562f45c2.png\u00bb \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043c\u0435\u043d\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0440\u0430\u0432\u043d\u0438\u0442\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u0438 1 \u0438 2. \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, MFT Entry, Sequence Number, Parent Entry Number \u0438 Parent Sequence Number \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043c\u0435\u043d\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e. \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 3 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438 \u0441\u0432\u043e\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (\u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043e\u0434\u043c\u0435\u043d\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u2014 2025-11-01 14:31:30). \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e <code>MFTECmd<\/code> (<a href=\"https:\/\/ericzimmerman.github.io\/?ref=xranks#!index.md\">Eric Zimmerman&#8217;s tools<\/a>) \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u0435\u0441\u043b\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438 $SI \u0438 $FN \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442, \u0442\u043e \u0432 \u043f\u043e\u043b\u044f\u0445 \u0434\u043b\u044f 0x30 ($FN) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043f\u0443\u0441\u0442\u044b.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c07\/02c\/8c5\/c0702c8c57df17a13a575f623c7cdca9.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u0424\u0430\u0439\u043b \u00ab5ac761dd7e05df02eef0f0d7562f45c2.png\u00bb \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u0424\u0430\u0439\u043b \u00ab5ac761dd7e05df02eef0f0d7562f45c2.png\u00bb \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438\" width=\"1966\" height=\"119\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c07\/02c\/8c5\/c0702c8c57df17a13a575f623c7cdca9.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c07\/02c\/8c5\/c0702c8c57df17a13a575f623c7cdca9.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u0424\u0430\u0439\u043b \u00ab5ac761dd7e05df02eef0f0d7562f45c2.png\u00bb \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0432 USN Journal (Change Journal) \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043c\u043e\u0433\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0434\u0435\u043b\u044f\u043c\u0438 \u0438\u043b\u0438 \u043c\u0435\u0441\u044f\u0446\u0430\u043c\u0438 \u0434\u043b\u044f \u043d\u0438\u0437\u043a\u043e \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0438 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0447\u0430\u0441\u043e\u0432 \u0434\u043e 2 \u0434\u043d\u0435\u0439 \u0434\u043b\u044f \u0432\u044b\u0441\u043e\u043a\u043e \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445. \u0418 \u0431\u0435\u0437 \u044d\u0442\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u0443, \u043a\u0430\u043a \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 3, \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u0432 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>\u041d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u043a\u0438\u0440\u043f\u0438\u0447\u0438\u043a\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u0440\u0432\u0438\u043d\u0433 \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. <\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0444\u0430\u0439\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u0441 \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u0438\u0441\u043a\u0430 \u043b\u0438\u0431\u043e \u0441 \u0435\u0433\u043e \u043a\u043b\u043e\u043d\u0430 \u2014 \u0438\u043b\u0438 \u0436\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Autopsy (\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f) \u0438\u043b\u0438 X-Ways Forensics (\u043f\u043b\u0430\u0442\u043d\u043e\u0435).<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/333\/5ca\/0d3\/3335ca0d347dbf1e55fec8e7dd1548a1.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432 \u0444\u0430\u0439\u043b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Autopsy\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432 \u0444\u0430\u0439\u043b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Autopsy\" width=\"734\" height=\"374\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/333\/5ca\/0d3\/3335ca0d347dbf1e55fec8e7dd1548a1.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/333\/5ca\/0d3\/3335ca0d347dbf1e55fec8e7dd1548a1.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432 \u0444\u0430\u0439\u043b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Autopsy<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u043b\u044f \u043a\u0430\u0440\u0432\u0438\u043d\u0433\u0430 USN-\u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 \u043f\u043e\u0434\u043c\u0435\u043d\u043d\u044b\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u0430. \u041d\u0430\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0436\u0443\u0440\u043d\u0430\u043b USN \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u0434\u0432\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (ADS) \u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0412\u0441\u0435 \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u0446\u0435\u043b\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>$J($UsnJrnl:$J)<\/code>. \u041a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u0436\u0443\u0440\u043d\u0430\u043b\u0430 USN \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0436\u0443\u0440\u043d\u0430\u043b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0436\u0443\u0440\u043d\u0430\u043b\u0430 USN \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 <code>fsutil<\/code>.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0444\u0430\u0439\u043b <code>$J<\/code> \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u0438\u0441\u043a\u0430 (\u043a\u043b\u043e\u043d\u0430 \u0438 \u0442. \u043f.) \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Autopsy \u043b\u0438\u0431\u043e \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u0441 \u0436\u0438\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <code>KAPE<\/code>.<\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0435\u043c \u0444\u0430\u0439\u043b <code>$J<\/code> \u0432 hex-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0438 \u043d\u0430\u0439\u0434\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 <code>5ac761dd7e05df02eef0f0d7562f45c2.png<\/code> \u0438 <code>5ac761dd7e05df02eef0f0d7562f45c21.png<\/code>, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 <code>RENAME_NEW_NAME<\/code> \u0438 <code>RENAME_OLD_NAME<\/code>.    <\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/161\/f97\/c43\/161f97c43728a802a5a2202146166870.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 5. USN-\u0437\u0430\u043f\u0438\u0441\u0438\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 5. USN-\u0437\u0430\u043f\u0438\u0441\u0438\" width=\"564\" height=\"313\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/161\/f97\/c43\/161f97c43728a802a5a2202146166870.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/161\/f97\/c43\/161f97c43728a802a5a2202146166870.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 5. USN-\u0437\u0430\u043f\u0438\u0441\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 5. \u041e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 USN-\u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 Reason-\u043a\u043e\u0434\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Microsoft: <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/winioctl\/ns-winioctl-usn_record_v2\">USN_RECORD_V2 structure (winioctl.h)<\/a>, <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/winioctl\/ns-winioctl-usn_record_v3\">USN_RECORD_V3 structure (winioctl.h)<\/a>, <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/winioctl\/ns-winioctl-usn_record_v4\">USN_RECORD_V4 structure (winioctl.h)<\/a>. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c\u0441\u044f <code>USN_RECORD_V2<\/code>.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u043c 5. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0444\u0430\u0439\u043b\u0430 <code>5ac761dd7e05df02eef0f0d7562f45c2.png<\/code>. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u2014 <code>USN_RECORD_V2<\/code> (\u043f\u0435\u0440\u0432\u044b\u0435 56 \u0431\u0430\u0439\u0442). \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0442\u0438\u043f\u0430 V3 \u0438\u043c\u0435\u044e\u0442 \u0442\u0443 \u0436\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"center\">\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"center\">\u0420\u0430\u0437\u043c\u0435\u0440<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"center\">\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435   (hex)<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"center\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"left\">0x00<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">4<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"left\">88000000   (\u043a\u043e\u0440\u0438\u0447\u043d\u0435\u0432\u044b\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"left\">Record   Length\u00a0= 0x88 (136 \u0431\u0430\u0439\u0442)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"left\">0x04<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">2<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"left\">200 (\u0441\u0435\u0440\u044b\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"left\">Major   Version\u00a0= 2<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"left\">0x06<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">2<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"left\">0 (\u0441\u0435\u0440\u044b\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"left\">Minor   Version\u00a0= 0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"left\">0x08<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">8<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"left\">7D8A030000000500   (\u0437\u0435\u043b\u0435\u043d\u044b\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"left\">File Reference Number\u00a0= 0x00038A7D (MFT entry)   + 0x0500 (sequence)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"left\">0x10<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">8<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"left\">3CC9020000003500   (\u0436\u0435\u043b\u0442\u044b\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"left\">Parent File Reference Number\u00a0= 0x0002C93C   (parent MFT) + 0x3500 (sequence)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"left\">0x18<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">8<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"left\">88A0C41B00000000   (\u0433\u043e\u043b\u0443\u0431\u043e\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"left\">USN\u00a0=   0x000000001BC4A088<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"left\">0x20<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">8<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"left\">81C8FD363C4BDC01   (\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"left\">Timestamp\u00a0=   Windows FileTime<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"left\">0x28<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">4<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"left\">00100000 (\u0441\u0438\u043d\u0438\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"left\">Reason = 0x1000 = USN_REASON_RENAME_OLD_NAME<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"left\">0x2C<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">2<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"left\">0<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"left\">Source   Info\u00a0= 0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"left\">0x2E<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">2<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"left\">0<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"left\">SecurityId\u00a0=   0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"left\">0x30<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">4<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"left\">20000000<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"left\">File Attributes\u00a0= 0x20   =\u00a0FILE_ATTRIBUTE_ARCHIVE<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"left\">0x34<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">2<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"left\">4800 (\u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439   \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"left\">FileName Length\u00a0= 0x48 (72 \u0431\u0430\u0439\u0442, 36 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 UTF-16)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"left\">0x36<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">2<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"left\">3C00 (\u0447\u0435\u0440\u043d\u044b\u0439   \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"left\">FileName Offset =   0x3C (60 \u0431\u0430\u0439\u0442 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043f\u0438\u0441\u0438)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"left\">0x3C<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">72<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"left\">350061006300370036003100640064003700650030003500640066003000320065006500660030006600300064003700350036003200660034003500630032002E0070006E006700<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"left\">File Name \u0432 UTF-16LE: 5ac761dd7e05df02eef0f0d7562f45c2.png<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"105\" width=\"105\">\n<p align=\"left\">0x84<\/p>\n<\/td>\n<td data-colwidth=\"80\" width=\"80\">\n<p align=\"left\">4<\/p>\n<\/td>\n<td data-colwidth=\"184\" width=\"184\">\n<p align=\"left\">00000000<\/p>\n<\/td>\n<td data-colwidth=\"368\" width=\"368\">\n<p align=\"left\">Padding   (\u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0439:<\/p>\n<p>\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <code>7D8A030000000500<\/code> (\u0437\u0435\u043b\u0435\u043d\u044b\u0439 \u0446\u0432\u0435\u0442): little-endian \u2014 \u0447\u0438\u0442\u0430\u0435\u043c \u043a\u0430\u043a 0x00038A7D; \u0434\u043b\u044f MFT Entry \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432 DEC, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 232061. <\/p>\n<p>\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <code>3CC9020000003500<\/code> (\u0436\u0435\u043b\u0442\u044b\u0439 \u0446\u0432\u0435\u0442): little-endian \u2014 \u0447\u0438\u0442\u0430\u0435\u043c \u043a\u0430\u043a 0x0002C93C; \u0434\u043b\u044f Parent MFT Entry \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432 DEC, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 182588; 35 \u0432 DEC = 53.<\/p>\n<p>\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0414\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u043c. \u0440\u0438\u0441\u0443\u043d\u043e\u043a 1.<\/p>\n<p>\u0418\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442, \u0447\u0442\u043e <code>USN_REASON_RENAME_OLD_NAME=0x00001000<\/code>, \u0432 \u0444\u0430\u0439\u043b\u0435 0x00100000 (\u0441\u0438\u043d\u0438\u0439 \u0446\u0432\u0435\u0442) little-endian \u2014 \u0447\u0438\u0442\u0430\u0435\u043c \u043a\u0430\u043a 0x00001000.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0444\u0430\u0439\u043b\u0443 <code>5ac761dd7e05df02eef0f0d7562f45c21.png<\/code>. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u2014 <code>USN_RECORD_V2<\/code> (\u043f\u0435\u0440\u0432\u044b\u0435 56 \u0431\u0430\u0439\u0442).<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"center\">\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"center\">\u0420\u0430\u0437\u043c\u0435\u0440<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"center\">\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435   (hex)<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"center\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">0x00<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"left\">4<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"left\">88000000   (\u043a\u043e\u0440\u0438\u0447\u043d\u0435\u0432\u044b\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"left\">Record   Length\u00a0= 0x88 (136 \u0431\u0430\u0439\u0442)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">0x04<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"left\">2<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"left\">200 (\u0441\u0435\u0440\u044b\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"left\">Major   Version\u00a0= 2<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">0x06<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"left\">2<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"left\">0 (\u0441\u0435\u0440\u044b\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"left\">Minor   Version\u00a0= 0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">0x08<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"left\">8<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"left\">7D8A030000000500   (\u0437\u0435\u043b\u0435\u043d\u044b\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"left\">File Reference Number\u00a0= 0x00038A7D (MFT entry)   + 0x0500 (sequence)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">0x10<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"left\">8<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"left\">3CC9020000003500   (\u0436\u0435\u043b\u0442\u044b\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"left\">Parent File Reference Number\u00a0= 0x0002C93C   (parent MFT) + 0x3500 (sequence)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">0x18<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"left\">8<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"left\">10A1C41B00000000   (\u0433\u043e\u043b\u0443\u0431\u043e\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"left\">USN =   0x000000001BC4A110<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">0x20<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"left\">8<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"left\">81C8FD363C4BDC01   (\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"left\">Timestamp\u00a0=   Windows FileTime<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">0x28<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"left\">4<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"left\">00200000 (\u0441\u0438\u043d\u0438\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"left\">Reason = 0x2000 = USN_REASON_RENAME_NEW_NAME<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">0x2C<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"left\">2<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"left\">0<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"left\">Source   Info\u00a0= 0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">0x2E<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"left\">2<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"left\">0<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"left\">SecurityId\u00a0=   0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">0x30<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"left\">4<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"left\">20000000<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"left\">File Attributes\u00a0= 0x20   =\u00a0FILE_ATTRIBUTE_ARCHIVE<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">0x34<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"left\">2<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"left\">4A00 (\u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"left\">FileName Length = 0x4A (74 \u0431\u0430\u0439\u0442, 37 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 UTF-16)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">0x36<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"left\">2<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"left\">3C00 (\u0447\u0435\u0440\u043d\u044b\u0439 \u0446\u0432\u0435\u0442)<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"left\">FileName Offset =   0x3C (60 \u0431\u0430\u0439\u0442 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043f\u0438\u0441\u0438)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">0x3C<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"left\">74<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"left\">3500610063003700360031006400640037006500300035006400660030003200650065006600300066003000640037003500360032006600340035006300320031002E0070006E006700<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"left\">5ac761dd7e05df02eef0f0d7562f45c21.png<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"108\" width=\"108\">\n<p align=\"left\">0x86<\/p>\n<\/td>\n<td data-colwidth=\"83\" width=\"83\">\n<p align=\"left\">2<\/p>\n<\/td>\n<td data-colwidth=\"147\" width=\"147\">\n<p align=\"left\">0000<\/p>\n<\/td>\n<td data-colwidth=\"196\" width=\"196\">\n<p align=\"left\">Padding   (\u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0418\u0442\u0430\u043a, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430. \u041d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0432 \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u2014 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0441\u0443\u0437\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u044c, \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f, Reason, MFT Entry \u0438 Parent Entry. \u0418\u0441\u043a\u0430\u0442\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 Reason: <code>RENAME_NEW_NAME<\/code> \u0438 <code>RENAME_OLD_NAME<\/code>. <strong><em>\u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 USN-\u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/em><\/strong> \u0441 Reason <code>RENAME_NEW_NAME<\/code> \u0438 <code>RENAME_OLD_NAME<\/code> \u0432 \u0444\u0430\u0439\u043b\u0435 \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u0412\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b: JSON-\u0444\u0430\u0439\u043b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0438 CSV-\u0444\u0430\u0439\u043b \u0441 \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043d\u043e \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u043e\u043b\u044f \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430. <\/p>\n<details class=\"spoiler\">\n<summary>\u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 USN-\u0437\u0430\u043f\u0438\u0441\u0435\u0439 <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import structimport jsonimport csvfrom datetime import datetime, timedeltaimport osdef windows_filetime_to_datetime(filetime_bytes):    \"\"\"\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 8 \u0431\u0430\u0439\u0442 Windows FileTime \u0432 datetime\"\"\"    try:        value = struct.unpack('&lt;Q', filetime_bytes)[0]        if value == 0:            return None        epoch = datetime(1601, 1, 1)        microseconds = value \/\/ 10        return epoch + timedelta(microseconds=microseconds)    except:        return Nonedef is_relevant_date(dt):    \"\"\"    \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0434\u0430\u0442\u0430 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u043e\u0439    \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u0434\u0430\u0442\u044b \u0441 2010 \u043f\u043e 2030 \u0433\u043e\u0434    \"\"\"    if not dt:        return False    return 2010 &lt;= dt.year &lt;= 2030def has_invalid_filename_chars(filename):    \"\"\"\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430\"\"\"    if not filename:        return True            forbidden_chars = ['&lt;', '&gt;', ':', '\"', '\/', '\\\\', '|', '?', '*']    return any(char in filename for char in forbidden_chars)def is_valid_filename_length(bytes_to_read):    \"\"\"\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0447\u0442\u043e \u0434\u043b\u0438\u043d\u0430 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 0x1FE (510 \u0431\u0430\u0439\u0442) \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 UTF-16 LE 00 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\"\"\"    return bytes_to_read &lt;= 0x1FEdef is_printable_filename(filename):    \"\"\"\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043f\u0435\u0447\u0430\u0442\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432\"\"\"    if not filename:        return False        # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u043c\u043d\u043e\u0433\u043e \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438\u043b\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445)    if any(ord(c) &lt; 32 and c not in '\\t\\n\\r' for c in filename):        return False            # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u043f\u0435\u0447\u0430\u0442\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b    if not any(c.isprintable() for c in filename):        return False            return Truedef get_mft_entry_from_position(data, local_position, absolute_position):    \"\"\"    \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 MFT Entry Number \u043e\u0442\u0441\u0442\u0443\u043f\u0438\u0432 \u043e\u0442 \u0434\u0430\u0442\u044b \u043d\u0430 24 \u0431\u0430\u0439\u0442\u0430 \u0432\u0432\u0435\u0440\u0445    \"\"\"    # \u041e\u0442\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043d\u0430 24 \u0431\u0430\u0439\u0442\u0430 \u0432\u0432\u0435\u0440\u0445 \u043e\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0434\u0430\u0442\u044b (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0432 \u0447\u0430\u043d\u043a\u0435)    mft_local_position = local_position - 24        # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0442\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u0430\u044f \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0447\u0430\u043d\u043a\u0435    if mft_local_position &lt; 0 or mft_local_position + 7 &gt;= len(data):        return None        try:        # \u0427\u0438\u0442\u0430\u0435\u043c 4 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u044d\u0442\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a\u0430\u043a little-endian dword        mft_entry_bytes = data[mft_local_position:mft_local_position+4]        mft_entry = struct.unpack('&lt;I', mft_entry_bytes)[0]                # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0442\u043e MFT Entry \u0432 \u0440\u0430\u0437\u0443\u043c\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435        if 0 &lt;= mft_entry &lt;= 100000000:            return {                'position': absolute_position - 24,  # \u0410\u0411\u0421\u041e\u041b\u042e\u0422\u041d\u0410\u042f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432 \u0444\u0430\u0439\u043b\u0435                'mft_entry_bytes': mft_entry_bytes.hex().upper(),                'mft_entry': mft_entry            }    except:        pass        return Nonedef get_parent_entry_from_position(data, local_position, absolute_position):    \"\"\"    \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 Parent Entry \u043e\u0442\u0441\u0442\u0443\u043f\u0438\u0432 \u043e\u0442 \u0434\u0430\u0442\u044b \u043d\u0430 16 \u0431\u0430\u0439\u0442\u0430 \u0432\u0432\u0435\u0440\u0445    \"\"\"    # \u041e\u0442\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043d\u0430 16 \u0431\u0430\u0439\u0442\u0430 \u0432\u0432\u0435\u0440\u0445 \u043e\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0434\u0430\u0442\u044b (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0432 \u0447\u0430\u043d\u043a\u0435)    parent_local_position = local_position - 16        # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0442\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u0430\u044f \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0447\u0430\u043d\u043a\u0435    if parent_local_position &lt; 0 or parent_local_position + 7 &gt;= len(data):        return None        try:        # \u0427\u0438\u0442\u0430\u0435\u043c 4 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u044d\u0442\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a\u0430\u043a little-endian dword        parent_entry_bytes = data[parent_local_position:parent_local_position+4]        parent_entry = struct.unpack('&lt;I', parent_entry_bytes)[0]                # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0442\u043e Parent Entry \u0432 \u0440\u0430\u0437\u0443\u043c\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435        if 0 &lt;= parent_entry &lt;= 100000000:            return {                'position': absolute_position - 16,  # \u0410\u0411\u0421\u041e\u041b\u042e\u0422\u041d\u0410\u042f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432 \u0444\u0430\u0439\u043b\u0435                'parent_entry_bytes': parent_entry_bytes.hex().upper(),                'parent_entry': parent_entry            }    except:        pass        return Nonedef read_utf16_string(data, local_position, absolute_position):    \"\"\"    \u0427\u0438\u0442\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 UTF-16 LE:    1. \u041e\u0442 \u0434\u0430\u0442\u044b \u0432\u043f\u0435\u0440\u0435\u0434 24 \u0431\u0430\u0439\u0442\u0430, \u0447\u0438\u0442\u0430\u0435\u043c word (2 \u0431\u0430\u0439\u0442\u0430) - \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f    2. \u041e\u0442 \u0434\u0430\u0442\u044b \u0432\u043f\u0435\u0440\u0435\u0434 28 \u0431\u0430\u0439\u0442, \u0447\u0438\u0442\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442\u043e\u0432    3. \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0432 UTF-16 LE \u0441\u0442\u0440\u043e\u043a\u0443    \"\"\"    try:        # 1. \u041e\u0442 \u0434\u0430\u0442\u044b \u0432\u043f\u0435\u0440\u0435\u0434 24 \u0431\u0430\u0439\u0442\u0430 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0432 \u0447\u0430\u043d\u043a\u0435), \u0447\u0438\u0442\u0430\u0435\u043c word (2 \u0431\u0430\u0439\u0442\u0430)        length_local_position = local_position + 24        if length_local_position + 2 &gt; len(data):            return None                    length_bytes = data[length_local_position:length_local_position+2]        bytes_to_read = struct.unpack('&lt;H', length_bytes)[0]  # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f                # \u041f\u0420\u041e\u0412\u0415\u0420\u041a\u0410 \u0414\u041b\u0418\u041d\u042b: \u0435\u0441\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 0x1FE (510 \u0431\u0430\u0439\u0442) - \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c        if not is_valid_filename_length(bytes_to_read):            return None                # 2. \u041e\u0442 \u0434\u0430\u0442\u044b \u0432\u043f\u0435\u0440\u0435\u0434 28 \u0431\u0430\u0439\u0442 (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0432 \u0447\u0430\u043d\u043a\u0435), \u0447\u0438\u0442\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442\u043e\u0432        string_local_position = local_position + 28        string_end_position = string_local_position + bytes_to_read                if string_end_position &gt; len(data):            return None                    string_bytes = data[string_local_position:string_end_position]                # 3. \u0414\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u043c \u0438\u0437 UTF-16 LE        string_value = string_bytes.decode('utf-16le', errors='ignore').rstrip('\\x00')                # \u041f\u0420\u041e\u0412\u0415\u0420\u041a\u0410 \u0417\u0410\u041f\u0420\u0415\u0429\u0415\u041d\u041d\u042b\u0425 \u0421\u0418\u041c\u0412\u041e\u041b\u041e\u0412        if has_invalid_filename_chars(string_value):            return None                # \u041f\u0420\u041e\u0412\u0415\u0420\u041a\u0410 \u0427\u0418\u0422\u0410\u0415\u041c\u041e\u0421\u0422\u0418 \u0418\u041c\u0415\u041d\u0418        if not is_printable_filename(string_value):            return None                return {            'length_position': absolute_position + 24,  # \u0410\u0411\u0421\u041e\u041b\u042e\u0422\u041d\u0410\u042f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432 \u0444\u0430\u0439\u043b\u0435            'length_bytes': length_bytes.hex().upper(),            'bytes_to_read': bytes_to_read,            'string_position': absolute_position + 28,  # \u0410\u0411\u0421\u041e\u041b\u042e\u0422\u041d\u0410\u042f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432 \u0444\u0430\u0439\u043b\u0435            'string_value': string_value        }            except Exception as e:        return Nonedef find_datetime_patterns_in_file(filename, chunk_size=1024*1024*100):  # 100MB chunks    \"\"\"\u0418\u0449\u0435\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0447\u0430\u043d\u043a\u043e\u0432\"\"\"    results = []        with open(filename, 'rb') as f:        file_size = f.seek(0, 2)  # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430        f.seek(0)  # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u043e                print(f\"\u0420\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430: {file_size} \u0431\u0430\u0439\u0442\")                chunk_number = 0        position_offset = 0                while True:            # \u0427\u0438\u0442\u0430\u0435\u043c \u0447\u0430\u043d\u043a \u0441 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445            overlap = 32  # \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u0439 overlap \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432            read_size = chunk_size + overlap                        if position_offset &gt; 0:                f.seek(position_offset - overlap)            else:                f.seek(0)                            data = f.read(read_size)            if not data:                break                            actual_chunk_size = min(chunk_size, len(data))                        print(f\"\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0447\u0430\u043d\u043a\u0430 {chunk_number + 1} ({len(data)} \u0431\u0430\u0439\u0442)...\")                        # \u0418\u0449\u0435\u043c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0447\u0430\u043d\u043a\u0435            i = 0            while i &lt;= len(data) - 16 - (overlap if position_offset + i &gt;= chunk_size else 0):                date_bytes = data[i:i+8]                                # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c Reason code \u0432 little endian                if (i + 15 &lt; len(data) and                     data[i+8] == 0x00 and                     data[i+9] in (0x10, 0x20) and  # \u041c\u043b\u0430\u0434\u0448\u0438\u0435 \u0431\u0430\u0439\u0442\u044b Reason code                    all(b == 0x00 for b in data[i+10:i+12])):  # \u0421\u0442\u0430\u0440\u0448\u0438\u0435 \u0431\u0430\u0439\u0442\u044b Reason code (\u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c 00)                                        # \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430: \u0447\u0438\u0442\u0430\u0435\u043c \u043f\u043e\u043b\u043d\u044b\u0439 Reason code \u043a\u0430\u043a little endian                    reason_bytes = data[i+8:i+12]                    reason = struct.unpack('&lt;I', reason_bytes)[0]                                        # \u0424\u0418\u041b\u042c\u0422\u0420: \u0422\u041e\u041b\u042c\u041a\u041e RENAME_OLD_NAME \u0438 RENAME_NEW_NAME                    if reason not in (0x00001000, 0x00002000):                        i += 1                        continue                                        dt = windows_filetime_to_datetime(date_bytes)                                        if dt and is_relevant_date(dt):                        pattern_type = \"RENAME_OLD_NAME\" if reason == 0x00001000 else \"RENAME_NEW_NAME\"                        absolute_position = position_offset + i                                                # \u041f\u0415\u0420\u0415\u0414\u0410\u0415\u041c \u0410\u0411\u0421\u041e\u041b\u042e\u0422\u041d\u042b\u0415 \u041f\u041e\u0417\u0418\u0426\u0418\u0418 \u0412 \u0424\u0423\u041d\u041a\u0426\u0418\u0418                        mft_info = get_mft_entry_from_position(data, i, absolute_position)                        parent_info = get_parent_entry_from_position(data, i, absolute_position)                        string_info = read_utf16_string(data, i, absolute_position)                                                # \u0414\u041e\u0411\u0410\u0412\u041b\u042f\u0415\u041c \u0422\u041e\u041b\u042c\u041a\u041e \u0415\u0421\u041b\u0418 \u0415\u0421\u0422\u042c \u0412\u0410\u041b\u0418\u0414\u041d\u041e\u0415 \u0418\u041c\u042f \u0424\u0410\u0419\u041b\u0410                        if string_info and string_info['bytes_to_read'] &gt; 0:                            results.append({                                'position': absolute_position,                                'date_hex': ''.join(f'{b:02X}' for b in date_bytes),                                'datetime': dt,                                'pattern_type': pattern_type,                                'reason_code': f'{reason:08X}',                                'full_pattern': data[i:i+16].hex().upper(),                                'mft_info': mft_info,                                'parent_info': parent_info,                                'string_info': string_info                            })                                                # \u041b\u041e\u0413\u0418\u041a\u0410 \u041f\u0420\u041e\u041f\u0423\u0421\u041a\u0410                        if string_info and string_info['bytes_to_read'] &gt; 0:                            # \u0421\u0426\u0415\u041d\u0410\u0420\u0418\u0419 1: \u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d + \u0435\u0441\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430                            skip_bytes = 28 + string_info['bytes_to_read']                            # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u0430\u043d\u043d\u044b\u0445                            if i + skip_bytes &lt;= len(data):                                i += skip_bytes                            else:                                i += 16  # fallback                        else:                            # \u0421\u0426\u0415\u041d\u0410\u0420\u0418\u0419 2: \u041f\u043e\u043b\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0431\u0435\u0437 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0435 \u0438\u043c\u044f                            i += 16                        continue                                # \u0421\u0426\u0415\u041d\u0410\u0420\u0418\u0419 3-4: \u041f\u0430\u0442\u0442\u0435\u0440\u043d \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0418\u041b\u0418 \u043d\u0430\u0439\u0434\u0435\u043d \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e                # \u0414\u0432\u0438\u0433\u0430\u0435\u043c\u0441\u044f \u043f\u043e 1 \u0431\u0430\u0439\u0442\u0443 \u0434\u043b\u044f \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430                i += 1                                # \u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0432\u043d\u0443\u0442\u0440\u0438 \u0447\u0430\u043d\u043a\u0430                if i % (1024*1024) == 0:                    bytes_processed = position_offset + i                    progress = (bytes_processed \/ file_size) * 100 if file_size &gt; 0 else 0                    print(f\"\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e {bytes_processed} \u0431\u0430\u0439\u0442 ({progress:.1f}%)...\")                        # \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0447\u0430\u043d\u043a\u0443            position_offset += chunk_size            chunk_number += 1                        # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043b\u0438 \u043b\u0438 \u043a\u043e\u043d\u0446\u0430 \u0444\u0430\u0439\u043b\u0430            if position_offset &gt;= file_size:                break        return resultsdef save_to_json(results, filename):    \"\"\"\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 JSON \u0444\u0430\u0439\u043b\"\"\"    with open(filename, 'w', encoding='utf-8') as f:        json.dump(results, f, indent=2, ensure_ascii=False, default=str)    print(f\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432 {filename}\")def save_to_csv(results, filename):    \"\"\"\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 CSV \u0444\u0430\u0439\u043b\"\"\"    with open(filename, 'w', newline='', encoding='utf-8') as f:        writer = csv.writer(f)        writer.writerow(['MFT Entry', 'Parent Entry', 'File Name', 'Record Type', 'Reason Code', 'Windows Time'])                for result in results:            mft_entry = result['mft_info']['mft_entry'] if result['mft_info'] else 'N\/A'            parent_entry = result['parent_info']['parent_entry'] if result['parent_info'] else 'N\/A'            filename_str = result['string_info']['string_value'] if result['string_info'] else 'N\/A'            writer.writerow([mft_entry, parent_entry, filename_str, result['pattern_type'], result['reason_code'], result['datetime']])        print(f\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432 {filename}\")# \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430if __name__ == \"__main__\":    import sys        if len(sys.argv) &gt; 1:        filename = sys.argv[1]    else:        filename = input(\"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443: \")        try:        print(f\"\u0427\u0442\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430: {filename}\")        print(\"\u041f\u043e\u0438\u0441\u043a \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432: 8 \u0431\u0430\u0439\u0442 \u0434\u0430\u0442\u044b + RENAME_OLD_NAME (0x1000) \u0418\u041b\u0418 RENAME_NEW_NAME (0x2000)\")        print(\"\u0424\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f: \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u044b\u0435 \u0434\u0430\u0442\u044b (2010-2030 \u0433\u043e\u0434\u044b)\")        print(\"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438: \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0432 \u0438\u043c\u0435\u043d\u0430\u0445, \u0434\u043b\u0438\u043d\u0430 \u0438\u043c\u0435\u043d\u0438 \u2264 510 \u0431\u0430\u0439\u0442, \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0435 \u0438\u043c\u0435\u043d\u0430\")        print(\"\u0420\u0435\u0436\u0438\u043c: \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430\")        print(\"\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f: \u043f\u0440\u043e\u043f\u0443\u0441\u043a \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\\n\")                results = find_datetime_patterns_in_file(filename)                # \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u043e \u0442\u0438\u043f\u0430\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439        old_name_count = len([r for r in results if r['pattern_type'] == 'RENAME_OLD_NAME'])        new_name_count = len([r for r in results if r['pattern_type'] == 'RENAME_NEW_NAME'])                print(f\"   \u041d\u0430\u0439\u0434\u0435\u043d\u043e {len(results)} \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439:\")        print(f\"   RENAME_OLD_NAME: {old_name_count} \u0437\u0430\u043f\u0438\u0441\u0435\u0439\")        print(f\"   RENAME_NEW_NAME: {new_name_count} \u0437\u0430\u043f\u0438\u0441\u0435\u0439\")                # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 JSON (\u0422\u041e\u041b\u042c\u041a\u041e \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b)        save_to_json(results, 'CarverUSNREC.json')                # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 CSV (\u0422\u041e\u041b\u042c\u041a\u041e \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b)        save_to_csv(results, 'CarverUSNREC.csv')                print(\" \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430\")                except FileNotFoundError:        print(f\" \u0424\u0430\u0439\u043b {filename} \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\")    except Exception as e:        print(f\" \u041e\u0448\u0438\u0431\u043a\u0430: {e}\")<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043a\u0430\u0440\u0432\u0438\u043d\u0433\u0430 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f:<\/p>\n<p>\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0424\u0430\u0439\u043b \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 Reason: <code>RENAME_NEW_NAME<\/code> \u0438 <code>RENAME_OLD_NAME<\/code>.<\/p>\n<p>\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0412\u0440\u0435\u043c\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f Reason \u0443 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 15 \u0441\u0435\u043a.<\/p>\n<p>\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0412 \u044d\u0442\u043e\u043c \u0436\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043a\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0436\u0435 \u043f\u0430\u043f\u043a\u0435 (Parent Entry Number) \u0438 \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c MFT Entry \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b \u0441 \u043d\u043e\u0432\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c, \u043d\u043e \u0441 \u0442\u0435\u043c \u0436\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c \u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0442\u0435 \u0436\u0435 Reason: <code>RENAME_NEW_NAME<\/code> \u0438 <code>RENAME_OLD_NAME<\/code>.<\/p>\n<p>\u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c: \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043d\u0430\u0448\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0449\u0438\u0445 \u0438\u043b\u0438 \u043e\u043f\u0440\u043e\u0432\u0435\u0440\u0433\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0434\u043c\u0435\u043d\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e, \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434: \u00ab\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0444\u0430\u0439\u043b\u0443 \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\u00bb.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1034584\/\">https:\/\/habr.com\/ru\/articles\/1034584\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041d\u0430 \u0441\u0432\u044f\u0437\u0438 uFactor. \u0412 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043e \u0442\u0443\u043d\u043d\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b NTFS \u0438 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b\u0438 \u0442\u0435\u043c\u0443 \u043a\u0430\u0440\u0432\u0438\u043d\u0433\u0430. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u2014 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u2014 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 USN-\u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0432 \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438.    \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430: \u043c\u044b \u043f\u043e\u0434\u043c\u0435\u043d\u0438\u043b\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 5ac761dd7e05df02eef0f0d7562f45c2.png, \u0437\u0430\u043f\u0438\u0441\u0430\u0432 \u0432 \u043d\u0435\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438 \u0432 $MFT. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0442\u0435\u0445\u043d\u0438\u043a\u0443 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u0442\u0443\u043d\u043d\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0442\u0443\u043d\u043d\u0435\u043b\u044f \u2014 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430: file \u2192 new_file \u2192 file. \u0422\u0430\u043a\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 Reason \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 RENAME_NEW_NAME \u0438 RENAME_OLD_NAME.\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0437\u0430\u043f\u0438\u0441\u0438 USN-\u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f.\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. \u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 USN-\u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0442\u0443\u043d\u043d\u0435\u043b\u0435\u043c\u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 1 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0424\u0430\u0439\u043b \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 5ac761dd7e05df02eef0f0d7562f45c21.png \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0437\u0435\u043b\u0435\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e MFT Entry;\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0436\u0435\u043b\u0442\u044b\u043c \u2014 Sequence Number;\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u043a\u0440\u0430\u0441\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u2014 Parent Entry Number \u0438 Parent Sequence Number.\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0444\u0430\u0439\u043b 5ac761dd7e05df02eef0f0d7562f45c2.png \u0432 $MFT.\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. \u0424\u0430\u0439\u043b \u00ab5ac761dd7e05df02eef0f0d7562f45c2.png\u00bb \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043c\u0435\u043d\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e\u0421\u0440\u0430\u0432\u043d\u0438\u0442\u0435 \u0440\u0438\u0441\u0443\u043d\u043a\u0438 1 \u0438 2. \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, MFT Entry, Sequence Number, Parent Entry Number \u0438 Parent Sequence Number \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043c\u0435\u043d\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e. \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 3 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438 \u0441\u0432\u043e\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (\u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043e\u0434\u043c\u0435\u043d\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u2014 2025-11-01 14:31:30). \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e MFTECmd (Eric Zimmerman&#8217;s tools) \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u0435\u0441\u043b\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438 $SI \u0438 $FN \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442, \u0442\u043e \u0432 \u043f\u043e\u043b\u044f\u0445 \u0434\u043b\u044f 0x30 ($FN) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043f\u0443\u0441\u0442\u044b.\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u0424\u0430\u0439\u043b \u00ab5ac761dd7e05df02eef0f0d7562f45c2.png\u00bb \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0432 USN Journal (Change Journal) \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043c\u043e\u0433\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0434\u0435\u043b\u044f\u043c\u0438 \u0438\u043b\u0438 \u043c\u0435\u0441\u044f\u0446\u0430\u043c\u0438 \u0434\u043b\u044f \u043d\u0438\u0437\u043a\u043e \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0438 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0447\u0430\u0441\u043e\u0432 \u0434\u043e 2 \u0434\u043d\u0435\u0439 \u0434\u043b\u044f \u0432\u044b\u0441\u043e\u043a\u043e \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445. \u0418 \u0431\u0435\u0437 \u044d\u0442\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u0443, \u043a\u0430\u043a \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 3, \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u0432 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u0430.\u041d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u043a\u0438\u0440\u043f\u0438\u0447\u0438\u043a\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u0440\u0432\u0438\u043d\u0433 \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0444\u0430\u0439\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u0441 \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u0438\u0441\u043a\u0430 \u043b\u0438\u0431\u043e \u0441 \u0435\u0433\u043e \u043a\u043b\u043e\u043d\u0430 \u2014 \u0438\u043b\u0438 \u0436\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Autopsy (\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f) \u0438\u043b\u0438 X-Ways Forensics (\u043f\u043b\u0430\u0442\u043d\u043e\u0435).\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432 \u0444\u0430\u0439\u043b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Autopsy\u0414\u043b\u044f \u043a\u0430\u0440\u0432\u0438\u043d\u0433\u0430 USN-\u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 \u043f\u043e\u0434\u043c\u0435\u043d\u043d\u044b\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u0430. \u041d\u0430\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0436\u0443\u0440\u043d\u0430\u043b USN \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u0434\u0432\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 (ADS) \u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0412\u0441\u0435 \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u0446\u0435\u043b\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 $J($UsnJrnl:$J). \u041a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u0436\u0443\u0440\u043d\u0430\u043b\u0430 USN \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0436\u0443\u0440\u043d\u0430\u043b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0436\u0443\u0440\u043d\u0430\u043b\u0430 USN \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 fsutil.\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0444\u0430\u0439\u043b $J \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u0438\u0441\u043a\u0430 (\u043a\u043b\u043e\u043d\u0430 \u0438 \u0442. \u043f.) \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Autopsy \u043b\u0438\u0431\u043e \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u0441 \u0436\u0438\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b KAPE.\u041e\u0442\u043a\u0440\u043e\u0435\u043c \u0444\u0430\u0439\u043b $J \u0432 hex-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0438 \u043d\u0430\u0439\u0434\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 5ac761dd7e05df02eef0f0d7562f45c2.png \u0438 5ac761dd7e05df02eef0f0d7562f45c21.png, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 RENAME_NEW_NAME \u0438 RENAME_OLD_NAME.    \u0420\u0438\u0441\u0443\u043d\u043e\u043a 5. USN-\u0437\u0430\u043f\u0438\u0441\u0438\u041f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 5. \u041e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 USN-\u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 Reason-\u043a\u043e\u0434\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Microsoft: USN_RECORD_V2 structure (winioctl.h), USN_RECORD_V3 structure (winioctl.h), USN_RECORD_V4 structure (winioctl.h). \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c\u0441\u044f USN_RECORD_V2.\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u043c 5. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0444\u0430\u0439\u043b\u0430 5ac761dd7e05df02eef0f0d7562f45c2.png. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u2014 USN_RECORD_V2 (\u043f\u0435\u0440\u0432\u044b\u0435 56 \u0431\u0430\u0439\u0442). \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0442\u0438\u043f\u0430 V3 \u0438\u043c\u0435\u044e\u0442 \u0442\u0443 \u0436\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443.\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u0420\u0430\u0437\u043c\u0435\u0440\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435   (hex)\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u04350x00488000000   (\u043a\u043e\u0440\u0438\u0447\u043d\u0435\u0432\u044b\u0439 \u0446\u0432\u0435\u0442)Record   Length\u00a0= 0x88 (136 \u0431\u0430\u0439\u0442)0x042200 (\u0441\u0435\u0440\u044b\u0439 \u0446\u0432\u0435\u0442)Major   Version\u00a0= 20&#215;0620 (\u0441\u0435\u0440\u044b\u0439 \u0446\u0432\u0435\u0442)Minor   Version\u00a0= 00x0887D8A030000000500   (\u0437\u0435\u043b\u0435\u043d\u044b\u0439 \u0446\u0432\u0435\u0442)File Reference Number\u00a0= 0x00038A7D (MFT entry)   + 0x0500 (sequence)0x1083CC9020000003500   (\u0436\u0435\u043b\u0442\u044b\u0439 \u0446\u0432\u0435\u0442)Parent File Reference Number\u00a0= 0x0002C93C   (parent MFT) + 0x3500 (sequence)0x18888A0C41B00000000   (\u0433\u043e\u043b\u0443\u0431\u043e\u0439 \u0446\u0432\u0435\u0442)USN\u00a0=   0x000000001BC4A0880x20881C8FD363C4BDC01   (\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0446\u0432\u0435\u0442)Timestamp\u00a0=   Windows FileTime0x28400100000 (\u0441\u0438\u043d\u0438\u0439 \u0446\u0432\u0435\u0442)Reason = 0x1000 = USN_REASON_RENAME_OLD_NAME0x2C20Source   Info\u00a0= 00x2E20SecurityId\u00a0=   00x30420000000File Attributes\u00a0= 0x20   =\u00a0FILE_ATTRIBUTE_ARCHIVE0x3424800 (\u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439   \u0446\u0432\u0435\u0442)FileName Length\u00a0= 0x48 (72 \u0431\u0430\u0439\u0442, 36 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 UTF-16)0x3623C00 (\u0447\u0435\u0440\u043d\u044b\u0439   \u0446\u0432\u0435\u0442)FileName Offset =   0x3C (60 \u0431\u0430\u0439\u0442 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043f\u0438\u0441\u0438)0x3C72350061006300370036003100640064003700650030003500640066003000320065006500660030006600300064003700350036003200660034003500630032002E0070006E006700File Name \u0432 UTF-16LE: 5ac761dd7e05df02eef0f0d7562f45c2.png0x84400000000Padding   (\u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435)\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0439:\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 7D8A030000000500 (\u0437\u0435\u043b\u0435\u043d\u044b\u0439 \u0446\u0432\u0435\u0442): little-endian \u2014 \u0447\u0438\u0442\u0430\u0435\u043c \u043a\u0430\u043a 0x00038A7D; \u0434\u043b\u044f MFT Entry \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432 DEC, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 232061. \u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 3CC9020000003500 (\u0436\u0435\u043b\u0442\u044b\u0439 \u0446\u0432\u0435\u0442): little-endian \u2014 \u0447\u0438\u0442\u0430\u0435\u043c \u043a\u0430\u043a 0x0002C93C; \u0434\u043b\u044f Parent MFT Entry \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432 DEC, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 182588; 35 \u0432 DEC = 53.\u00b7\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u0414\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u043c. \u0440\u0438\u0441\u0443\u043d\u043e\u043a 1.\u0418\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442, \u0447\u0442\u043e USN_REASON_RENAME_OLD_NAME=0x00001000, \u0432 \u0444\u0430\u0439\u043b\u0435 0x00100000 (\u0441\u0438\u043d\u0438\u0439 \u0446\u0432\u0435\u0442) little-endian \u2014 \u0447\u0438\u0442\u0430\u0435\u043c \u043a\u0430\u043a 0x00001000.\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0444\u0430\u0439\u043b\u0443 5ac761dd7e05df02eef0f0d7562f45c21.png. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u2014 USN_RECORD_V2 (\u043f\u0435\u0440\u0432\u044b\u0435 56 \u0431\u0430\u0439\u0442).\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u0420\u0430\u0437\u043c\u0435\u0440\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435   (hex)\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u04350x00488000000   (\u043a\u043e\u0440\u0438\u0447\u043d\u0435\u0432\u044b\u0439 \u0446\u0432\u0435\u0442)Record   Length\u00a0= 0x88 (136 \u0431\u0430\u0439\u0442)0x042200 (\u0441\u0435\u0440\u044b\u0439 \u0446\u0432\u0435\u0442)Major   Version\u00a0= 20&#215;0620 (\u0441\u0435\u0440\u044b\u0439 \u0446\u0432\u0435\u0442)Minor   Version\u00a0= 00x0887D8A030000000500   (\u0437\u0435\u043b\u0435\u043d\u044b\u0439 \u0446\u0432\u0435\u0442)File Reference Number\u00a0= 0x00038A7D (MFT entry)   + 0x0500 (sequence)0x1083CC9020000003500   (\u0436\u0435\u043b\u0442\u044b\u0439 \u0446\u0432\u0435\u0442)Parent File Reference Number\u00a0= 0x0002C93C   (parent MFT) + 0x3500 (sequence)0x18810A1C41B00000000   (\u0433\u043e\u043b\u0443\u0431\u043e\u0439 \u0446\u0432\u0435\u0442)USN =   0x000000001BC4A1100x20881C8FD363C4BDC01   (\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0446\u0432\u0435\u0442)Timestamp\u00a0=   Windows FileTime0x28400200000 (\u0441\u0438\u043d\u0438\u0439 \u0446\u0432\u0435\u0442)Reason = 0x2000 = USN_REASON_RENAME_NEW_NAME0x2C20Source   Info\u00a0= 00x2E20SecurityId\u00a0=   00x30420000000File Attributes\u00a0= 0x20   =\u00a0FILE_ATTRIBUTE_ARCHIVE0x3424A00 (\u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439 \u0446\u0432\u0435\u0442)FileName Length = 0x4A (74 \u0431\u0430\u0439\u0442, 37 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 UTF-16)0x3623C00 (\u0447\u0435\u0440\u043d\u044b\u0439 \u0446\u0432\u0435\u0442)FileName Offset =   0x3C (60 \u0431\u0430\u0439\u0442 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043f\u0438\u0441\u0438)0x3C743500610063003700360031006400640037006500300035006400660030003200650065006600300066003000640037003500360032006600340035006300320031002E0070006E0067005ac761dd7e05df02eef0f0d7562f45c21.png0x8620000Padding   (\u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435)\u0418\u0442\u0430\u043a, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430. \u041d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0432 \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u2014 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0441\u0443\u0437\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u044c, \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f, Reason, MFT Entry \u0438 Parent Entry. \u0418\u0441\u043a\u0430\u0442\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 Reason: RENAME_NEW_NAME \u0438 RENAME_OLD_NAME. \u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 USN-\u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441 Reason RENAME_NEW_NAME \u0438 RENAME_OLD_NAME \u0432 \u0444\u0430\u0439\u043b\u0435 \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u0412\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b: JSON-\u0444\u0430\u0439\u043b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0438 CSV-\u0444\u0430\u0439\u043b \u0441 \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043d\u043e \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u043e\u043b\u044f \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430. \u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 USN-\u0437\u0430\u043f\u0438\u0441\u0435\u0439 import structimport jsonimport csvfrom datetime import datetime, timedeltaimport osdef windows_filetime_to_datetime(filetime_bytes):    &#171;&#187;&#187;\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 8 \u0431\u0430\u0439\u0442 Windows FileTime \u0432 datetime&#187;&#187;&#187;    try:        value = struct.unpack(&#8216;&lt;Q&#8217;, filetime_bytes)[0]        if value == 0:            return None        epoch = datetime(1601, 1, 1)        microseconds = value \/\/ 10        return epoch + timedelta(microseconds=microseconds)    except:        return Nonedef is_relevant_date(dt):    &#171;&#187;&#187;    \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0434\u0430\u0442\u0430 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u043e\u0439    \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u0434\u0430\u0442\u044b \u0441 2010 \u043f\u043e 2030 \u0433\u043e\u0434    &#171;&#187;&#187;    if not dt:        return False    return 2010 &lt;= dt.year &lt;= 2030def has_invalid_filename_chars(filename):    &#171;&#187;&#187;\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430&#187;&#187;&#187;    if not filename:        return True            forbidden_chars = [&#8216;&lt;&#8216;, &#8216;&gt;&#8217;, &#8216;:&#8217;, &#8216;&#187;&#8216;, &#8216;\/&#8217;, &#8216;\\\\&#8217;, &#8216;|&#8217;, &#8216;?&#8217;, &#8216;*&#8217;]    return any(char in filename for char in forbidden_chars)def is_valid_filename_length(bytes_to_read):    &#171;&#187;&#187;\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0447\u0442\u043e \u0434\u043b\u0438\u043d\u0430 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 0x1FE (510 \u0431\u0430\u0439\u0442) \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 UTF-16 LE 00 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c&#187;&#187;&#187;    return bytes_to_read &lt;= 0x1FEdef is_printable_filename(filename):    &#171;&#187;&#187;\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043f\u0435\u0447\u0430\u0442\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432&#187;&#187;&#187;    if not filename:        return False        # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u043c\u043d\u043e\u0433\u043e \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438\u043b\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445)    if any(ord(c) &lt; 32 and c not in &#8216;\\t\\n\\r&#8217; for c in filename):        return False            # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u043f\u0435\u0447\u0430\u0442\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b    if not any(c.isprintable() for c in filename):        return False            return Truedef get_mft_entry_from_position(data, local_position, absolute_position):    &#171;&#187;&#187;    \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 MFT Entry Number \u043e\u0442\u0441\u0442\u0443\u043f\u0438\u0432 \u043e\u0442 \u0434\u0430\u0442\u044b \u043d\u0430 24 \u0431\u0430\u0439\u0442\u0430 \u0432\u0432\u0435\u0440\u0445    &#171;&#187;&#187;    # \u041e\u0442\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043d\u0430 24 \u0431\u0430\u0439\u0442\u0430 \u0432\u0432\u0435\u0440\u0445 \u043e\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0434\u0430\u0442\u044b (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0432 \u0447\u0430\u043d\u043a\u0435)    mft_local_position = local_position &#8212; 24        # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0442\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432\u0430\u043b\u0438\u0434\u043d\u0430\u044f \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0447\u0430\u043d\u043a\u0435    if mft_local_position &lt; 0 or mft_local_position + 7 &gt;= len(data):        return None        try:        # \u0427\u0438\u0442\u0430\u0435\u043c 4 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u044d\u0442\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a\u0430\u043a little-endian dword        mft_entry_bytes = data[mft_local_position:mft_local_position+4]        mft_entry = struct.unpack(&#8216;&lt;I&#8217;, mft_entry_bytes)[0]                # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0442\u043e MFT Entry \u0432 \u0440\u0430\u0437\u0443\u043c\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435        if 0 &lt;= mft_entry &lt;= 100000000:            return {                &#8216;position&#8217;: absolute_position &#8212; 24,  # \u0410\u0411\u0421\u041e\u041b\u042e\u0422\u041d\u0410\u042f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432 \u0444\u0430\u0439\u043b\u0435                &#8216;mft_entry_bytes&#8217;: mft_entry_bytes.hex().upper(),   &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-479570","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/479570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=479570"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/479570\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=479570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=479570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=479570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}