[File] [PATCH] of Magdir/tplink for openwrt firmware (update)

Jörg Jenderek joerg.jen.der.ek at gmx.net
Fri Dec 21 17:26:11 UTC 2018


Hello,

some days ago i run file command version 5.35 on some old DOS files.
The Norton Commander Cleanup Utility initialization file NCCLEAN.INI was
sometimes misidentified by Magdir/tplink as openwrt firmware. This looks
with good examples like:

openwrt-ar71xx-generic-tl-wr1043nd-v1-squashfs-factory.bin:
	firmware 1043 v1 OpenWrt 12009,
	8126464 bytes or less,
	at 0x200 1405332 bytes gzip compressed data, max compression,
	from Unix, original size 4294967295,
	at 0x0
wr940nv1_en_3_13_7_up(111228).bin:
	firmware 941 v4 TP-LINK Technologies ver. 1.0, version 3.13.7,
	3932160 bytes or less,
	at 0x200 815072 bytes gzip compressed data,
	was "vmlinux.bin", last modified: Fri Dec 16 04:55:03 2011,
	from Unix, original size 4294967295,
	at 0x0
..\other\NCCLEAN.INI:
	firmware 0 v0 (revision 0)  rary files,
	0 bytes or less,
	at 0x0 0 bytes ,
	at 0x0 0 bytes

In Magdir/tplink with 3 lines test for valid firmware header version 1
or 2 and for header padding with nulls was done like
 0		ulelong		<3
 >0		ulelong		!0
 >>0x100	long		0
Apparently this also true for a bad example like NCCLEAN.INI. So i add
an additional test line by looking for a valid (ASCII printable) vendor
name like "OpenWrt" by line like
 >>>4		ubelong		>0x1F000000
And then afterwards call subroutine to display information for
firmware binaries by
 >>>>0		use		firmware-tplink

Then there is another error, which i do not understand. In subroutine
the kernel data offset is printed by line like:
 >0x80		ubelong		x		\b, at 0x%x
Because normally the kernel is stored direct after firmware header this
gives phrase "at 0x200".
Later the root file system data offset is displayed by line
 >0x88		ubelong		x		\b, at 0x%x
For the above firmware samples this gives wrong offset ( in output the
phrase "at 0x0".
Between there was a magic line that trigger this wrong behavior:
 >(0x80.L)	indirect	x
Because the kernel is often compressed, this can be described by using
file command itself to inspect that part by expression in
Magdir/compress and pointer expression. So the above line displays
phrase starting with "gzip compressed data". When i remove line with
indirect instruction i get the correct root file system offsets.

Maybe somebody is smart enough to fix this behavior.

After applying the above mentioned modifications by patch
file-5.35-tplink-nc.diff then all bad inspected examples are skipped and
good samples are still described.

I hope my diff file can be applied in future version of file utility.

With best wishes
Jörg Jenderek
-- 
Jörg Jenderek

-------------- next part --------------
--- file-5.35/magic/Magdir/tplink.old	2017-12-14 05:52:56 +0000
+++ file-5.35/magic/Magdir/tplink	2018-12-21 17:15:35 +0000
@@ -13,3 +13,5 @@
 >>0x100		long		0
->>>0		use		firmware-tplink
+# skip Norton Commander Cleanup Utility NCCLEAN.INI by looking for valid vendor
+>>>4		ubelong		>0x1F000000
+>>>>0		use		firmware-tplink
 
@@ -65,2 +67,3 @@
 # root file system data offset
+# WRONG in 5.35 with above indirect expression
 >0x88		ubelong		x		\b, at 0x%x
@@ -70,2 +73,3 @@
 >(0x88.L)	indirect	x
+# 'qshs' for wr940nv1_en_3_13_7_up(111228).bin
 #>(0x88.L)	string		x		\b, file system '%.4s'


More information about the File mailing list