gpt4 book ai didi

parsing - 在 UNIX 中创建二进制文件

转载 作者:行者123 更新时间:2023-11-29 08:52:24 25 4
gpt4 key购买 nike

这个问题已经存在了一段时间,我想如果我能解决这个问题,我应该提供一些奖励积分。

我做了什么……

最近在工作中,我编写了一个解析器,可以将二进制文件转换为可读格式。二进制文件不是具有 10101010 字符的 Ascii 文件。它已被编码为二进制。因此,如果我对文件执行 cat,我会得到以下结果 -

[jaypal~/Temp/GTP]$ cat T20111017153052.NEW 
==?sGTP?ղ?N????W????&Xx1?T?&Xx1?;
?d@#e?
?0H????????|?X?@@(?ղ??VtPOC01
cceE??k@9??W傇??R?K?i2??d@#e???&Xx1&Xx??!?
blackberrynet?/??!

??!

??#ripassword??W傅?W傆??0H??
#R??@Vtc@@(?ղ??n?POC01

所以我使用hexdump 实用程序使文件显示以下内容并将其重定向到一个文件。现在我有了输出文件,它是一个包含十六进制值的文本文件。

[jaypal~/Temp/GTP]$ hexdump -C T20111017153052.NEW 
00000000 3d 3d 01 f8 73 47 54 50 02 f1 d5 b2 be 4e e4 d7 |==..sGTP.....N..|
00000010 00 01 01 00 01 80 00 cc 57 e5 82 00 00 00 00 00 |........W.......|
00000020 00 00 00 00 00 00 00 00 87 d3 f5 13 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 10 |................|
00000040 01 01 0f 00 00 00 00 00 26 58 78 31 00 b3 54 c5 |........&Xx1..T.|
00000050 26 58 78 31 00 b4 3b 0a 00 00 ad 64 13 40 01 03 |&Xx1..;....d.@..|
00000060 23 16 65 f3 01 01 0b 91 30 19 48 99 f2 ff ff ff |#.e.....0.H.....|
00000070 ff ff ff 02 00 7c 00 dc 01 58 00 a0 40 40 28 02 |.....|...X..@@(.|
00000080 f1 d5 b2 b8 ca 56 74 50 4f 43 30 31 00 00 00 00 |.....VtPOC01....|
00000090 00 04 0a 63 63 07 00 00 00 00 00 00 00 00 00 00 |...cc...........|
000000a0 00 00 00 65 45 00 00 b4 fb 6b 40 00 39 11 16 cd |...eE....k@.9...|
000000b0 cc 57 e5 82 87 d3 f5 52 85 a1 08 4b 00 a0 69 02 |.W.....R...K..i.|
000000c0 32 10 00 90 00 00 00 00 ad 64 00 00 02 13 40 01 |2........d....@.|

在大量的 awksedcut 之后,脚本将十六进制值转换为可读文本。为此,我使用了偏移定位来标记每个转换参数的开始和结束位置。所有转换后的结果文件如下所示

[jaypal:~/Temp/GTP] cat textfile.txt 
Beginning of DB Package Identifier: ==
Total Package Length: 508
Offset to Data Record Count field: 115
Data Source: GTP
Timestamp: 2011-10-25
Matching Site Processor ID: 1
DB Package format version: 1
DB Package Resolution Type: 0
DB Package Resolution Value: 1
DB Package Resolution Cause Value: 128
Transport Protocol: 0
SGSN IP Address: 220.206.129.47
GGSN IP Address: 202.4.210.51

我为什么要这么做

我是一名测试工程师,手动验证二进制文件非常痛苦。我不得不手动解析偏移量并使用计算器转换它们并根据 Wireshark 和 GUI 对其进行验证。

现在是问题部分

我希望做与我所做的相反的事情。这是我的计划 -

  • 有一个易于阅读的输入文本文件,其中包含Parameters : Values
  • 用户可以简单地将值放在它们旁边(例如,日期将是一个参数,用户可以给出他们希望数据文件具有的日期)。
  • 脚本将从输入文本文件中删除所有相关信息(用户提供的信息)并将它们转换为十六进制值。
  • 一旦文件被转换为十六进制值,我希望将其编码回二进制。

前三步完成

问题

一旦我的脚本将输入文本文件转换为具有十六进制值的文本文件,我就会得到如下文件(请注意我可以对其执行 cat)。

[visdba@hw-diam-test01 ParserDump]$ cat temp_file | sed 's/.\{32\}/&\n/g' | sed 's/../& /g'
3d 3d 01 fc 73 47 54 50 02 f1 d6 55 3c 9f 49 9c
00 01 01 00 01 80 00 dc ce 81 2f 00 00 00 00 00
00 00 00 00 00 00 00 00 ca 04 d2 33 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10
01 01 0f 00 00 07 04 ea 00 00 ff ff 00 00 14 b7
00 00 ff ff 00 00 83 ec 00 00 83 62 54 14 59 00
60 38 34 f5 01 01 0b 58 62 70 11 60 f6 ff ff ff
ff ff ff 02 00 7c 00 d0 01 4c 00 b0 40 40 28 02
f1 d6 55 38 cb 2b 23 50 4f 43 30 31 00 00 00 00
00 04 0a 63 63 07 00 00 00 00 00 00 00 00 00 00

我的意图是将这个转换后的文件编码二进制,这样当我对文件执行cat时,我会得到一堆垃圾值。

[jaypal~/Temp/GTP]$ cat temp.file 
==?sGTP?ղ?N????W????&Xx1?T?&Xx1?;
?d@#e?
?0H????????|?X?@@(?ղ??VtPOC01
cceE??k@9??W傇??R?K?i2??d@#e???&Xx1&Xx??!?
blackberrynet?/??!

??!

所以问题是这样的。 如何以这种形式对其进行编码?

我为什么要这样做?

我们在生产环境中没有很多 GTP(GPRS 隧道协议(protocol))消息。我想如果我对它进行逆向工程,我可以有效地创建一个数据生成器并制作我自己的数据。

总结一下

可能有复杂的工具,但我不想花太多时间去学习它们。已经有大约 2 个月了,我已经开始在 *nix 平台上工作,并且刚刚开始使用它的强大工具,如 sedawk

我确实需要一些帮助和指导来实现这一目标。

再次感谢阅读! 200 分等待可以指导我正确方向的人。 :)

示例文件

这是原始 Binary File 的示例

这是 Input Text File 的示例这将允许用户输入值

这是 File 的示例我的脚本在输入文本文件的所有转换完成后创建的。

如何将 File 3 的编码更改为 File 1

最佳答案

您可以使用 xxd非常简单地与二进制文件/hexdumps 相互转换。

数据转十六进制

echo  Hello | xxd -p 
48656c6c6f0a

十六进制数据

echo 48656c6c6f0a | xxd -r -p
Hello

echo 48 65 6c 6c 6f 0a | xxd -r -p
Hello

-p 是 postscript 模式,允许更自由的输入

这是 xxd -r -p text 的输出,其中 text 是您在上面提供的数据

==▒sGTP▒▒U<▒I▒▒▒΁/▒▒3▒▒▒▒▒▒▒▒▒bTY`84▒
Xbp`▒▒▒▒▒▒▒|▒L▒@@(▒▒U8▒+#POC01
:▒ިv▒b▒▒▒▒TY`84Ud▒▒▒▒>▒▒▒▒▒▒▒!▒
blackberrynet▒/▒▒!
M
▒▒!
N
▒▒#Oripassword▒▒΁/▒▒΁/▒▒Xbp`▒@@(▒▒U8▒IvPOC01
:qU▒b▒▒▒▒▒▒TY`84U▒▒▒*:▒▒!
▒k▒▒▒#O Welcmme!
▒!
M

关于parsing - 在 UNIX 中创建二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8086191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com