feat: 🎸 Support Android Dex, Dey file

This commit is contained in:
mikusjelly
2020-11-12 16:32:07 +08:00
parent add8f680ee
commit a1337e2fe7
6 changed files with 29 additions and 0 deletions
+2
View File
@@ -270,6 +270,8 @@ func main() {
#### Application
- **wasm** - `application/wasm`
- **dex** - `application/vnd.android.dex`
- **dey** - `application/vnd.android.dey`
## Benchmarks
Binary file not shown.
Binary file not shown.
+2
View File
@@ -1 +1,3 @@
module github.com/h2non/filetype
go 1.13
+2
View File
@@ -51,6 +51,8 @@ func TestMatchFile(t *testing.T) {
{"mov"},
{"wasm"},
{"dwg"},
{"dex"},
{"dey"},
}
for _, test := range cases {
+23
View File
@@ -2,10 +2,14 @@ package matchers
var (
TypeWasm = newType("wasm", "application/wasm")
TypeDex = newType("dex", "application/vnd.android.dex")
TypeDey = newType("dey", "application/vnd.android.dey")
)
var Application = Map{
TypeWasm: Wasm,
TypeDex: Dex,
TypeDey: Dey,
}
// Wasm detects a Web Assembly 1.0 filetype.
@@ -18,3 +22,22 @@ func Wasm(buf []byte) bool {
buf[4] == 0x01 && buf[5] == 0x00 &&
buf[6] == 0x00 && buf[7] == 0x00
}
// Dex detects dalvik executable(DEX)
func Dex(buf []byte) bool {
// https://source.android.com/devices/tech/dalvik/dex-format#dex-file-magic
return len(buf) > 36 &&
// magic
buf[0] == 0x64 && buf[1] == 0x65 && buf[2] == 0x78 && buf[3] == 0x0A &&
// file sise
buf[36] == 0x70
}
// Dey Optimized Dalvik Executable(ODEX)
func Dey(buf []byte) bool {
return len(buf) > 100 &&
// dey magic
buf[0] == 0x64 && buf[1] == 0x65 && buf[2] == 0x79 && buf[3] == 0x0A &&
// dex
Dex(buf[40:100])
}