一个CTF比赛引发的“血案”-2019.11.3

序言;最近在一个比赛中又成功的认识到自己是个菜鸡的不争事实。那里面有几道有关python的逆向题目。然后发掘到了python的庞大雨力量。不过由于这个比赛还没有结束,我们就先大概说说这个知识点。

python中的struct模块

首先大致介绍一下这个模块:当我们在网络中通信的时候大多数的时候数据是以二进制流传递的,又由于我们把数据分为了好多种,譬如:整形、字符等。这个时候我们需要一种机制来把这些系统的整理到一起,方便我们后续的操作。

打包和解包(Packing and Unpacking)

struct.pack(fmt,v1,v2,…)
struct.unpack(fmt,string)

就例如你要打包的数据为:values=(1,‘abc’,2.7)
那么struct.struct(‘I3sf’)
I 表示一个int型数据–>1
3s 表示三个字符–>abc
f 表示一个浮点数–>2.7
但是这里指的注意的是在打包和解包的过程中float类型的数据的精度可能发生变化。

接着看我遇到的这个
struct.unpack(’<I’,另一个参数)
这个==<I==到底是什么意思呢?
原来是由于struct模块也提供了自定义字节顺序的功能,可以指定大端存储、小端存储等特定的字节顺序。这一功能对于底层通信是十分重要的,不同的字节顺序和存储方式也会导致字节大小的不同。例如采用小端存储 s = struct.Struct(’<I3sf’)就可以了。接下来附上一幅图片(这个图片来自网上)

@ 和 = 之间的区别:两者都使用本机字节顺序,但后者的大小和对齐是标准化的。

当网络字节顺序不确定时,可采用 !。

无法指示非本机字节的顺序(强制字节交换);只能使用适当的 < 或 > 选项

填充仅在连续的结构成员之间自动添加。在编码结构的开头或结尾没有添加填充。

使用非原生大小和对齐时,不添加填充,例如,使用 <,>,= 和 !。

要将结构的末尾与特定类型的对齐要求对齐,请使用重复计数为零的该类型的代码结束格式。

这次就先写到这里,还有个Unicorn引擎后面再写吧!
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值