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,181 @@
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 AndroidBootldrHuawei(KaitaiStruct):
13
+ """Format of `bootloader-*.img` files found in factory images of certain Android devices from Huawei:
14
+
15
+ * Nexus 6P "angler": [sample][sample-angler] ([other samples][others-angler]),
16
+ [releasetools.py](https://android.googlesource.com/device/huawei/angler/+/cf92cd8/releasetools.py#29)
17
+
18
+ [sample-angler]: https://androidfilehost.com/?fid=11410963190603870158 "bootloader-angler-angler-03.84.img"
19
+ [others-angler]: https://androidfilehost.com/?w=search&s=bootloader-angler&type=files
20
+
21
+ All image versions can be found in factory images at
22
+ <https://developers.google.com/android/images> for the specific device. To
23
+ avoid having to download an entire ZIP archive when you only need one file
24
+ from it, install [remotezip](https://github.com/gtsystem/python-remotezip) and
25
+ use its [command line
26
+ tool](https://github.com/gtsystem/python-remotezip#command-line-tool) to list
27
+ members in the archive and then to download only the file you want.
28
+
29
+ .. seealso::
30
+ Source - https://android.googlesource.com/device/huawei/angler/+/673cfb9/releasetools.py
31
+
32
+
33
+ .. seealso::
34
+ Source - https://source.codeaurora.org/quic/la/device/qcom/common/tree/meta_image/meta_format.h?h=LA.UM.6.1.1&id=a68d284aee85
35
+
36
+
37
+ .. seealso::
38
+ Source - https://source.codeaurora.org/quic/la/device/qcom/common/tree/meta_image/meta_image.c?h=LA.UM.6.1.1&id=a68d284aee85
39
+ """
40
+ SEQ_FIELDS = ["meta_header", "header_ext", "image_header"]
41
+ def __init__(self, _io, _parent=None, _root=None):
42
+ self._io = _io
43
+ self._parent = _parent
44
+ self._root = _root if _root else self
45
+ self._debug = collections.defaultdict(dict)
46
+
47
+ def _read(self):
48
+ self._debug['meta_header']['start'] = self._io.pos()
49
+ self.meta_header = AndroidBootldrHuawei.MetaHdr(self._io, self, self._root)
50
+ self.meta_header._read()
51
+ self._debug['meta_header']['end'] = self._io.pos()
52
+ self._debug['header_ext']['start'] = self._io.pos()
53
+ self.header_ext = self._io.read_bytes((self.meta_header.len_meta_header - 76))
54
+ self._debug['header_ext']['end'] = self._io.pos()
55
+ self._debug['image_header']['start'] = self._io.pos()
56
+ self._raw_image_header = self._io.read_bytes(self.meta_header.len_image_header)
57
+ _io__raw_image_header = KaitaiStream(BytesIO(self._raw_image_header))
58
+ self.image_header = AndroidBootldrHuawei.ImageHdr(_io__raw_image_header, self, self._root)
59
+ self.image_header._read()
60
+ self._debug['image_header']['end'] = self._io.pos()
61
+
62
+ class MetaHdr(KaitaiStruct):
63
+ SEQ_FIELDS = ["magic", "version", "image_version", "len_meta_header", "len_image_header"]
64
+ def __init__(self, _io, _parent=None, _root=None):
65
+ self._io = _io
66
+ self._parent = _parent
67
+ self._root = _root if _root else self
68
+ self._debug = collections.defaultdict(dict)
69
+
70
+ def _read(self):
71
+ self._debug['magic']['start'] = self._io.pos()
72
+ self.magic = self._io.read_bytes(4)
73
+ self._debug['magic']['end'] = self._io.pos()
74
+ if not self.magic == b"\x3C\xD6\x1A\xCE":
75
+ raise kaitaistruct.ValidationNotEqualError(b"\x3C\xD6\x1A\xCE", self.magic, self._io, u"/types/meta_hdr/seq/0")
76
+ self._debug['version']['start'] = self._io.pos()
77
+ self.version = AndroidBootldrHuawei.Version(self._io, self, self._root)
78
+ self.version._read()
79
+ self._debug['version']['end'] = self._io.pos()
80
+ self._debug['image_version']['start'] = self._io.pos()
81
+ self.image_version = (KaitaiStream.bytes_terminate(self._io.read_bytes(64), 0, False)).decode(u"ASCII")
82
+ self._debug['image_version']['end'] = self._io.pos()
83
+ self._debug['len_meta_header']['start'] = self._io.pos()
84
+ self.len_meta_header = self._io.read_u2le()
85
+ self._debug['len_meta_header']['end'] = self._io.pos()
86
+ self._debug['len_image_header']['start'] = self._io.pos()
87
+ self.len_image_header = self._io.read_u2le()
88
+ self._debug['len_image_header']['end'] = self._io.pos()
89
+
90
+
91
+ class Version(KaitaiStruct):
92
+ SEQ_FIELDS = ["major", "minor"]
93
+ def __init__(self, _io, _parent=None, _root=None):
94
+ self._io = _io
95
+ self._parent = _parent
96
+ self._root = _root if _root else self
97
+ self._debug = collections.defaultdict(dict)
98
+
99
+ def _read(self):
100
+ self._debug['major']['start'] = self._io.pos()
101
+ self.major = self._io.read_u2le()
102
+ self._debug['major']['end'] = self._io.pos()
103
+ self._debug['minor']['start'] = self._io.pos()
104
+ self.minor = self._io.read_u2le()
105
+ self._debug['minor']['end'] = self._io.pos()
106
+
107
+
108
+ class ImageHdr(KaitaiStruct):
109
+ SEQ_FIELDS = ["entries"]
110
+ def __init__(self, _io, _parent=None, _root=None):
111
+ self._io = _io
112
+ self._parent = _parent
113
+ self._root = _root if _root else self
114
+ self._debug = collections.defaultdict(dict)
115
+
116
+ def _read(self):
117
+ self._debug['entries']['start'] = self._io.pos()
118
+ self.entries = []
119
+ i = 0
120
+ while not self._io.is_eof():
121
+ if not 'arr' in self._debug['entries']:
122
+ self._debug['entries']['arr'] = []
123
+ self._debug['entries']['arr'].append({'start': self._io.pos()})
124
+ _t_entries = AndroidBootldrHuawei.ImageHdrEntry(self._io, self, self._root)
125
+ _t_entries._read()
126
+ self.entries.append(_t_entries)
127
+ self._debug['entries']['arr'][len(self.entries) - 1]['end'] = self._io.pos()
128
+ i += 1
129
+
130
+ self._debug['entries']['end'] = self._io.pos()
131
+
132
+
133
+ class ImageHdrEntry(KaitaiStruct):
134
+ SEQ_FIELDS = ["name", "ofs_body", "len_body"]
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['name']['start'] = self._io.pos()
143
+ self.name = (KaitaiStream.bytes_terminate(self._io.read_bytes(72), 0, False)).decode(u"ASCII")
144
+ self._debug['name']['end'] = self._io.pos()
145
+ self._debug['ofs_body']['start'] = self._io.pos()
146
+ self.ofs_body = self._io.read_u4le()
147
+ self._debug['ofs_body']['end'] = self._io.pos()
148
+ self._debug['len_body']['start'] = self._io.pos()
149
+ self.len_body = self._io.read_u4le()
150
+ self._debug['len_body']['end'] = self._io.pos()
151
+
152
+ @property
153
+ def is_used(self):
154
+ """
155
+ .. seealso::
156
+ Source - https://source.codeaurora.org/quic/la/device/qcom/common/tree/meta_image/meta_image.c?h=LA.UM.6.1.1&id=a68d284aee85#n119
157
+ """
158
+ if hasattr(self, '_m_is_used'):
159
+ return self._m_is_used if hasattr(self, '_m_is_used') else None
160
+
161
+ self._m_is_used = ((self.ofs_body != 0) and (self.len_body != 0))
162
+ return self._m_is_used if hasattr(self, '_m_is_used') else None
163
+
164
+ @property
165
+ def body(self):
166
+ if hasattr(self, '_m_body'):
167
+ return self._m_body if hasattr(self, '_m_body') else None
168
+
169
+ if self.is_used:
170
+ io = self._root._io
171
+ _pos = io.pos()
172
+ io.seek(self.ofs_body)
173
+ self._debug['_m_body']['start'] = io.pos()
174
+ self._m_body = io.read_bytes(self.len_body)
175
+ self._debug['_m_body']['end'] = io.pos()
176
+ io.seek(_pos)
177
+
178
+ return self._m_body if hasattr(self, '_m_body') else None
179
+
180
+
181
+
@@ -0,0 +1,217 @@
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 AndroidBootldrQcom(KaitaiStruct):
13
+ """A bootloader for Android used on various devices powered by Qualcomm
14
+ Snapdragon chips:
15
+
16
+ <https://en.wikipedia.org/wiki/Devices_using_Qualcomm_Snapdragon_processors>
17
+
18
+ Although not all of the Snapdragon based Android devices use this particular
19
+ bootloader format, it is known that devices with the following chips have used
20
+ it (example devices are given for each chip):
21
+
22
+ * APQ8064 ([devices](https://en.wikipedia.org/wiki/Devices_using_Qualcomm_Snapdragon_processors#Snapdragon_S4_Pro))
23
+ - Nexus 4 "mako": [sample][sample-mako] ([other samples][others-mako]),
24
+ [releasetools.py](https://android.googlesource.com/device/lge/mako/+/33f0114/releasetools.py#98)
25
+
26
+ * MSM8974AA ([devices](https://en.wikipedia.org/wiki/Devices_using_Qualcomm_Snapdragon_processors#Snapdragon_800,_801_and_805_(2013/14)))
27
+ - Nexus 5 "hammerhead": [sample][sample-hammerhead] ([other samples][others-hammerhead]),
28
+ [releasetools.py](https://android.googlesource.com/device/lge/hammerhead/+/7618a7d/releasetools.py#116)
29
+
30
+ * MSM8992 ([devices](https://en.wikipedia.org/wiki/Devices_using_Qualcomm_Snapdragon_processors#Snapdragon_808_and_810_(2015)))
31
+ - Nexus 5X "bullhead": [sample][sample-bullhead] ([other samples][others-bullhead]),
32
+ [releasetools.py](https://android.googlesource.com/device/lge/bullhead/+/2994b6b/releasetools.py#126)
33
+
34
+ * APQ8064-1AA ([devices](https://en.wikipedia.org/wiki/Devices_using_Qualcomm_Snapdragon_processors#Snapdragon_600_(2013)))
35
+ - Nexus 7 \[2013] (Mobile) "deb" <a href="#doc-note-data-after-img-bodies">(\**)</a>: [sample][sample-deb] ([other samples][others-deb]),
36
+ [releasetools.py](https://android.googlesource.com/device/asus/deb/+/14c1638/releasetools.py#105)
37
+ - Nexus 7 \[2013] (Wi-Fi) "flo" <a href="#doc-note-data-after-img-bodies">(\**)</a>: [sample][sample-flo] ([other samples][others-flo]),
38
+ [releasetools.py](https://android.googlesource.com/device/asus/flo/+/9d9fee9/releasetools.py#130)
39
+
40
+ * MSM8996 Pro-AB ([devices](https://en.wikipedia.org/wiki/Devices_using_Qualcomm_Snapdragon_processors#Snapdragon_820_and_821_(2016)))
41
+ - Pixel "sailfish" <a href="#doc-note-bootloader-size">(\*)</a>:
42
+ [sample][sample-sailfish] ([other samples][others-sailfish])
43
+ - Pixel XL "marlin" <a href="#doc-note-bootloader-size">(\*)</a>:
44
+ [sample][sample-marlin] ([other samples][others-marlin])
45
+
46
+ * MSM8998 ([devices](https://en.wikipedia.org/wiki/Devices_using_Qualcomm_Snapdragon_processors#Snapdragon_835_(2017)))
47
+ - Pixel 2 "walleye" <a href="#doc-note-bootloader-size">(\*)</a>: [sample][sample-walleye] ([other samples][others-walleye])
48
+ - Pixel 2 XL "taimen": [sample][sample-taimen] ([other samples][others-taimen])
49
+
50
+ <small id="doc-note-bootloader-size">(\*)
51
+ `bootloader_size` is equal to the size of the whole file (not just `img_bodies` as usual).
52
+ </small>
53
+
54
+ <small id="doc-note-data-after-img-bodies">(\**)
55
+ There are some data after the end of `img_bodies`.
56
+ </small>
57
+
58
+ ---
59
+
60
+ On the other hand, devices with these chips **do not** use this format:
61
+
62
+ * <del>APQ8084</del> ([devices](https://en.wikipedia.org/wiki/Devices_using_Qualcomm_Snapdragon_processors#Snapdragon_800,_801_and_805_(2013/14)))
63
+ - Nexus 6 "shamu": [sample][foreign-sample-shamu] ([other samples][foreign-others-shamu]),
64
+ [releasetools.py](https://android.googlesource.com/device/moto/shamu/+/df9354d/releasetools.py#12) -
65
+ uses "Motoboot packed image format" instead
66
+
67
+ * <del>MSM8994</del> ([devices](https://en.wikipedia.org/wiki/Devices_using_Qualcomm_Snapdragon_processors#Snapdragon_808_and_810_(2015)))
68
+ - Nexus 6P "angler": [sample][foreign-sample-angler] ([other samples][foreign-others-angler]),
69
+ [releasetools.py](https://android.googlesource.com/device/huawei/angler/+/cf92cd8/releasetools.py#29) -
70
+ uses "Huawei Bootloader packed image format" instead
71
+
72
+ [sample-mako]: https://androidfilehost.com/?fid=96039337900113996 "bootloader-mako-makoz30f.img"
73
+ [others-mako]: https://androidfilehost.com/?w=search&s=bootloader-mako&type=files
74
+
75
+ [sample-hammerhead]: https://androidfilehost.com/?fid=385035244224410247 "bootloader-hammerhead-hhz20h.img"
76
+ [others-hammerhead]: https://androidfilehost.com/?w=search&s=bootloader-hammerhead&type=files
77
+
78
+ [sample-bullhead]: https://androidfilehost.com/?fid=11410963190603870177 "bootloader-bullhead-bhz32c.img"
79
+ [others-bullhead]: https://androidfilehost.com/?w=search&s=bootloader-bullhead&type=files
80
+
81
+ [sample-deb]: https://androidfilehost.com/?fid=23501681358552487 "bootloader-deb-flo-04.02.img"
82
+ [others-deb]: https://androidfilehost.com/?w=search&s=bootloader-deb-flo&type=files
83
+
84
+ [sample-flo]: https://androidfilehost.com/?fid=23991606952593542 "bootloader-flo-flo-04.05.img"
85
+ [others-flo]: https://androidfilehost.com/?w=search&s=bootloader-flo-flo&type=files
86
+
87
+ [sample-sailfish]: https://androidfilehost.com/?fid=6006931924117907154 "bootloader-sailfish-8996-012001-1904111134.img"
88
+ [others-sailfish]: https://androidfilehost.com/?w=search&s=bootloader-sailfish&type=files
89
+
90
+ [sample-marlin]: https://androidfilehost.com/?fid=6006931924117907131 "bootloader-marlin-8996-012001-1904111134.img"
91
+ [others-marlin]: https://androidfilehost.com/?w=search&s=bootloader-marlin&type=files
92
+
93
+ [sample-walleye]: https://androidfilehost.com/?fid=14943124697586348540 "bootloader-walleye-mw8998-003.0085.00.img"
94
+ [others-walleye]: https://androidfilehost.com/?w=search&s=bootloader-walleye&type=files
95
+
96
+ [sample-taimen]: https://androidfilehost.com/?fid=14943124697586348536 "bootloader-taimen-tmz30m.img"
97
+ [others-taimen]: https://androidfilehost.com/?w=search&s=bootloader-taimen&type=files
98
+
99
+ [foreign-sample-shamu]: https://androidfilehost.com/?fid=745849072291678307 "bootloader-shamu-moto-apq8084-72.04.img"
100
+ [foreign-others-shamu]: https://androidfilehost.com/?w=search&s=bootloader-shamu&type=files
101
+
102
+ [foreign-sample-angler]: https://androidfilehost.com/?fid=11410963190603870158 "bootloader-angler-angler-03.84.img"
103
+ [foreign-others-angler]: https://androidfilehost.com/?w=search&s=bootloader-angler&type=files
104
+
105
+ ---
106
+
107
+ The `bootloader-*.img` samples referenced above originally come from factory
108
+ images packed in ZIP archives that can be found on the page [Factory Images
109
+ for Nexus and Pixel Devices](https://developers.google.com/android/images) on
110
+ the Google Developers site. Note that the codenames on that page may be
111
+ different than the ones that are written in the list above. That's because the
112
+ Google page indicates **ROM codenames** in headings (e.g. "occam" for Nexus 4)
113
+ but the above list uses **model codenames** (e.g. "mako" for Nexus 4) because
114
+ that is how the original `bootloader-*.img` files are identified. For most
115
+ devices, however, these code names are the same.
116
+
117
+ .. seealso::
118
+ Source - https://android.googlesource.com/device/lge/hammerhead/+/7618a7d/releasetools.py
119
+ """
120
+ SEQ_FIELDS = ["magic", "num_images", "ofs_img_bodies", "bootloader_size", "img_headers"]
121
+ def __init__(self, _io, _parent=None, _root=None):
122
+ self._io = _io
123
+ self._parent = _parent
124
+ self._root = _root if _root else self
125
+ self._debug = collections.defaultdict(dict)
126
+
127
+ def _read(self):
128
+ self._debug['magic']['start'] = self._io.pos()
129
+ self.magic = self._io.read_bytes(8)
130
+ self._debug['magic']['end'] = self._io.pos()
131
+ if not self.magic == b"\x42\x4F\x4F\x54\x4C\x44\x52\x21":
132
+ raise kaitaistruct.ValidationNotEqualError(b"\x42\x4F\x4F\x54\x4C\x44\x52\x21", self.magic, self._io, u"/seq/0")
133
+ self._debug['num_images']['start'] = self._io.pos()
134
+ self.num_images = self._io.read_u4le()
135
+ self._debug['num_images']['end'] = self._io.pos()
136
+ self._debug['ofs_img_bodies']['start'] = self._io.pos()
137
+ self.ofs_img_bodies = self._io.read_u4le()
138
+ self._debug['ofs_img_bodies']['end'] = self._io.pos()
139
+ self._debug['bootloader_size']['start'] = self._io.pos()
140
+ self.bootloader_size = self._io.read_u4le()
141
+ self._debug['bootloader_size']['end'] = self._io.pos()
142
+ self._debug['img_headers']['start'] = self._io.pos()
143
+ self.img_headers = [None] * (self.num_images)
144
+ for i in range(self.num_images):
145
+ if not 'arr' in self._debug['img_headers']:
146
+ self._debug['img_headers']['arr'] = []
147
+ self._debug['img_headers']['arr'].append({'start': self._io.pos()})
148
+ _t_img_headers = AndroidBootldrQcom.ImgHeader(self._io, self, self._root)
149
+ _t_img_headers._read()
150
+ self.img_headers[i] = _t_img_headers
151
+ self._debug['img_headers']['arr'][i]['end'] = self._io.pos()
152
+
153
+ self._debug['img_headers']['end'] = self._io.pos()
154
+
155
+ class ImgHeader(KaitaiStruct):
156
+ SEQ_FIELDS = ["name", "len_body"]
157
+ def __init__(self, _io, _parent=None, _root=None):
158
+ self._io = _io
159
+ self._parent = _parent
160
+ self._root = _root if _root else self
161
+ self._debug = collections.defaultdict(dict)
162
+
163
+ def _read(self):
164
+ self._debug['name']['start'] = self._io.pos()
165
+ self.name = (KaitaiStream.bytes_terminate(self._io.read_bytes(64), 0, False)).decode(u"ASCII")
166
+ self._debug['name']['end'] = self._io.pos()
167
+ self._debug['len_body']['start'] = self._io.pos()
168
+ self.len_body = self._io.read_u4le()
169
+ self._debug['len_body']['end'] = self._io.pos()
170
+
171
+
172
+ class ImgBody(KaitaiStruct):
173
+ SEQ_FIELDS = ["body"]
174
+ def __init__(self, idx, _io, _parent=None, _root=None):
175
+ self._io = _io
176
+ self._parent = _parent
177
+ self._root = _root if _root else self
178
+ self.idx = idx
179
+ self._debug = collections.defaultdict(dict)
180
+
181
+ def _read(self):
182
+ self._debug['body']['start'] = self._io.pos()
183
+ self.body = self._io.read_bytes(self.img_header.len_body)
184
+ self._debug['body']['end'] = self._io.pos()
185
+
186
+ @property
187
+ def img_header(self):
188
+ if hasattr(self, '_m_img_header'):
189
+ return self._m_img_header if hasattr(self, '_m_img_header') else None
190
+
191
+ self._m_img_header = self._root.img_headers[self.idx]
192
+ return self._m_img_header if hasattr(self, '_m_img_header') else None
193
+
194
+
195
+ @property
196
+ def img_bodies(self):
197
+ if hasattr(self, '_m_img_bodies'):
198
+ return self._m_img_bodies if hasattr(self, '_m_img_bodies') else None
199
+
200
+ _pos = self._io.pos()
201
+ self._io.seek(self.ofs_img_bodies)
202
+ self._debug['_m_img_bodies']['start'] = self._io.pos()
203
+ self._m_img_bodies = [None] * (self.num_images)
204
+ for i in range(self.num_images):
205
+ if not 'arr' in self._debug['_m_img_bodies']:
206
+ self._debug['_m_img_bodies']['arr'] = []
207
+ self._debug['_m_img_bodies']['arr'].append({'start': self._io.pos()})
208
+ _t__m_img_bodies = AndroidBootldrQcom.ImgBody(i, self._io, self, self._root)
209
+ _t__m_img_bodies._read()
210
+ self._m_img_bodies[i] = _t__m_img_bodies
211
+ self._debug['_m_img_bodies']['arr'][i]['end'] = self._io.pos()
212
+
213
+ self._debug['_m_img_bodies']['end'] = self._io.pos()
214
+ self._io.seek(_pos)
215
+ return self._m_img_bodies if hasattr(self, '_m_img_bodies') else None
216
+
217
+
@@ -0,0 +1,138 @@
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 AndroidDto(KaitaiStruct):
13
+ """Format for Android DTB/DTBO partitions. It's kind of archive with
14
+ dtb/dtbo files. Used only when there is a separate unique partition
15
+ (dtb, dtbo) on an android device to organize device tree files.
16
+ The format consists of a header with info about size and number
17
+ of device tree entries and the entries themselves. This format
18
+ description could be used to extract device tree entries from a
19
+ partition images and decompile them with dtc (device tree compiler).
20
+
21
+ .. seealso::
22
+ Source - https://source.android.com/docs/core/architecture/dto/partitions
23
+
24
+
25
+ .. seealso::
26
+ Source - https://android.googlesource.com/platform/system/libufdt/+/refs/tags/android-10.0.0_r47
27
+ """
28
+ SEQ_FIELDS = ["header", "entries"]
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['header']['start'] = self._io.pos()
37
+ self.header = AndroidDto.DtTableHeader(self._io, self, self._root)
38
+ self.header._read()
39
+ self._debug['header']['end'] = self._io.pos()
40
+ self._debug['entries']['start'] = self._io.pos()
41
+ self.entries = [None] * (self.header.dt_entry_count)
42
+ for i in range(self.header.dt_entry_count):
43
+ if not 'arr' in self._debug['entries']:
44
+ self._debug['entries']['arr'] = []
45
+ self._debug['entries']['arr'].append({'start': self._io.pos()})
46
+ _t_entries = AndroidDto.DtTableEntry(self._io, self, self._root)
47
+ _t_entries._read()
48
+ self.entries[i] = _t_entries
49
+ self._debug['entries']['arr'][i]['end'] = self._io.pos()
50
+
51
+ self._debug['entries']['end'] = self._io.pos()
52
+
53
+ class DtTableHeader(KaitaiStruct):
54
+ SEQ_FIELDS = ["magic", "total_size", "header_size", "dt_entry_size", "dt_entry_count", "dt_entries_offset", "page_size", "version"]
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['magic']['start'] = self._io.pos()
63
+ self.magic = self._io.read_bytes(4)
64
+ self._debug['magic']['end'] = self._io.pos()
65
+ if not self.magic == b"\xD7\xB7\xAB\x1E":
66
+ raise kaitaistruct.ValidationNotEqualError(b"\xD7\xB7\xAB\x1E", self.magic, self._io, u"/types/dt_table_header/seq/0")
67
+ self._debug['total_size']['start'] = self._io.pos()
68
+ self.total_size = self._io.read_u4be()
69
+ self._debug['total_size']['end'] = self._io.pos()
70
+ self._debug['header_size']['start'] = self._io.pos()
71
+ self.header_size = self._io.read_u4be()
72
+ self._debug['header_size']['end'] = self._io.pos()
73
+ self._debug['dt_entry_size']['start'] = self._io.pos()
74
+ self.dt_entry_size = self._io.read_u4be()
75
+ self._debug['dt_entry_size']['end'] = self._io.pos()
76
+ self._debug['dt_entry_count']['start'] = self._io.pos()
77
+ self.dt_entry_count = self._io.read_u4be()
78
+ self._debug['dt_entry_count']['end'] = self._io.pos()
79
+ self._debug['dt_entries_offset']['start'] = self._io.pos()
80
+ self.dt_entries_offset = self._io.read_u4be()
81
+ self._debug['dt_entries_offset']['end'] = self._io.pos()
82
+ self._debug['page_size']['start'] = self._io.pos()
83
+ self.page_size = self._io.read_u4be()
84
+ self._debug['page_size']['end'] = self._io.pos()
85
+ self._debug['version']['start'] = self._io.pos()
86
+ self.version = self._io.read_u4be()
87
+ self._debug['version']['end'] = self._io.pos()
88
+
89
+
90
+ class DtTableEntry(KaitaiStruct):
91
+ SEQ_FIELDS = ["dt_size", "dt_offset", "id", "rev", "custom"]
92
+ def __init__(self, _io, _parent=None, _root=None):
93
+ self._io = _io
94
+ self._parent = _parent
95
+ self._root = _root if _root else self
96
+ self._debug = collections.defaultdict(dict)
97
+
98
+ def _read(self):
99
+ self._debug['dt_size']['start'] = self._io.pos()
100
+ self.dt_size = self._io.read_u4be()
101
+ self._debug['dt_size']['end'] = self._io.pos()
102
+ self._debug['dt_offset']['start'] = self._io.pos()
103
+ self.dt_offset = self._io.read_u4be()
104
+ self._debug['dt_offset']['end'] = self._io.pos()
105
+ self._debug['id']['start'] = self._io.pos()
106
+ self.id = self._io.read_u4be()
107
+ self._debug['id']['end'] = self._io.pos()
108
+ self._debug['rev']['start'] = self._io.pos()
109
+ self.rev = self._io.read_u4be()
110
+ self._debug['rev']['end'] = self._io.pos()
111
+ self._debug['custom']['start'] = self._io.pos()
112
+ self.custom = [None] * (4)
113
+ for i in range(4):
114
+ if not 'arr' in self._debug['custom']:
115
+ self._debug['custom']['arr'] = []
116
+ self._debug['custom']['arr'].append({'start': self._io.pos()})
117
+ self.custom[i] = self._io.read_u4be()
118
+ self._debug['custom']['arr'][i]['end'] = self._io.pos()
119
+
120
+ self._debug['custom']['end'] = self._io.pos()
121
+
122
+ @property
123
+ def body(self):
124
+ """DTB/DTBO file."""
125
+ if hasattr(self, '_m_body'):
126
+ return self._m_body if hasattr(self, '_m_body') else None
127
+
128
+ io = self._root._io
129
+ _pos = io.pos()
130
+ io.seek(self.dt_offset)
131
+ self._debug['_m_body']['start'] = io.pos()
132
+ self._m_body = io.read_bytes(self.dt_size)
133
+ self._debug['_m_body']['end'] = io.pos()
134
+ io.seek(_pos)
135
+ return self._m_body if hasattr(self, '_m_body') else None
136
+
137
+
138
+