zip recognize
This commit is contained in:
parent
6328b43957
commit
a405a6b303
@ -3,8 +3,25 @@
|
||||
detect a given file for formats or ISA
|
||||
*)
|
||||
|
||||
open Firmex
|
||||
|
||||
open Printf
|
||||
|
||||
let runner isa file =
|
||||
printf "Detect file isa=%b %s\n" isa file
|
||||
let try_unarchive (archive : Archive.t) : unit =
|
||||
printf "archive file=%s type=%s" archive.file archive.typ
|
||||
|
||||
let try_detect file =
|
||||
printf "detect file %s" file
|
||||
|
||||
let runner isa file =
|
||||
if isa then
|
||||
()
|
||||
else
|
||||
(* assume file exists *)
|
||||
(* check if file is an archive, else try analyze as a firmware
|
||||
for now, let's use binwalk result
|
||||
in the future, finding for signatures inside the file
|
||||
*)
|
||||
match Archive.from file with
|
||||
| Some archive -> try_unarchive archive
|
||||
| None -> try_detect file
|
||||
|
25
lib/archive/archive.ml
Normal file
25
lib/archive/archive.ml
Normal file
@ -0,0 +1,25 @@
|
||||
(** Base archive utitlities *)
|
||||
|
||||
module Zip = Zip
|
||||
module Xz = Xz
|
||||
module Cpio = Cpio
|
||||
|
||||
type t = { file : string; typ : string }
|
||||
|
||||
let is_signature infile signature =
|
||||
(* assume infile pos is 0 *)
|
||||
let accumulator acc s =
|
||||
match In_channel.input_char infile with
|
||||
| None -> false
|
||||
| Some c -> s == c && acc
|
||||
in
|
||||
Bytes.fold_left accumulator true signature
|
||||
|
||||
(** matching common archive signatures *)
|
||||
let from file =
|
||||
let infile = In_channel.open_bin file in
|
||||
(* support for zip file for now *)
|
||||
if is_signature infile Zip.signature then
|
||||
Some { file = file; typ = "zip"; }
|
||||
else
|
||||
None
|
1
lib/archive/cpio.ml
Normal file
1
lib/archive/cpio.ml
Normal file
@ -0,0 +1 @@
|
||||
let signature = Bytes.of_string "\x30\x37\x30\x37\x30\x37"
|
2
lib/archive/xz.ml
Normal file
2
lib/archive/xz.ml
Normal file
@ -0,0 +1,2 @@
|
||||
(* this signature is the stream header signature *)
|
||||
let signature = Bytes.of_string "\xFD\x37\x7A\x58\x5A\x00"
|
@ -10,5 +10,8 @@
|
||||
which has been deprecated or AES
|
||||
*)
|
||||
|
||||
let signature = Bytes.of_string "PK\x00\x00"
|
||||
type t = { file : string; typ : string }
|
||||
|
||||
let signature = Bytes.of_string "PK\x03\x04"
|
||||
|
||||
let from file = { file = file; typ = "zip" }
|
||||
|
Loading…
Reference in New Issue
Block a user