这是它的第一个“行”
00000000 99 99 99 99 44 44 44 44 55 55 55 55 aa aa aa aa |....DDDDUUUU....|
00000010 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 |...............@|
00000040 00 01 00 00 00 00 00 80 00 00 23 90 00 00 00 00 |..........#.....|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000080 04 03 02 01 00 00 00 00 00 00 00 0b 5a 58 56 31 |............ZXV1|
00000090 30 20 48 32 30 31 4c 01 02 03 04 00 00 00 00 00 |0 H201L.........|
000000a0 01 4c 54 00 00 23 78 00 00 20 00 40 34 b7 80 e9 |.LT..#x.. .@4...|
000000b0 80 47 c0 00 00 00 00 00 00 00 00 00 00 00 00 00 |.G..............|
000000c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000000d0 00 00 00 00 00 20 00 00 00 03 d0 00 00 04 18 78 |..... .........x|
000000e0 da ed 58 61 53 da 30 18 fe be 5f c1 f1 03 b0 29 |..XaS.0..._....)|
000000f0 88 db 4e 77 07 6d d1 de 00 3b e8 64 b7 2f 5e 6c |..Nw.m...;.d./^l|
00000100 23 e6 2c 49 2f 4d 11 f6 eb 97 da 56 0b da 34 45 |#.,I/M.....V..4E|
00000110 77 d3 13 94 2b 94 27 6f 9e be 79 f2 bc 6f 7b 6c |w...+.'o..y..o{l|
00000120 f6 bf 7d 6a 88 d7 b1 7b 15 34 08 5c a0 93 a6 d9 |..}j...{.4.\....|
00000130 ef c3 08 35 1b 13 7a 67 d0 98 f0 93 26 68 a6 a0 |...5..zg....&h..|
00000140 7b a0 38 dd 18 d3 93 a6 56 38 79 ff 83 39 ca 02 |{.8.....V8y..9..|
00000150 d8 03 9b 5c d3 66 63 09 03 01 03 e2 4f 17 ef 8e |...\.fc.....O...|
00000160 96 be 80 d6 d5 40 27 fd a6 03 fd 30 3b 7d 98 fc |.....@'....0;}..|
00000170 92 1e f5 ec d8 4e 8e cd 83 c2 dc 07 62 f2 8c ef |.....N......b...|
我将ttl-rs232连接到路由器,然后在路由器Web UI上按了备份按钮时,该消息显示在日志中。
=~=~=~=~=~=~=~=~=~=~=~= PuTTY log 2014.01.31 22:58:29 =~=~=~=~=~=~=~=~=~=~=~=
04:15:12 [webd][Info] [upload.c(1138)my_upload_file] Enter my_upload_file.
04:15:12 [webd][Info] [upload.c(1343)my_upload_file] Begin download file.(filetype : config)
04:15:12 [DB][Info] [dbc_mgr_file.c(1644)dbGetBinFile] DB get cfg start
04:15:12 [FLASHRW][Info] [proc_file_mod.c(1204)file_open] open file: /proc/cfg/db_user_cfg.xml
04:15:12 [FLASHRW][Info] [proc_file_mod.c(1334)file_close] close file: /proc/cfg/db_user_cfg.xml
04:15:12 [DB][Info] [dbc_mgr_file_en(570)dbcCfgFileIsEnc] FileIsEncry return 0
04:15:12 [FLASHRW][Info] [proc_file_mod.c(1204)file_open] open file: /proc/cfg/db_user_cfg.xml
04:15:12 [FLASHRW][Info] [proc_file_mod.c(1334)file_close] close file: /proc/cfg/db_user_cfg.xml
04:15:12 [DB][Info] [dbc_mgr_file_si(198)dbcCfgFileSign] SignFile return 0
04:15:12 [DB][Info] [dbc_mgr_file_ve(277)dbcCfgFileVersi] add FileVersion return 0
04:15:12 [DB][Warn] [dbc_mgr_file.c(1708)dbGetBinFile] DB download cfg(iRet:0)
04:15:12 [webd][Info] [upload.c(644)create_config_f] user cfg path:/var/tmp/version-cfg
,所以我在路由器固件中搜索了像上面的文本,并找到了这行/>
deflate 1.1.4 jean loup gailly
在一些字符串附近,在快速Google搜寻后,它接缝到说这是zlib,它用于压缩“东西”,之后用我的知识我试图用这样的命令来解压缩
printf“ \ x1f \ x8b \ x08 \ x00 \ x00 \ x00 \ x00 \ x00” | cat-zlib.raw | gzip -dc
猫/ tmp / data | openssl zlib -d
,但是没有运气,后来我在网络上发现了类似的文件,但没有压缩,所以我看一下,它接缝了文件头和另外两个“ byts”与我的压缩文件相同,我不确定我如何跳过这些第一个“字节”并尝试解压缩其余的“数据”,同样从日志u可以看到某种类型的“符号”,也需要跳过,此处未压缩的类似文件的外观如何
00000000 99 99 99 99 44 44 44 44 55 55 55 55 aa aa aa aa |....DDDDUUUU....|
00000010 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 |...............@|
00000040 00 02 00 00 00 00 00 80 00 04 5e 85 00 00 00 00 |..........^.....|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000080 3c 44 42 3e 0a 3c 54 62 6c 20 6e 61 6d 65 3d 22 |<DB>.<Tbl name="|
00000090 44 42 42 61 73 65 22 20 52 6f 77 43 6f 75 6e 74 |DBBase" RowCount|
000000a0 3d 22 31 22 3e 0a 3c 52 6f 77 20 4e 6f 3d 22 30 |="1">.<Row No="0|
000000b0 22 3e 0a 3c 44 4d 20 6e 61 6d 65 3d 22 49 46 49 |">.<DM name="IFI|
000000c0 6e 66 6f 22 20 76 61 6c 3d 22 30 31 30 31 30 32 |nfo" val="010102|
000000d0 30 31 30 34 30 30 30 30 30 30 30 31 30 36 30 31 |0104000000010601|
000000e0 30 34 30 30 30 30 30 32 31 32 35 30 30 30 30 30 |0400000212500000|
000000f0 30 30 35 30 30 31 30 30 30 30 35 30 30 32 30 30 |0050010000500200|
00000100 30 30 35 30 30 33 30 30 30 30 22 2f 3e 0a 3c 2f |0050030000"/>.</|
00000110 52 6f 77 3e 0a 3c 2f 54 62 6c 3e 0a 3c 54 62 6c |Row>.</Tbl>.<Tbl|
00000120 20 6e 61 6d 65 3d 22 45 54 48 22 20 52 6f 77 43 | name="ETH" RowC|
00000130 6f 75 6e 74 3d 22 34 22 3e 0a 3c 52 6f 77 20 4e |ount="4">.<Row N|
00000140 6f 3d 22 30 22 3e 0a 3c 44 4d 20 6e 61 6d 65 3d |o="0">.<DM name=|
00000150 22 56 69 65 77 4e 61 6d 65 22 20 76 61 6c 3d 22 |"ViewName" val="|
00000160 49 47 44 2e 4c 44 31 2e 45 54 48 31 22 2f 3e 0a |IGD.LD1.ETH1"/>.|
00000170 3c 44 4d 20 6e 61 6d 65 3d 22 4c 44 57 44 56 69 |<DM name="LDWDVi|
在这里您可以找到压缩的备份。
编辑:在图片上,您可以看到两个文件db_user_cfg.xml(来自日志的文件)的比较(左侧)和“相同文件”,但何时在右侧“备份”
#1 楼
如果查看备份文件的偏移量0xDF,则会看到两个字节:0x78 0xDA一个zlib压缩文件。
实际上,原始XML配置文件已被拆分为多个zlib压缩块:
$ binwalk default-config.bin
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------------------
223 0xDF Zlib header, best compression, uncompressed size >= 8192
1211 0x4BB Zlib header, best compression, uncompressed size >= 8192
2260 0x8D4 Zlib header, best compression, uncompressed size >= 8192
2901 0xB55 Zlib header, best compression, uncompressed size >= 8192
3796 0xED4 Zlib header, best compression, uncompressed size >= 8192
4306 0x10D2 Zlib header, best compression, uncompressed size >= 8192
5224 0x1468 Zlib header, best compression, uncompressed size >= 8192
6066 0x17B2 Zlib header, best compression, uncompressed size >= 8192
7084 0x1BAC Zlib header, best compression, uncompressed size >= 8192
8058 0x1F7A Zlib header, best compression, uncompressed size >= 8192
8981 0x2315 Zlib header, best compression, uncompressed size >= 3156
如果对每个块进行解压缩并将解压缩的数据连接在一起,您将获得原始的XML配置文件。
评论
谢谢你devttys0非常高兴你在这里,我为你刚才所说的感到惊讶,我在这个文件上运行了biwalk,但是没有从他那里得到任何东西,很奇怪:) $ binwalk Binwalk v1.2.2-1再次感谢你的时间和欢呼!
– Vido
2014年2月2日在18:25
zlib扫描在v1.2.2中作为可选插件实现。现在,最新代码(github.com/devttys0/binwalk)的默认扫描中包含zlib。
–devttys0
2014年2月2日20:00
太好了,我必须拥有那个新版本:)
– Vido
2014年2月2日在21:58
#2 楼
好吧,这里是可以工作的小python脚本:)
import zlib
magic_numbers = ['\x78\xDA']
filename = 'config-marina.bin'
infile = open(filename, 'r')
data = infile.read()
pos = 0
found = False
while pos < len(data):
window = data[pos:pos+2]
for marker in magic_numbers:
if window == marker:
found = True
start = pos
print "Start of zlib %s" % pos
rest_of_data = data[start:]
decomp_obj = zlib.decompressobj()
uncompressed_msg = decomp_obj.decompress(rest_of_data)
print "Content: %s" % uncompressed_msg
break
if pos == len(data):
break
pos += 1
if found:
header = data[:start]
footer = decomp_obj.unused_data
if not found:
print "Sorry, no zlib found."
评论
为了使其适用于我在计算机上找到的Python 2.7.7,我必须更改以下行:infile = open(filename,'r')To:infile = open(filename,'rb')
–阿蒂拉·科瓦奇(AttilaKovács)
2014-09-29 19:11
该脚本还适用于最新的ZTE F609 ONT固件(v5)。谢谢!
– EDP
16年1月21日在17:19
@Vido一些白痴拿了您的解压缩脚本,并在exploit-db.com上声称它利用了零日漏洞
– julian♦
17年3月3日在1:31
Tnx报告@SYS_V ...大声笑:)
– Vido
17 Mar 3 '17 at 16:10
#3 楼
config.bin文件中的每个压缩块都以一个小的3-DWORDs头作为前缀,该头包含以下信息:未压缩的xml块的长度。对于除最后一个块以外的所有块,此值均为0x10000。最后一个块的该值为0x0。
这些标头可用于避免在检测块期间出现误报:有效块将在第一个字段上使用0x10000或在第三个字段上使用0x0领域。标头还可以用于验证未压缩的数据大小。
import re
import zlib
import struct
def extract_config_xml(config_bin):
config_xml = b''
for zlib_chunk in re.finditer('\x78\xda', config_bin):
zlib_chunk_start = zlib_chunk.start()
zlib_chunk_header = config_bin[zlib_chunk_start - 12: zlib_chunk_start]
xml_chunk_length, zlib_chunk_length, config_bin_length = \
struct.unpack('>LLL', zlib_chunk_header)
if xml_chunk_length == 0x10000 or config_bin_length == 0:
zlib_chunk_end = zlib_chunk_start + zlib_chunk_length
zlib_chunk = config_bin[zlib_chunk_start: zlib_chunk_end]
xml_chunk = zlib.decompress(zlib_chunk)
assert xml_chunk_length == len(xml_chunk)
config_xml += xml_chunk
return config_xml
with open('config.bin', 'rb') as f:
print extract_config_xml(f.read())
评论
感谢您的很好的解释,对我来说,这很清楚发生了什么:)
– Vido
15年6月30日在6:41
评论
如何在我的zxhn h298a路由器config.bin文件中输入我自己的mac地址并还原到它?