polyfile-weave 0.5.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of polyfile-weave might be problematic. Click here for more details.

Files changed (585) hide show
  1. polyfile/__init__.py +15 -0
  2. polyfile/__main__.py +394 -0
  3. polyfile/arithmetic.py +27 -0
  4. polyfile/ast.py +114 -0
  5. polyfile/debugger.py +1039 -0
  6. polyfile/expressions.py +346 -0
  7. polyfile/fileutils.py +343 -0
  8. polyfile/html.py +135 -0
  9. polyfile/http/__init__.py +1 -0
  10. polyfile/http/defacto.py +37 -0
  11. polyfile/http/deprecated.py +51 -0
  12. polyfile/http/experimental.py +67 -0
  13. polyfile/http/http_11.py +548 -0
  14. polyfile/http/matcher.py +37 -0
  15. polyfile/http/structured_headers.py +48 -0
  16. polyfile/iterators.py +72 -0
  17. polyfile/jpeg.py +24 -0
  18. polyfile/kaitai/__init__.py +0 -0
  19. polyfile/kaitai/compiler.py +156 -0
  20. polyfile/kaitai/parser.py +312 -0
  21. polyfile/kaitai/parsers/__init__.py +0 -0
  22. polyfile/kaitai/parsers/aix_utmp.py +116 -0
  23. polyfile/kaitai/parsers/allegro_dat.py +367 -0
  24. polyfile/kaitai/parsers/andes_firmware.py +64 -0
  25. polyfile/kaitai/parsers/android_bootldr_asus.py +105 -0
  26. polyfile/kaitai/parsers/android_bootldr_huawei.py +181 -0
  27. polyfile/kaitai/parsers/android_bootldr_qcom.py +217 -0
  28. polyfile/kaitai/parsers/android_dto.py +138 -0
  29. polyfile/kaitai/parsers/android_img.py +319 -0
  30. polyfile/kaitai/parsers/android_nanoapp_header.py +83 -0
  31. polyfile/kaitai/parsers/android_opengl_shaders_cache.py +151 -0
  32. polyfile/kaitai/parsers/android_sparse.py +237 -0
  33. polyfile/kaitai/parsers/android_super.py +401 -0
  34. polyfile/kaitai/parsers/apm_partition_table.py +196 -0
  35. polyfile/kaitai/parsers/apple_single_double.py +180 -0
  36. polyfile/kaitai/parsers/asn1_der.py +235 -0
  37. polyfile/kaitai/parsers/au.py +138 -0
  38. polyfile/kaitai/parsers/avantes_roh60.py +112 -0
  39. polyfile/kaitai/parsers/avi.py +296 -0
  40. polyfile/kaitai/parsers/bcd.py +111 -0
  41. polyfile/kaitai/parsers/bitcoin_transaction.py +210 -0
  42. polyfile/kaitai/parsers/blender_blend.py +334 -0
  43. polyfile/kaitai/parsers/bmp.py +780 -0
  44. polyfile/kaitai/parsers/bson.py +411 -0
  45. polyfile/kaitai/parsers/btrfs_stream.py +318 -0
  46. polyfile/kaitai/parsers/bytes_with_io.py +27 -0
  47. polyfile/kaitai/parsers/chrome_pak.py +194 -0
  48. polyfile/kaitai/parsers/code_6502.py +456 -0
  49. polyfile/kaitai/parsers/compressed_resource.py +217 -0
  50. polyfile/kaitai/parsers/cpio_old_le.py +154 -0
  51. polyfile/kaitai/parsers/cramfs.py +344 -0
  52. polyfile/kaitai/parsers/creative_voice_file.py +342 -0
  53. polyfile/kaitai/parsers/dbf.py +274 -0
  54. polyfile/kaitai/parsers/dcmp_0.py +664 -0
  55. polyfile/kaitai/parsers/dcmp_1.py +422 -0
  56. polyfile/kaitai/parsers/dcmp_2.py +312 -0
  57. polyfile/kaitai/parsers/dcmp_variable_length_integer.py +66 -0
  58. polyfile/kaitai/parsers/dex.py +1086 -0
  59. polyfile/kaitai/parsers/dicom.py +4370 -0
  60. polyfile/kaitai/parsers/dime_message.py +201 -0
  61. polyfile/kaitai/parsers/dns_packet.py +569 -0
  62. polyfile/kaitai/parsers/doom_wad.py +654 -0
  63. polyfile/kaitai/parsers/dos_datetime.py +191 -0
  64. polyfile/kaitai/parsers/dos_mz.py +172 -0
  65. polyfile/kaitai/parsers/ds_store.py +513 -0
  66. polyfile/kaitai/parsers/dtb.py +310 -0
  67. polyfile/kaitai/parsers/dune_2_pak.py +126 -0
  68. polyfile/kaitai/parsers/edid.py +472 -0
  69. polyfile/kaitai/parsers/efivar_signature_list.py +331 -0
  70. polyfile/kaitai/parsers/elf.py +2482 -0
  71. polyfile/kaitai/parsers/ethernet_frame.py +114 -0
  72. polyfile/kaitai/parsers/exif.py +723 -0
  73. polyfile/kaitai/parsers/ext2.py +537 -0
  74. polyfile/kaitai/parsers/fallout2_dat.py +187 -0
  75. polyfile/kaitai/parsers/fallout_dat.py +156 -0
  76. polyfile/kaitai/parsers/fasttracker_xm_module.py +558 -0
  77. polyfile/kaitai/parsers/ftl_dat.py +90 -0
  78. polyfile/kaitai/parsers/genmidi_op2.py +161 -0
  79. polyfile/kaitai/parsers/gettext_mo.py +541 -0
  80. polyfile/kaitai/parsers/gif.py +492 -0
  81. polyfile/kaitai/parsers/gimp_brush.py +244 -0
  82. polyfile/kaitai/parsers/glibc_utmp.py +114 -0
  83. polyfile/kaitai/parsers/gltf_binary.py +132 -0
  84. polyfile/kaitai/parsers/google_protobuf.py +151 -0
  85. polyfile/kaitai/parsers/gpt_partition_table.py +175 -0
  86. polyfile/kaitai/parsers/gran_turismo_vol.py +140 -0
  87. polyfile/kaitai/parsers/grub2_font.py +337 -0
  88. polyfile/kaitai/parsers/gzip.py +232 -0
  89. polyfile/kaitai/parsers/hashcat_restore.py +60 -0
  90. polyfile/kaitai/parsers/hccap.py +111 -0
  91. polyfile/kaitai/parsers/hccapx.py +103 -0
  92. polyfile/kaitai/parsers/heaps_pak.py +177 -0
  93. polyfile/kaitai/parsers/heroes_of_might_and_magic_agg.py +116 -0
  94. polyfile/kaitai/parsers/heroes_of_might_and_magic_bmp.py +34 -0
  95. polyfile/kaitai/parsers/icmp_packet.py +136 -0
  96. polyfile/kaitai/parsers/ico.py +129 -0
  97. polyfile/kaitai/parsers/id3v1_1.py +220 -0
  98. polyfile/kaitai/parsers/id3v2_3.py +324 -0
  99. polyfile/kaitai/parsers/id3v2_4.py +423 -0
  100. polyfile/kaitai/parsers/ines.py +282 -0
  101. polyfile/kaitai/parsers/ipv4_packet.py +158 -0
  102. polyfile/kaitai/parsers/ipv6_packet.py +55 -0
  103. polyfile/kaitai/parsers/iso9660.py +544 -0
  104. polyfile/kaitai/parsers/java_class.py +1113 -0
  105. polyfile/kaitai/parsers/jpeg.py +361 -0
  106. polyfile/kaitai/parsers/luks.py +149 -0
  107. polyfile/kaitai/parsers/lzh.py +165 -0
  108. polyfile/kaitai/parsers/mac_os_resource_snd.py +493 -0
  109. polyfile/kaitai/parsers/mach_o.py +3033 -0
  110. polyfile/kaitai/parsers/mach_o_fat.py +92 -0
  111. polyfile/kaitai/parsers/magicavoxel_vox.py +391 -0
  112. polyfile/kaitai/parsers/manifest.json +1 -0
  113. polyfile/kaitai/parsers/mbr_partition_table.py +119 -0
  114. polyfile/kaitai/parsers/mcap.py +1015 -0
  115. polyfile/kaitai/parsers/microsoft_cfb.py +293 -0
  116. polyfile/kaitai/parsers/microsoft_network_monitor_v2.py +309 -0
  117. polyfile/kaitai/parsers/microsoft_pe.py +765 -0
  118. polyfile/kaitai/parsers/mifare_classic.py +706 -0
  119. polyfile/kaitai/parsers/minecraft_nbt.py +449 -0
  120. polyfile/kaitai/parsers/monomakh_sapr_chg.py +69 -0
  121. polyfile/kaitai/parsers/mozilla_mar.py +239 -0
  122. polyfile/kaitai/parsers/mp4.py +333 -0
  123. polyfile/kaitai/parsers/msgpack.py +467 -0
  124. polyfile/kaitai/parsers/nitf.py +1189 -0
  125. polyfile/kaitai/parsers/nt_mdt_pal.py +155 -0
  126. polyfile/kaitai/parsers/ogg.py +118 -0
  127. polyfile/kaitai/parsers/openpgp_message.py +993 -0
  128. polyfile/kaitai/parsers/packet_ppi.py +515 -0
  129. polyfile/kaitai/parsers/pcap.py +344 -0
  130. polyfile/kaitai/parsers/pcf_font.py +506 -0
  131. polyfile/kaitai/parsers/pcx.py +195 -0
  132. polyfile/kaitai/parsers/pcx_dcx.py +79 -0
  133. polyfile/kaitai/parsers/phar_without_stub.py +399 -0
  134. polyfile/kaitai/parsers/php_serialized_value.py +505 -0
  135. polyfile/kaitai/parsers/png.py +721 -0
  136. polyfile/kaitai/parsers/protocol_body.py +260 -0
  137. polyfile/kaitai/parsers/psx_tim.py +104 -0
  138. polyfile/kaitai/parsers/python_pickle.py +718 -0
  139. polyfile/kaitai/parsers/python_pyc_27.py +510 -0
  140. polyfile/kaitai/parsers/quake_mdl.py +441 -0
  141. polyfile/kaitai/parsers/quake_pak.py +112 -0
  142. polyfile/kaitai/parsers/quicktime_mov.py +634 -0
  143. polyfile/kaitai/parsers/rar.py +265 -0
  144. polyfile/kaitai/parsers/regf.py +569 -0
  145. polyfile/kaitai/parsers/renderware_binary_stream.py +877 -0
  146. polyfile/kaitai/parsers/resource_fork.py +611 -0
  147. polyfile/kaitai/parsers/respack.py +57 -0
  148. polyfile/kaitai/parsers/riff.py +409 -0
  149. polyfile/kaitai/parsers/rpm.py +964 -0
  150. polyfile/kaitai/parsers/rtcp_payload.py +579 -0
  151. polyfile/kaitai/parsers/rtp_packet.py +150 -0
  152. polyfile/kaitai/parsers/rtpdump.py +115 -0
  153. polyfile/kaitai/parsers/ruby_marshal.py +423 -0
  154. polyfile/kaitai/parsers/s3m.py +493 -0
  155. polyfile/kaitai/parsers/saints_row_2_vpp_pc.py +254 -0
  156. polyfile/kaitai/parsers/shapefile_index.py +174 -0
  157. polyfile/kaitai/parsers/shapefile_main.py +893 -0
  158. polyfile/kaitai/parsers/some_ip.py +209 -0
  159. polyfile/kaitai/parsers/some_ip_container.py +37 -0
  160. polyfile/kaitai/parsers/some_ip_sd.py +86 -0
  161. polyfile/kaitai/parsers/some_ip_sd_entries.py +160 -0
  162. polyfile/kaitai/parsers/some_ip_sd_options.py +374 -0
  163. polyfile/kaitai/parsers/specpr.py +404 -0
  164. polyfile/kaitai/parsers/sqlite3.py +472 -0
  165. polyfile/kaitai/parsers/ssh_public_key.py +252 -0
  166. polyfile/kaitai/parsers/standard_midi_file.py +390 -0
  167. polyfile/kaitai/parsers/stl.py +111 -0
  168. polyfile/kaitai/parsers/sudoers_ts.py +201 -0
  169. polyfile/kaitai/parsers/swf.py +406 -0
  170. polyfile/kaitai/parsers/systemd_journal.py +361 -0
  171. polyfile/kaitai/parsers/tcp_segment.py +57 -0
  172. polyfile/kaitai/parsers/tga.py +213 -0
  173. polyfile/kaitai/parsers/tls_client_hello.py +293 -0
  174. polyfile/kaitai/parsers/tr_dos_image.py +322 -0
  175. polyfile/kaitai/parsers/tsm.py +198 -0
  176. polyfile/kaitai/parsers/ttf.py +1847 -0
  177. polyfile/kaitai/parsers/udp_datagram.py +42 -0
  178. polyfile/kaitai/parsers/uefi_te.py +236 -0
  179. polyfile/kaitai/parsers/uimage.py +198 -0
  180. polyfile/kaitai/parsers/utf8_string.py +137 -0
  181. polyfile/kaitai/parsers/vfat.py +410 -0
  182. polyfile/kaitai/parsers/vlq_base128_be.py +104 -0
  183. polyfile/kaitai/parsers/vlq_base128_le.py +129 -0
  184. polyfile/kaitai/parsers/vmware_vmdk.py +167 -0
  185. polyfile/kaitai/parsers/vp8_ivf.py +112 -0
  186. polyfile/kaitai/parsers/warcraft_2_pud.py +423 -0
  187. polyfile/kaitai/parsers/wav.py +1014 -0
  188. polyfile/kaitai/parsers/websocket.py +167 -0
  189. polyfile/kaitai/parsers/windows_evt_log.py +304 -0
  190. polyfile/kaitai/parsers/windows_lnk_file.py +467 -0
  191. polyfile/kaitai/parsers/windows_minidump.py +575 -0
  192. polyfile/kaitai/parsers/windows_resource_file.py +243 -0
  193. polyfile/kaitai/parsers/windows_shell_items.py +190 -0
  194. polyfile/kaitai/parsers/windows_systemtime.py +52 -0
  195. polyfile/kaitai/parsers/wmf.py +502 -0
  196. polyfile/kaitai/parsers/xar.py +181 -0
  197. polyfile/kaitai/parsers/xwd.py +189 -0
  198. polyfile/kaitai/parsers/zip.py +685 -0
  199. polyfile/kaitai/parsers/zisofs.py +158 -0
  200. polyfile/kaitai/parsers/zx_spectrum_tap.py +184 -0
  201. polyfile/kaitaimatcher.py +113 -0
  202. polyfile/languagematcher.py +217 -0
  203. polyfile/logger.py +135 -0
  204. polyfile/magic.py +2983 -0
  205. polyfile/magic_defs/COPYING +29 -0
  206. polyfile/magic_defs/__init__.py +0 -0
  207. polyfile/magic_defs/acorn +102 -0
  208. polyfile/magic_defs/adi +13 -0
  209. polyfile/magic_defs/adventure +122 -0
  210. polyfile/magic_defs/aes +29 -0
  211. polyfile/magic_defs/algol68 +35 -0
  212. polyfile/magic_defs/allegro +9 -0
  213. polyfile/magic_defs/alliant +18 -0
  214. polyfile/magic_defs/alpha +32 -0
  215. polyfile/magic_defs/amanda +12 -0
  216. polyfile/magic_defs/amigaos +218 -0
  217. polyfile/magic_defs/android +259 -0
  218. polyfile/magic_defs/animation +1197 -0
  219. polyfile/magic_defs/aout +46 -0
  220. polyfile/magic_defs/apache +28 -0
  221. polyfile/magic_defs/apl +7 -0
  222. polyfile/magic_defs/apple +773 -0
  223. polyfile/magic_defs/application +7 -0
  224. polyfile/magic_defs/applix +13 -0
  225. polyfile/magic_defs/apt +52 -0
  226. polyfile/magic_defs/archive +2586 -0
  227. polyfile/magic_defs/aria +38 -0
  228. polyfile/magic_defs/arm +50 -0
  229. polyfile/magic_defs/asf +132 -0
  230. polyfile/magic_defs/assembler +18 -0
  231. polyfile/magic_defs/asterix +18 -0
  232. polyfile/magic_defs/att3b +41 -0
  233. polyfile/magic_defs/audio +1291 -0
  234. polyfile/magic_defs/avm +33 -0
  235. polyfile/magic_defs/basis +18 -0
  236. polyfile/magic_defs/beetle +7 -0
  237. polyfile/magic_defs/ber +65 -0
  238. polyfile/magic_defs/bflt +14 -0
  239. polyfile/magic_defs/bhl +10 -0
  240. polyfile/magic_defs/bioinformatics +178 -0
  241. polyfile/magic_defs/biosig +154 -0
  242. polyfile/magic_defs/blackberry +8 -0
  243. polyfile/magic_defs/blcr +25 -0
  244. polyfile/magic_defs/blender +50 -0
  245. polyfile/magic_defs/blit +24 -0
  246. polyfile/magic_defs/bm +10 -0
  247. polyfile/magic_defs/bout +11 -0
  248. polyfile/magic_defs/bsdi +33 -0
  249. polyfile/magic_defs/bsi +10 -0
  250. polyfile/magic_defs/btsnoop +13 -0
  251. polyfile/magic_defs/burp +7 -0
  252. polyfile/magic_defs/bytecode +41 -0
  253. polyfile/magic_defs/c-lang +110 -0
  254. polyfile/magic_defs/c64 +531 -0
  255. polyfile/magic_defs/cad +437 -0
  256. polyfile/magic_defs/cafebabe +107 -0
  257. polyfile/magic_defs/cbor +21 -0
  258. polyfile/magic_defs/ccf +14 -0
  259. polyfile/magic_defs/cddb +12 -0
  260. polyfile/magic_defs/chord +15 -0
  261. polyfile/magic_defs/cisco +12 -0
  262. polyfile/magic_defs/citrus +12 -0
  263. polyfile/magic_defs/clarion +27 -0
  264. polyfile/magic_defs/claris +48 -0
  265. polyfile/magic_defs/clipper +65 -0
  266. polyfile/magic_defs/clojure +30 -0
  267. polyfile/magic_defs/coff +98 -0
  268. polyfile/magic_defs/commands +201 -0
  269. polyfile/magic_defs/communications +22 -0
  270. polyfile/magic_defs/compress +461 -0
  271. polyfile/magic_defs/console +1213 -0
  272. polyfile/magic_defs/convex +69 -0
  273. polyfile/magic_defs/coverage +91 -0
  274. polyfile/magic_defs/cracklib +14 -0
  275. polyfile/magic_defs/crypto +31 -0
  276. polyfile/magic_defs/csv +8 -0
  277. polyfile/magic_defs/ctags +6 -0
  278. polyfile/magic_defs/ctf +23 -0
  279. polyfile/magic_defs/cubemap +8 -0
  280. polyfile/magic_defs/cups +56 -0
  281. polyfile/magic_defs/dact +11 -0
  282. polyfile/magic_defs/database +886 -0
  283. polyfile/magic_defs/dataone +47 -0
  284. polyfile/magic_defs/dbpf +15 -0
  285. polyfile/magic_defs/der +146 -0
  286. polyfile/magic_defs/diamond +12 -0
  287. polyfile/magic_defs/dif +33 -0
  288. polyfile/magic_defs/diff +41 -0
  289. polyfile/magic_defs/digital +59 -0
  290. polyfile/magic_defs/dolby +69 -0
  291. polyfile/magic_defs/dsf +25 -0
  292. polyfile/magic_defs/dump +96 -0
  293. polyfile/magic_defs/dwarfs +45 -0
  294. polyfile/magic_defs/dyadic +61 -0
  295. polyfile/magic_defs/ebml +8 -0
  296. polyfile/magic_defs/edid +11 -0
  297. polyfile/magic_defs/editors +43 -0
  298. polyfile/magic_defs/efi +15 -0
  299. polyfile/magic_defs/elf +379 -0
  300. polyfile/magic_defs/encore +22 -0
  301. polyfile/magic_defs/epoc +62 -0
  302. polyfile/magic_defs/erlang +21 -0
  303. polyfile/magic_defs/espressif +57 -0
  304. polyfile/magic_defs/esri +28 -0
  305. polyfile/magic_defs/etf +33 -0
  306. polyfile/magic_defs/fcs +9 -0
  307. polyfile/magic_defs/filesystems +2694 -0
  308. polyfile/magic_defs/finger +16 -0
  309. polyfile/magic_defs/firmware +133 -0
  310. polyfile/magic_defs/flash +62 -0
  311. polyfile/magic_defs/flif +36 -0
  312. polyfile/magic_defs/fonts +449 -0
  313. polyfile/magic_defs/forth +82 -0
  314. polyfile/magic_defs/fortran +9 -0
  315. polyfile/magic_defs/frame +62 -0
  316. polyfile/magic_defs/freebsd +164 -0
  317. polyfile/magic_defs/fsav +128 -0
  318. polyfile/magic_defs/fusecompress +12 -0
  319. polyfile/magic_defs/games +696 -0
  320. polyfile/magic_defs/gcc +17 -0
  321. polyfile/magic_defs/gconv +10 -0
  322. polyfile/magic_defs/gentoo +85 -0
  323. polyfile/magic_defs/geo +166 -0
  324. polyfile/magic_defs/geos +20 -0
  325. polyfile/magic_defs/gimp +77 -0
  326. polyfile/magic_defs/git +13 -0
  327. polyfile/magic_defs/glibc +21 -0
  328. polyfile/magic_defs/gnome +59 -0
  329. polyfile/magic_defs/gnu +173 -0
  330. polyfile/magic_defs/gnumeric +8 -0
  331. polyfile/magic_defs/gpt +240 -0
  332. polyfile/magic_defs/gpu +28 -0
  333. polyfile/magic_defs/grace +21 -0
  334. polyfile/magic_defs/graphviz +12 -0
  335. polyfile/magic_defs/gringotts +48 -0
  336. polyfile/magic_defs/guile +13 -0
  337. polyfile/magic_defs/hardware +12 -0
  338. polyfile/magic_defs/hitachi-sh +30 -0
  339. polyfile/magic_defs/hp +433 -0
  340. polyfile/magic_defs/human68k +26 -0
  341. polyfile/magic_defs/ibm370 +52 -0
  342. polyfile/magic_defs/ibm6000 +35 -0
  343. polyfile/magic_defs/icc +214 -0
  344. polyfile/magic_defs/iff +80 -0
  345. polyfile/magic_defs/images +4210 -0
  346. polyfile/magic_defs/inform +9 -0
  347. polyfile/magic_defs/intel +310 -0
  348. polyfile/magic_defs/interleaf +9 -0
  349. polyfile/magic_defs/island +10 -0
  350. polyfile/magic_defs/ispell +63 -0
  351. polyfile/magic_defs/isz +15 -0
  352. polyfile/magic_defs/java +52 -0
  353. polyfile/magic_defs/javascript +171 -0
  354. polyfile/magic_defs/jpeg +252 -0
  355. polyfile/magic_defs/json +8 -0
  356. polyfile/magic_defs/karma +9 -0
  357. polyfile/magic_defs/kde +11 -0
  358. polyfile/magic_defs/keepass +20 -0
  359. polyfile/magic_defs/kerberos +45 -0
  360. polyfile/magic_defs/kicad +85 -0
  361. polyfile/magic_defs/kml +34 -0
  362. polyfile/magic_defs/lammps +64 -0
  363. polyfile/magic_defs/lecter +6 -0
  364. polyfile/magic_defs/lex +12 -0
  365. polyfile/magic_defs/lif +50 -0
  366. polyfile/magic_defs/linux +557 -0
  367. polyfile/magic_defs/lisp +78 -0
  368. polyfile/magic_defs/llvm +22 -0
  369. polyfile/magic_defs/locoscript +12 -0
  370. polyfile/magic_defs/lua +31 -0
  371. polyfile/magic_defs/luks +126 -0
  372. polyfile/magic_defs/m4 +11 -0
  373. polyfile/magic_defs/mach +303 -0
  374. polyfile/magic_defs/macintosh +505 -0
  375. polyfile/magic_defs/macos +7 -0
  376. polyfile/magic_defs/magic +10 -0
  377. polyfile/magic_defs/magic.mgc +0 -0
  378. polyfile/magic_defs/mail.news +132 -0
  379. polyfile/magic_defs/make +21 -0
  380. polyfile/magic_defs/map +413 -0
  381. polyfile/magic_defs/maple +109 -0
  382. polyfile/magic_defs/marc21 +30 -0
  383. polyfile/magic_defs/mathcad +8 -0
  384. polyfile/magic_defs/mathematica +188 -0
  385. polyfile/magic_defs/matroska +17 -0
  386. polyfile/magic_defs/mcrypt +52 -0
  387. polyfile/magic_defs/measure +44 -0
  388. polyfile/magic_defs/mercurial +13 -0
  389. polyfile/magic_defs/metastore +8 -0
  390. polyfile/magic_defs/meteorological +53 -0
  391. polyfile/magic_defs/microfocus +21 -0
  392. polyfile/magic_defs/mime +9 -0
  393. polyfile/magic_defs/mips +120 -0
  394. polyfile/magic_defs/mirage +8 -0
  395. polyfile/magic_defs/misctools +140 -0
  396. polyfile/magic_defs/mkid +11 -0
  397. polyfile/magic_defs/mlssa +8 -0
  398. polyfile/magic_defs/mmdf +6 -0
  399. polyfile/magic_defs/modem +92 -0
  400. polyfile/magic_defs/modulefile +9 -0
  401. polyfile/magic_defs/motorola +71 -0
  402. polyfile/magic_defs/mozilla +37 -0
  403. polyfile/magic_defs/msdos +2304 -0
  404. polyfile/magic_defs/msooxml +68 -0
  405. polyfile/magic_defs/msvc +222 -0
  406. polyfile/magic_defs/msx +309 -0
  407. polyfile/magic_defs/mup +24 -0
  408. polyfile/magic_defs/music +17 -0
  409. polyfile/magic_defs/nasa +7 -0
  410. polyfile/magic_defs/natinst +24 -0
  411. polyfile/magic_defs/ncr +49 -0
  412. polyfile/magic_defs/neko +12 -0
  413. polyfile/magic_defs/netbsd +251 -0
  414. polyfile/magic_defs/netscape +26 -0
  415. polyfile/magic_defs/netware +11 -0
  416. polyfile/magic_defs/news +13 -0
  417. polyfile/magic_defs/nifty +202 -0
  418. polyfile/magic_defs/nim-lang +29 -0
  419. polyfile/magic_defs/nitpicker +14 -0
  420. polyfile/magic_defs/numpy +9 -0
  421. polyfile/magic_defs/oasis +12 -0
  422. polyfile/magic_defs/ocaml +14 -0
  423. polyfile/magic_defs/octave +6 -0
  424. polyfile/magic_defs/ole2compounddocs +760 -0
  425. polyfile/magic_defs/olf +98 -0
  426. polyfile/magic_defs/openfst +17 -0
  427. polyfile/magic_defs/opentimestamps +16 -0
  428. polyfile/magic_defs/oric +16 -0
  429. polyfile/magic_defs/os2 +186 -0
  430. polyfile/magic_defs/os400 +39 -0
  431. polyfile/magic_defs/os9 +80 -0
  432. polyfile/magic_defs/osf1 +10 -0
  433. polyfile/magic_defs/palm +156 -0
  434. polyfile/magic_defs/parix +13 -0
  435. polyfile/magic_defs/parrot +22 -0
  436. polyfile/magic_defs/pascal +39 -0
  437. polyfile/magic_defs/pbf +11 -0
  438. polyfile/magic_defs/pbm +8 -0
  439. polyfile/magic_defs/pc88 +24 -0
  440. polyfile/magic_defs/pc98 +77 -0
  441. polyfile/magic_defs/pci_ids +116 -0
  442. polyfile/magic_defs/pcjr +8 -0
  443. polyfile/magic_defs/pdf +51 -0
  444. polyfile/magic_defs/pdp +42 -0
  445. polyfile/magic_defs/perl +100 -0
  446. polyfile/magic_defs/pgf +52 -0
  447. polyfile/magic_defs/pgp +581 -0
  448. polyfile/magic_defs/pgp-binary-keys +388 -0
  449. polyfile/magic_defs/pkgadd +7 -0
  450. polyfile/magic_defs/plan9 +25 -0
  451. polyfile/magic_defs/playdate +57 -0
  452. polyfile/magic_defs/plus5 +18 -0
  453. polyfile/magic_defs/pmem +46 -0
  454. polyfile/magic_defs/polyfile_zip +5 -0
  455. polyfile/magic_defs/polyml +23 -0
  456. polyfile/magic_defs/printer +269 -0
  457. polyfile/magic_defs/project +10 -0
  458. polyfile/magic_defs/psdbms +14 -0
  459. polyfile/magic_defs/psl +14 -0
  460. polyfile/magic_defs/pulsar +13 -0
  461. polyfile/magic_defs/puzzle +17 -0
  462. polyfile/magic_defs/pwsafe +14 -0
  463. polyfile/magic_defs/pyramid +12 -0
  464. polyfile/magic_defs/python +305 -0
  465. polyfile/magic_defs/qt +30 -0
  466. polyfile/magic_defs/revision +66 -0
  467. polyfile/magic_defs/riff +840 -0
  468. polyfile/magic_defs/rinex +44 -0
  469. polyfile/magic_defs/ringdove +45 -0
  470. polyfile/magic_defs/rpi +52 -0
  471. polyfile/magic_defs/rpm +45 -0
  472. polyfile/magic_defs/rpmsg +7 -0
  473. polyfile/magic_defs/rst +11 -0
  474. polyfile/magic_defs/rtf +94 -0
  475. polyfile/magic_defs/ruby +55 -0
  476. polyfile/magic_defs/rust +21 -0
  477. polyfile/magic_defs/sc +7 -0
  478. polyfile/magic_defs/sccs +24 -0
  479. polyfile/magic_defs/scientific +144 -0
  480. polyfile/magic_defs/securitycerts +6 -0
  481. polyfile/magic_defs/selinux +24 -0
  482. polyfile/magic_defs/sendmail +37 -0
  483. polyfile/magic_defs/sequent +42 -0
  484. polyfile/magic_defs/sereal +35 -0
  485. polyfile/magic_defs/sgi +144 -0
  486. polyfile/magic_defs/sgml +161 -0
  487. polyfile/magic_defs/sharc +23 -0
  488. polyfile/magic_defs/sinclair +40 -0
  489. polyfile/magic_defs/sisu +18 -0
  490. polyfile/magic_defs/sketch +6 -0
  491. polyfile/magic_defs/smalltalk +25 -0
  492. polyfile/magic_defs/smile +34 -0
  493. polyfile/magic_defs/sniffer +482 -0
  494. polyfile/magic_defs/softquad +40 -0
  495. polyfile/magic_defs/sosi +40 -0
  496. polyfile/magic_defs/spec +21 -0
  497. polyfile/magic_defs/spectrum +184 -0
  498. polyfile/magic_defs/sql +288 -0
  499. polyfile/magic_defs/ssh +39 -0
  500. polyfile/magic_defs/ssl +20 -0
  501. polyfile/magic_defs/statistics +45 -0
  502. polyfile/magic_defs/subtitle +38 -0
  503. polyfile/magic_defs/sun +141 -0
  504. polyfile/magic_defs/svf +5 -0
  505. polyfile/magic_defs/sylk +36 -0
  506. polyfile/magic_defs/symbos +42 -0
  507. polyfile/magic_defs/sysex +429 -0
  508. polyfile/magic_defs/tcl +29 -0
  509. polyfile/magic_defs/teapot +6 -0
  510. polyfile/magic_defs/terminfo +63 -0
  511. polyfile/magic_defs/tex +141 -0
  512. polyfile/magic_defs/tgif +7 -0
  513. polyfile/magic_defs/ti-8x +239 -0
  514. polyfile/magic_defs/timezone +42 -0
  515. polyfile/magic_defs/tplink +95 -0
  516. polyfile/magic_defs/troff +38 -0
  517. polyfile/magic_defs/tuxedo +8 -0
  518. polyfile/magic_defs/typeset +8 -0
  519. polyfile/magic_defs/uf2 +72 -0
  520. polyfile/magic_defs/unicode +15 -0
  521. polyfile/magic_defs/unisig +12 -0
  522. polyfile/magic_defs/unknown +34 -0
  523. polyfile/magic_defs/usd +21 -0
  524. polyfile/magic_defs/uterus +16 -0
  525. polyfile/magic_defs/uuencode +28 -0
  526. polyfile/magic_defs/vacuum-cleaner +54 -0
  527. polyfile/magic_defs/varied.out +46 -0
  528. polyfile/magic_defs/varied.script +21 -0
  529. polyfile/magic_defs/vax +32 -0
  530. polyfile/magic_defs/vicar +17 -0
  531. polyfile/magic_defs/virtual +307 -0
  532. polyfile/magic_defs/virtutech +12 -0
  533. polyfile/magic_defs/visx +32 -0
  534. polyfile/magic_defs/vms +30 -0
  535. polyfile/magic_defs/vmware +6 -0
  536. polyfile/magic_defs/vorbis +155 -0
  537. polyfile/magic_defs/vxl +14 -0
  538. polyfile/magic_defs/warc +16 -0
  539. polyfile/magic_defs/weak +16 -0
  540. polyfile/magic_defs/web +18 -0
  541. polyfile/magic_defs/webassembly +17 -0
  542. polyfile/magic_defs/windows +1811 -0
  543. polyfile/magic_defs/wireless +7 -0
  544. polyfile/magic_defs/wordprocessors +630 -0
  545. polyfile/magic_defs/wsdl +23 -0
  546. polyfile/magic_defs/x68000 +25 -0
  547. polyfile/magic_defs/xdelta +13 -0
  548. polyfile/magic_defs/xenix +106 -0
  549. polyfile/magic_defs/xilinx +58 -0
  550. polyfile/magic_defs/xo65 +37 -0
  551. polyfile/magic_defs/xwindows +43 -0
  552. polyfile/magic_defs/yara +17 -0
  553. polyfile/magic_defs/zfs +96 -0
  554. polyfile/magic_defs/zilog +12 -0
  555. polyfile/magic_defs/zip +126 -0
  556. polyfile/magic_defs/zyxel +17 -0
  557. polyfile/nes.py +144 -0
  558. polyfile/nitf.py +15 -0
  559. polyfile/pdf.py +1264 -0
  560. polyfile/pickles.py +45 -0
  561. polyfile/polyfile.py +409 -0
  562. polyfile/profiling.py +115 -0
  563. polyfile/repl.py +624 -0
  564. polyfile/search.py +310 -0
  565. polyfile/serialization.py +323 -0
  566. polyfile/structmatcher.py +46 -0
  567. polyfile/structs.py +281 -0
  568. polyfile/templates/download.js +162 -0
  569. polyfile/templates/hexdump.css +268 -0
  570. polyfile/templates/hexdump.js +756 -0
  571. polyfile/templates/jquery-3.4.1.min.js +2 -0
  572. polyfile/templates/template.html +119 -0
  573. polyfile/wildcards.py +62 -0
  574. polyfile/zipmatcher.py +183 -0
  575. polyfile_weave-0.5.5.dist-info/METADATA +173 -0
  576. polyfile_weave-0.5.5.dist-info/RECORD +585 -0
  577. polyfile_weave-0.5.5.dist-info/WHEEL +5 -0
  578. polyfile_weave-0.5.5.dist-info/entry_points.txt +2 -0
  579. polyfile_weave-0.5.5.dist-info/licenses/LICENSE +202 -0
  580. polyfile_weave-0.5.5.dist-info/top_level.txt +2 -0
  581. polymerge/__init__.py +1 -0
  582. polymerge/__main__.py +296 -0
  583. polymerge/cfg.py +127 -0
  584. polymerge/polymerge.py +227 -0
  585. polymerge/polytracker.py +190 -0
@@ -0,0 +1,243 @@
1
+ # This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
2
+
3
+ from pkg_resources import parse_version
4
+ import kaitaistruct
5
+ from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
6
+ import collections
7
+ from enum import Enum
8
+
9
+
10
+ if parse_version(kaitaistruct.__version__) < parse_version('0.9'):
11
+ raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))
12
+
13
+ class WindowsResourceFile(KaitaiStruct):
14
+ """Windows resource file (.res) are binary bundles of
15
+ "resources". Resource has some sort of ID (numerical or string),
16
+ type (predefined or user-defined), and raw value. Resource files can
17
+ be seen standalone (as .res file), or embedded inside PE executable
18
+ (.exe, .dll) files.
19
+
20
+ Typical use cases include:
21
+
22
+ * providing information about the application (such as title, copyrights, etc)
23
+ * embedding icon(s) to be displayed in file managers into .exe
24
+ * adding non-code data into the binary, such as menus, dialog forms,
25
+ cursor images, fonts, various misc bitmaps, and locale-aware
26
+ strings
27
+
28
+ Windows provides special API to access "resources" from a binary.
29
+
30
+ Normally, resources files are created with `rc` compiler: it takes a
31
+ .rc file (so called "resource-definition script") + all the raw
32
+ resource binary files for input, and outputs .res file. That .res
33
+ file can be linked into an .exe / .dll afterwards using a linker.
34
+
35
+ Internally, resource file is just a sequence of individual resource
36
+ definitions. RC tool ensures that first resource (#0) is always
37
+ empty.
38
+ """
39
+ SEQ_FIELDS = ["resources"]
40
+ def __init__(self, _io, _parent=None, _root=None):
41
+ self._io = _io
42
+ self._parent = _parent
43
+ self._root = _root if _root else self
44
+ self._debug = collections.defaultdict(dict)
45
+
46
+ def _read(self):
47
+ self._debug['resources']['start'] = self._io.pos()
48
+ self.resources = []
49
+ i = 0
50
+ while not self._io.is_eof():
51
+ if not 'arr' in self._debug['resources']:
52
+ self._debug['resources']['arr'] = []
53
+ self._debug['resources']['arr'].append({'start': self._io.pos()})
54
+ _t_resources = WindowsResourceFile.Resource(self._io, self, self._root)
55
+ _t_resources._read()
56
+ self.resources.append(_t_resources)
57
+ self._debug['resources']['arr'][len(self.resources) - 1]['end'] = self._io.pos()
58
+ i += 1
59
+
60
+ self._debug['resources']['end'] = self._io.pos()
61
+
62
+ class Resource(KaitaiStruct):
63
+ """Each resource has a `type` and a `name`, which can be used to
64
+ identify it, and a `value`. Both `type` and `name` can be a
65
+ number or a string.
66
+
67
+ .. seealso::
68
+ Source - https://learn.microsoft.com/en-us/windows/win32/menurc/resourceheader
69
+ """
70
+
71
+ class PredefTypes(Enum):
72
+ cursor = 1
73
+ bitmap = 2
74
+ icon = 3
75
+ menu = 4
76
+ dialog = 5
77
+ string = 6
78
+ fontdir = 7
79
+ font = 8
80
+ accelerator = 9
81
+ rcdata = 10
82
+ messagetable = 11
83
+ group_cursor = 12
84
+ group_icon = 14
85
+ version = 16
86
+ dlginclude = 17
87
+ plugplay = 19
88
+ vxd = 20
89
+ anicursor = 21
90
+ aniicon = 22
91
+ html = 23
92
+ manifest = 24
93
+ SEQ_FIELDS = ["value_size", "header_size", "type", "name", "padding1", "format_version", "flags", "language", "value_version", "characteristics", "value", "padding2"]
94
+ def __init__(self, _io, _parent=None, _root=None):
95
+ self._io = _io
96
+ self._parent = _parent
97
+ self._root = _root if _root else self
98
+ self._debug = collections.defaultdict(dict)
99
+
100
+ def _read(self):
101
+ self._debug['value_size']['start'] = self._io.pos()
102
+ self.value_size = self._io.read_u4le()
103
+ self._debug['value_size']['end'] = self._io.pos()
104
+ self._debug['header_size']['start'] = self._io.pos()
105
+ self.header_size = self._io.read_u4le()
106
+ self._debug['header_size']['end'] = self._io.pos()
107
+ self._debug['type']['start'] = self._io.pos()
108
+ self.type = WindowsResourceFile.UnicodeOrId(self._io, self, self._root)
109
+ self.type._read()
110
+ self._debug['type']['end'] = self._io.pos()
111
+ self._debug['name']['start'] = self._io.pos()
112
+ self.name = WindowsResourceFile.UnicodeOrId(self._io, self, self._root)
113
+ self.name._read()
114
+ self._debug['name']['end'] = self._io.pos()
115
+ self._debug['padding1']['start'] = self._io.pos()
116
+ self.padding1 = self._io.read_bytes(((4 - self._io.pos()) % 4))
117
+ self._debug['padding1']['end'] = self._io.pos()
118
+ self._debug['format_version']['start'] = self._io.pos()
119
+ self.format_version = self._io.read_u4le()
120
+ self._debug['format_version']['end'] = self._io.pos()
121
+ self._debug['flags']['start'] = self._io.pos()
122
+ self.flags = self._io.read_u2le()
123
+ self._debug['flags']['end'] = self._io.pos()
124
+ self._debug['language']['start'] = self._io.pos()
125
+ self.language = self._io.read_u2le()
126
+ self._debug['language']['end'] = self._io.pos()
127
+ self._debug['value_version']['start'] = self._io.pos()
128
+ self.value_version = self._io.read_u4le()
129
+ self._debug['value_version']['end'] = self._io.pos()
130
+ self._debug['characteristics']['start'] = self._io.pos()
131
+ self.characteristics = self._io.read_u4le()
132
+ self._debug['characteristics']['end'] = self._io.pos()
133
+ self._debug['value']['start'] = self._io.pos()
134
+ self.value = self._io.read_bytes(self.value_size)
135
+ self._debug['value']['end'] = self._io.pos()
136
+ self._debug['padding2']['start'] = self._io.pos()
137
+ self.padding2 = self._io.read_bytes(((4 - self._io.pos()) % 4))
138
+ self._debug['padding2']['end'] = self._io.pos()
139
+
140
+ @property
141
+ def type_as_predef(self):
142
+ """Numeric type IDs in range of [0..0xff] are reserved for
143
+ system usage in Windows, and there are some predefined,
144
+ well-known values in that range. This instance allows to get
145
+ it as enum value, if applicable.
146
+ """
147
+ if hasattr(self, '_m_type_as_predef'):
148
+ return self._m_type_as_predef if hasattr(self, '_m_type_as_predef') else None
149
+
150
+ if ((not (self.type.is_string)) and (self.type.as_numeric <= 255)) :
151
+ self._m_type_as_predef = KaitaiStream.resolve_enum(WindowsResourceFile.Resource.PredefTypes, self.type.as_numeric)
152
+
153
+ return self._m_type_as_predef if hasattr(self, '_m_type_as_predef') else None
154
+
155
+
156
+ class UnicodeOrId(KaitaiStruct):
157
+ """Resources use a special serialization of names and types: they
158
+ can be either a number or a string.
159
+
160
+ Use `is_string` to check which kind we've got here, and then use
161
+ `as_numeric` or `as_string` to get relevant value.
162
+ """
163
+ SEQ_FIELDS = ["first", "as_numeric", "rest", "noop"]
164
+ def __init__(self, _io, _parent=None, _root=None):
165
+ self._io = _io
166
+ self._parent = _parent
167
+ self._root = _root if _root else self
168
+ self._debug = collections.defaultdict(dict)
169
+
170
+ def _read(self):
171
+ if self.save_pos1 >= 0:
172
+ self._debug['first']['start'] = self._io.pos()
173
+ self.first = self._io.read_u2le()
174
+ self._debug['first']['end'] = self._io.pos()
175
+
176
+ if not (self.is_string):
177
+ self._debug['as_numeric']['start'] = self._io.pos()
178
+ self.as_numeric = self._io.read_u2le()
179
+ self._debug['as_numeric']['end'] = self._io.pos()
180
+
181
+ if self.is_string:
182
+ self._debug['rest']['start'] = self._io.pos()
183
+ self.rest = []
184
+ i = 0
185
+ while True:
186
+ if not 'arr' in self._debug['rest']:
187
+ self._debug['rest']['arr'] = []
188
+ self._debug['rest']['arr'].append({'start': self._io.pos()})
189
+ _ = self._io.read_u2le()
190
+ self.rest.append(_)
191
+ self._debug['rest']['arr'][len(self.rest) - 1]['end'] = self._io.pos()
192
+ if _ == 0:
193
+ break
194
+ i += 1
195
+ self._debug['rest']['end'] = self._io.pos()
196
+
197
+ if ((self.is_string) and (self.save_pos2 >= 0)) :
198
+ self._debug['noop']['start'] = self._io.pos()
199
+ self.noop = self._io.read_bytes(0)
200
+ self._debug['noop']['end'] = self._io.pos()
201
+
202
+
203
+ @property
204
+ def save_pos1(self):
205
+ if hasattr(self, '_m_save_pos1'):
206
+ return self._m_save_pos1 if hasattr(self, '_m_save_pos1') else None
207
+
208
+ self._m_save_pos1 = self._io.pos()
209
+ return self._m_save_pos1 if hasattr(self, '_m_save_pos1') else None
210
+
211
+ @property
212
+ def save_pos2(self):
213
+ if hasattr(self, '_m_save_pos2'):
214
+ return self._m_save_pos2 if hasattr(self, '_m_save_pos2') else None
215
+
216
+ self._m_save_pos2 = self._io.pos()
217
+ return self._m_save_pos2 if hasattr(self, '_m_save_pos2') else None
218
+
219
+ @property
220
+ def is_string(self):
221
+ if hasattr(self, '_m_is_string'):
222
+ return self._m_is_string if hasattr(self, '_m_is_string') else None
223
+
224
+ self._m_is_string = self.first != 65535
225
+ return self._m_is_string if hasattr(self, '_m_is_string') else None
226
+
227
+ @property
228
+ def as_string(self):
229
+ if hasattr(self, '_m_as_string'):
230
+ return self._m_as_string if hasattr(self, '_m_as_string') else None
231
+
232
+ if self.is_string:
233
+ _pos = self._io.pos()
234
+ self._io.seek(self.save_pos1)
235
+ self._debug['_m_as_string']['start'] = self._io.pos()
236
+ self._m_as_string = (self._io.read_bytes(((self.save_pos2 - self.save_pos1) - 2))).decode(u"UTF-16LE")
237
+ self._debug['_m_as_string']['end'] = self._io.pos()
238
+ self._io.seek(_pos)
239
+
240
+ return self._m_as_string if hasattr(self, '_m_as_string') else None
241
+
242
+
243
+
@@ -0,0 +1,190 @@
1
+ # This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
2
+
3
+ from pkg_resources import parse_version
4
+ import kaitaistruct
5
+ from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
6
+ import collections
7
+
8
+
9
+ if parse_version(kaitaistruct.__version__) < parse_version('0.9'):
10
+ raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))
11
+
12
+ class WindowsShellItems(KaitaiStruct):
13
+ """Windows Shell Items (AKA "shellbags") is an undocumented set of
14
+ structures used internally within Windows to identify paths in
15
+ Windows Folder Hierarchy. It is widely used in Windows Shell (and
16
+ most visible in File Explorer), both as in-memory and in-file
17
+ structures. Some formats embed them, namely:
18
+
19
+ * Windows Shell link files (.lnk) Windows registry
20
+ * Windows registry "ShellBags" keys
21
+
22
+ The format is mostly undocumented, and is known to vary between
23
+ various Windows versions.
24
+
25
+ .. seealso::
26
+ Source - https://github.com/libyal/libfwsi/blob/main/documentation/Windows%20Shell%20Item%20format.asciidoc
27
+ """
28
+ SEQ_FIELDS = ["items"]
29
+ def __init__(self, _io, _parent=None, _root=None):
30
+ self._io = _io
31
+ self._parent = _parent
32
+ self._root = _root if _root else self
33
+ self._debug = collections.defaultdict(dict)
34
+
35
+ def _read(self):
36
+ self._debug['items']['start'] = self._io.pos()
37
+ self.items = []
38
+ i = 0
39
+ while True:
40
+ if not 'arr' in self._debug['items']:
41
+ self._debug['items']['arr'] = []
42
+ self._debug['items']['arr'].append({'start': self._io.pos()})
43
+ _t_items = WindowsShellItems.ShellItem(self._io, self, self._root)
44
+ _t_items._read()
45
+ _ = _t_items
46
+ self.items.append(_)
47
+ self._debug['items']['arr'][len(self.items) - 1]['end'] = self._io.pos()
48
+ if _.len_data == 0:
49
+ break
50
+ i += 1
51
+ self._debug['items']['end'] = self._io.pos()
52
+
53
+ class ShellItemData(KaitaiStruct):
54
+ SEQ_FIELDS = ["code", "body1", "body2"]
55
+ def __init__(self, _io, _parent=None, _root=None):
56
+ self._io = _io
57
+ self._parent = _parent
58
+ self._root = _root if _root else self
59
+ self._debug = collections.defaultdict(dict)
60
+
61
+ def _read(self):
62
+ self._debug['code']['start'] = self._io.pos()
63
+ self.code = self._io.read_u1()
64
+ self._debug['code']['end'] = self._io.pos()
65
+ self._debug['body1']['start'] = self._io.pos()
66
+ _on = self.code
67
+ if _on == 31:
68
+ self.body1 = WindowsShellItems.RootFolderBody(self._io, self, self._root)
69
+ self.body1._read()
70
+ self._debug['body1']['end'] = self._io.pos()
71
+ self._debug['body2']['start'] = self._io.pos()
72
+ _on = (self.code & 112)
73
+ if _on == 32:
74
+ self.body2 = WindowsShellItems.VolumeBody(self._io, self, self._root)
75
+ self.body2._read()
76
+ elif _on == 48:
77
+ self.body2 = WindowsShellItems.FileEntryBody(self._io, self, self._root)
78
+ self.body2._read()
79
+ self._debug['body2']['end'] = self._io.pos()
80
+
81
+
82
+ class ShellItem(KaitaiStruct):
83
+ """
84
+ .. seealso::
85
+ Section 2.2.2 - https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-SHLLINK/[MS-SHLLINK].pdf
86
+ """
87
+ SEQ_FIELDS = ["len_data", "data"]
88
+ def __init__(self, _io, _parent=None, _root=None):
89
+ self._io = _io
90
+ self._parent = _parent
91
+ self._root = _root if _root else self
92
+ self._debug = collections.defaultdict(dict)
93
+
94
+ def _read(self):
95
+ self._debug['len_data']['start'] = self._io.pos()
96
+ self.len_data = self._io.read_u2le()
97
+ self._debug['len_data']['end'] = self._io.pos()
98
+ if self.len_data >= 2:
99
+ self._debug['data']['start'] = self._io.pos()
100
+ self._raw_data = self._io.read_bytes((self.len_data - 2))
101
+ _io__raw_data = KaitaiStream(BytesIO(self._raw_data))
102
+ self.data = WindowsShellItems.ShellItemData(_io__raw_data, self, self._root)
103
+ self.data._read()
104
+ self._debug['data']['end'] = self._io.pos()
105
+
106
+
107
+
108
+ class RootFolderBody(KaitaiStruct):
109
+ """
110
+ .. seealso::
111
+ Source - https://github.com/libyal/libfwsi/blob/main/documentation/Windows%20Shell%20Item%20format.asciidoc#32-root-folder-shell-item
112
+ """
113
+ SEQ_FIELDS = ["sort_index", "shell_folder_id"]
114
+ def __init__(self, _io, _parent=None, _root=None):
115
+ self._io = _io
116
+ self._parent = _parent
117
+ self._root = _root if _root else self
118
+ self._debug = collections.defaultdict(dict)
119
+
120
+ def _read(self):
121
+ self._debug['sort_index']['start'] = self._io.pos()
122
+ self.sort_index = self._io.read_u1()
123
+ self._debug['sort_index']['end'] = self._io.pos()
124
+ self._debug['shell_folder_id']['start'] = self._io.pos()
125
+ self.shell_folder_id = self._io.read_bytes(16)
126
+ self._debug['shell_folder_id']['end'] = self._io.pos()
127
+
128
+
129
+ class VolumeBody(KaitaiStruct):
130
+ """
131
+ .. seealso::
132
+ Source - https://github.com/libyal/libfwsi/blob/main/documentation/Windows%20Shell%20Item%20format.asciidoc#33-volume-shell-item
133
+ """
134
+ SEQ_FIELDS = ["flags"]
135
+ def __init__(self, _io, _parent=None, _root=None):
136
+ self._io = _io
137
+ self._parent = _parent
138
+ self._root = _root if _root else self
139
+ self._debug = collections.defaultdict(dict)
140
+
141
+ def _read(self):
142
+ self._debug['flags']['start'] = self._io.pos()
143
+ self.flags = self._io.read_u1()
144
+ self._debug['flags']['end'] = self._io.pos()
145
+
146
+
147
+ class FileEntryBody(KaitaiStruct):
148
+ """
149
+ .. seealso::
150
+ Source - https://github.com/libyal/libfwsi/blob/main/documentation/Windows%20Shell%20Item%20format.asciidoc#34-file-entry-shell-item
151
+ """
152
+ SEQ_FIELDS = ["_unnamed0", "file_size", "last_mod_time", "file_attrs"]
153
+ def __init__(self, _io, _parent=None, _root=None):
154
+ self._io = _io
155
+ self._parent = _parent
156
+ self._root = _root if _root else self
157
+ self._debug = collections.defaultdict(dict)
158
+
159
+ def _read(self):
160
+ self._debug['_unnamed0']['start'] = self._io.pos()
161
+ self._unnamed0 = self._io.read_u1()
162
+ self._debug['_unnamed0']['end'] = self._io.pos()
163
+ self._debug['file_size']['start'] = self._io.pos()
164
+ self.file_size = self._io.read_u4le()
165
+ self._debug['file_size']['end'] = self._io.pos()
166
+ self._debug['last_mod_time']['start'] = self._io.pos()
167
+ self.last_mod_time = self._io.read_u4le()
168
+ self._debug['last_mod_time']['end'] = self._io.pos()
169
+ self._debug['file_attrs']['start'] = self._io.pos()
170
+ self.file_attrs = self._io.read_u2le()
171
+ self._debug['file_attrs']['end'] = self._io.pos()
172
+
173
+ @property
174
+ def is_dir(self):
175
+ if hasattr(self, '_m_is_dir'):
176
+ return self._m_is_dir if hasattr(self, '_m_is_dir') else None
177
+
178
+ self._m_is_dir = (self._parent.code & 1) != 0
179
+ return self._m_is_dir if hasattr(self, '_m_is_dir') else None
180
+
181
+ @property
182
+ def is_file(self):
183
+ if hasattr(self, '_m_is_file'):
184
+ return self._m_is_file if hasattr(self, '_m_is_file') else None
185
+
186
+ self._m_is_file = (self._parent.code & 2) != 0
187
+ return self._m_is_file if hasattr(self, '_m_is_file') else None
188
+
189
+
190
+
@@ -0,0 +1,52 @@
1
+ # This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
2
+
3
+ from pkg_resources import parse_version
4
+ import kaitaistruct
5
+ from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
6
+ import collections
7
+
8
+
9
+ if parse_version(kaitaistruct.__version__) < parse_version('0.9'):
10
+ raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))
11
+
12
+ class WindowsSystemtime(KaitaiStruct):
13
+ """Microsoft Windows SYSTEMTIME structure, stores individual components
14
+ of date and time as individual fields, up to millisecond precision.
15
+
16
+ .. seealso::
17
+ Source - https://learn.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-systemtime
18
+ """
19
+ SEQ_FIELDS = ["year", "month", "dow", "day", "hour", "min", "sec", "msec"]
20
+ def __init__(self, _io, _parent=None, _root=None):
21
+ self._io = _io
22
+ self._parent = _parent
23
+ self._root = _root if _root else self
24
+ self._debug = collections.defaultdict(dict)
25
+
26
+ def _read(self):
27
+ self._debug['year']['start'] = self._io.pos()
28
+ self.year = self._io.read_u2le()
29
+ self._debug['year']['end'] = self._io.pos()
30
+ self._debug['month']['start'] = self._io.pos()
31
+ self.month = self._io.read_u2le()
32
+ self._debug['month']['end'] = self._io.pos()
33
+ self._debug['dow']['start'] = self._io.pos()
34
+ self.dow = self._io.read_u2le()
35
+ self._debug['dow']['end'] = self._io.pos()
36
+ self._debug['day']['start'] = self._io.pos()
37
+ self.day = self._io.read_u2le()
38
+ self._debug['day']['end'] = self._io.pos()
39
+ self._debug['hour']['start'] = self._io.pos()
40
+ self.hour = self._io.read_u2le()
41
+ self._debug['hour']['end'] = self._io.pos()
42
+ self._debug['min']['start'] = self._io.pos()
43
+ self.min = self._io.read_u2le()
44
+ self._debug['min']['end'] = self._io.pos()
45
+ self._debug['sec']['start'] = self._io.pos()
46
+ self.sec = self._io.read_u2le()
47
+ self._debug['sec']['end'] = self._io.pos()
48
+ self._debug['msec']['start'] = self._io.pos()
49
+ self.msec = self._io.read_u2le()
50
+ self._debug['msec']['end'] = self._io.pos()
51
+
52
+