读取一个python源程序文件_通过Python中的程序识别文件的内容

您正在寻找使用Python逆向工程化二进制文件的结构。既然你声明这个文件是二进制文件,这可能很困难。你将需要检查文件的内容,并用你最好的直觉来推断结构。你首先想要的是一种显示文件的每个字节的方法,这将有助于你理解其含义。

幸运的是,有人已经写了一个工具来做到这一点,hexdump。使用pip安装该软件包。

您需要从该软件包获得的函数是hexdump,因此让我们将其导入该软件包并获取该函数的帮助。

>>> import hexdump

>>> help(hexdump.hexdump)

Help on function hexdump in module hexdump:

hexdump(data, result='print')

Transform binary data to the hex dump text format:

00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

[x] data argument as a binary string

[x] data argument as a file like object

Returns result depending on the `result` argument:

'print' - prints line by line

'return' - returns single string

'generator' - returns generator that produces lines

现在您可以开始浏览文件的内容。使用切片运算符以块形式进行。例如,为了使您的文件的第一个1KB的内容:

>>> hexdump.hexdump(buf[:1024])

00000000: C3 8E C2 8F 22 13 C2 AA 66 2A 22 47 C3 94 C3 AA ...."...f*"G....

00000010: C3 89 C3 A0 C3 B1 C3 91 6A C2 A4 C3 BF 3C C2 AA ........j....<..>

00000020: C2 91 73 C3 85 46 57 47 C2 88 C3 99 C2 B6 3E 2D ..s..FWG......>-

00000030: C3 BA 69 10 C2 93 C3 94 38 C3 81 7A 6A 43 30 7C ..i.....8..zjC0|

00000040: C3 BB C2 AA 01 2D C2 97 C3 83 C3 88 64 14 C3 9C .....-......d...

00000050: C2 AB C2 AA C3 A2 74 C2 85 5D C3 97 4E 64 68 C3 ......t..]..Ndh.

...

000003C0: 42 C2 8F 06 7F 12 33 7F 79 1E 2C 2A 0F C3 92 36 B.....3.y.,*...6

000003D0: C3 A6 C2 96 C2 93 C2 8B 43 C2 9F 4C C2 95 48 24 ........C..L..H$

000003E0: C2 B3 C2 82 26 C3 88 C3 BD C3 96 12 1E 5E 18 2E ....&........^..

000003F0: 37 C3 A7 C2 87 C3 AE 00 4F 3F C2 9C C3 A8 1C C2 7.......O?......

hexdump都具有使字节的位置,十六进制代码,然后(如果可能)字符的可打印形式的一个很好的属性正确的。

希望你的一些文本值将是可见的存在,这将给予一定的线索如何反向工程文件。

一旦你开始决定文件是如何构成的,您可以使用各种字符串操作员操作数据。例如,如果你发现你的文件是由空字节(b'\x00')分割成多个段,就可以得到这些部分这样的:

>>> sections = buf.split(b'\x00')

有很多的东西,你可能要学习当你深入挖掘,如字符编码,编码数(包括小尾数为整数和浮点编码浮点数)。你会想找到一些方法来外部验证你的结果。

祝你好运。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值