aboutsummaryrefslogtreecommitdiff
path: root/contrib/file/magic/Magdir/javascript
blob: 90a09cce46a2ceae1d7941d63be17f9a66a13d92 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171

#------------------------------------------------------------------------------
# $File: javascript,v 1.5 2023/01/12 00:02:16 christos Exp $
# javascript:  magic for javascript and node.js scripts.
#
0	string/tw	#!/bin/node		Node.js script executable
!:mime application/javascript
0	string/tw	#!/usr/bin/node		Node.js script executable
!:mime application/javascript
0	string/tw	#!/bin/nodejs		Node.js script executable
!:mime application/javascript
0	string/tw	#!/usr/bin/nodejs	Node.js script executable
!:mime application/javascript
0	string/t		#!/usr/bin/env\ node	Node.js script executable
!:mime application/javascript
0	string/t		#!/usr/bin/env\ nodejs	Node.js script executable
!:mime application/javascript

# JavaScript
# The strength is increased to beat the C++ & HTML rules
0	search	"use\x20strict"	JavaScript source
!:strength +30
!:mime	application/javascript
!:ext 	js
0	search	'use\x20strict'	JavaScript source
!:strength +30
!:mime	application/javascript
!:ext 	js
0	regex	module(\\.|\\[["'])exports.*=	JavaScript source
!:strength +30
!:mime	application/javascript
!:ext 	js
0	regex	\^(const|var|let).*=.*require\\(	JavaScript source
!:strength +30
!:mime	application/javascript
!:ext 	js
0	regex	\^export\x20(function|class|default|const|var|let|async)\x20	JavaScript source
!:strength +30
!:mime	application/javascript
!:ext 	js
0	regex	\\((async\x20)?function[(\x20]	JavaScript source
!:strength +30
!:mime	application/javascript
!:ext 	js
0	regex	\^(import|export).*\x20from\x20	JavaScript source
!:strength +30
!:mime	application/javascript
!:ext 	js
0	regex	\^(import|export)\x20["']\\./	JavaScript source
!:strength +30
!:mime	application/javascript
!:ext 	js
0	regex	\^require\\(["']	JavaScript source
!:strength +30
!:mime	application/javascript
!:ext 	js
0	regex	typeof.*[!=]==	JavaScript source
!:strength +30
!:mime	application/javascript
!:ext 	js

# React Native minified JavaScript
0	search/128	__BUNDLE_START_TIME__=	React Native minified JavaScript
!:strength +30
!:mime	application/javascript
!:ext	bundle/jsbundle

# Hermes by Facebook https://hermesengine.dev/
# https://github.com/facebook/hermes/blob/master/include/hermes/\
# BCGen/HBC/BytecodeFileFormat.h#L24
0	lequad		0x1F1903C103BC1FC6	Hermes JavaScript bytecode
>8	lelong		x			\b, version %d

# v8 JavaScript engine bytecode
# From: Alexandre Iooss <erdnaxe@crans.org>
# URL:	https://v8.dev/docs/ignition
# Note: used in bytenode and NW.js protected source code
# V8 bytecode extraction was added in NodeJS v5.7.0 (V8 4.6.85.31).
# Version information is provided for some v8 versions found in NodeJS releases.
2	uleshort		=0xC0DE
>0	ulelong^0xC0DE0000	>0
# Reservation table starts at 40
>>40	ulelong&0xFFFFFF00	=0x80000000
# Stub keys present
>>>24	ulelong			>0
>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
>>>>4	ulelong			=0xEE4BF478	version 5.1.281.111,
>>>>4	ulelong			=0xC4A0100C	version 5.5.372.43,
>>>>8	ulelong			x		source size: %u bytes,
>>>>12	ulelong			x		cpu features: %#08X,
>>>>16	ulelong			x		flag hash: %#08X,
>>>>20	ulelong			x		%u reservations,
>>>>28	ulelong			x		payload size: %u bytes,
>>>>32	ulelong			x		checksum1: %#08X,
>>>>36	ulelong			x		checksum2: %#08X
# No stub keys
>>>24	ulelong			=0
>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
>>>>4	ulelong			=0x54F0AD81	version 6.2.414.46,
>>>>4	ulelong			=0X7D1BF182	version 6.2.414.54,
>>>>4	ulelong			=0x35BA122E	version 6.2.414.77,
>>>>4	ulelong			=0X9319F9C2	version 6.2.414.78,
>>>>4	ulelong			=0xB1240060	version 6.6.346.32,
>>>>4	ulelong			=0x2B757060	version 6.7.288.46,
>>>>4	ulelong			=0x09D147AA	version 6.7.288.49,
>>>>4	ulelong			=0xF4D4F48A	version 6.8.275.32,
>>>>4	ulelong			=0xD3961326	version 7.0.276.38,
>>>>8	ulelong			x		source size: %u bytes,
>>>>12	ulelong			x		cpu features: %#08X,
>>>>16	ulelong			x		flag hash: %#08X,
>>>>20	ulelong			x		%u reservations,
>>>>28	ulelong			x		payload size: %u bytes,
>>>>32	ulelong			x		checksum1: %#08X,
>>>>36	ulelong			x		checksum2: %#08X
# Reservation table starts at 32
>>32	ulelong&0xFFFFFF00	=0x80000000
# Second checksum present
>>>28	ulelong			>0
>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
>>>>4	ulelong			=0x21DDF627	version 7.4.288.21,
>>>>4	ulelong			=0x1FC9FE84	version 7.4.288.27,
>>>>4	ulelong			=0x60A99E8B	version 7.5.288.22,
>>>>4	ulelong			=0x4F665E90	version 7.6.303.29,
>>>>4	ulelong			=0xC7ACFCDE	version 7.7.299.11,
>>>>4	ulelong			=0x7F641D8F	version 7.7.299.13,
>>>>4	ulelong			=0xFD9A4F2E	version 7.8.279.17,
>>>>4	ulelong			=0x3A845324	version 7.8.279.23,
>>>>4	ulelong			=0xFF52FEAF	version 7.9.317.25,
>>>>8	ulelong			x		source size: %u bytes,
>>>>12	ulelong			x		flag hash: %#08X,
>>>>16	ulelong			x		%u reservations,
>>>>20	ulelong			x		payload size: %u bytes,
>>>>24	ulelong			x		checksum1: %#08X,
>>>>28	ulelong			x		checksum2: %#08X
# No second checksum
>>>28	ulelong			=0
>>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
>>>>4	ulelong			=0x8725E0F8	version 8.1.307.30,
>>>>4	ulelong			=0x09ED1289	version 8.1.307.31,
>>>>4	ulelong			=0xA5728C87	version 8.3.110.9,
>>>>4	ulelong			=0xB45C5D30	version 8.4.371.23,
>>>>4	ulelong			=0xED9C278B	version 8.4.371.19,
>>>>4	ulelong			=0xD27BFF42	version 8.6.395.16,
>>>>8	ulelong			x		source size: %u bytes,
>>>>12	ulelong			x		flag hash: %#08X,
>>>>16	ulelong			x		%u reservations,
>>>>20	ulelong			x		payload size: %u bytes,
>>>>24	ulelong			x		payload checksum: %#08X
# No reservation table and code starts at 24
>>32	ulelong		=0
>>>0	ulelong^0xC0DE0000	x		v8 bytecode, external reference table size: %u bytes,
>>>4	ulelong			=0x9A6F0B0F	version 9.0.257.17,
>>>4	ulelong			=0x271D5D1E	version 9.0.257.24,
>>>4	ulelong			=0x4EEA75DF	version 9.0.257.25,
>>>4	ulelong			=0x80809479	version 9.1.269.36,
>>>4	ulelong			=0x55C46F65	version 9.1.269.38,
>>>4	ulelong			=0x8A9C758A	version 9.2.230.21,
>>>4	ulelong			=0x9712F0E1	version 9.3.345.16,
>>>4	ulelong			=0x29593715	version 9.4.146.19,
>>>4	ulelong			=0xCD991825	version 9.4.146.24,
>>>4	ulelong			=0xACDD64EE	version 9.4.146.26,
>>>4	ulelong			=0xC96B4CD5	version 9.5.172.21,
>>>4	ulelong			=0xBCCE4578	version 9.5.172.25,
>>>4	ulelong			=0xA2EEA077	version 9.6.180.15,
>>>4	ulelong			=0xFD350011	version 10.1.124.8,
>>>4	ulelong			=0xBEF4028F	version 10.2.154.13,
>>>4	ulelong			=0xAF632352	version 10.2.154.4,
>>>8	ulelong			x		source size: %u bytes,
>>>12	ulelong			x		flag hash: %#08X,
>>>16	ulelong			x		payload size: %u bytes,
>>>20	ulelong			x		payload checksum: %#08X