python脚本:十六进制数据小端序转大端序

大多数机器的存储方式都是小端排序,小端序指的是数据的高位(偏左边的)放在内存中的高地址(偏右边的)处,这样会导致存放好的数据对于我们看来好像是“倒过来”的

大端序则是我们看上去从左到右的正常排序

例如0x12345678,它在内存中的存储顺序为:

| 0x78 | 0x56 | 0x34 | 0x12 |

因此使用工具对内存进行一些作业时(如逆向分析过程中提取到的密文),我们提取到的预想的数据并不是正常的顺序,必须先让其转换成大端序,再进行后续操作

当然,如果你要将大端序转成小端序,一样的脚本再跑一次就行了,逆置是相互的

import struct

def little_to_big(hex_value):
    # 打包成小端序然后立刻解包成大端序
    big_endian_bytes = struct.pack('<Q', hex_value)
    # 转换为16进制字符串并去除0x和L(长整型标识)
    big_endian_hex = big_endian_bytes.hex()
    # 每两个字符分隔
    splitted_hex = [big_endian_hex[i:i+2]
                    for i in range(0, len(big_endian_hex), 2)]
    # 加入0x前缀并以逗号和空格分隔
    formatted_hex = ', '.join(['0x' + x for x in splitted_hex])
    return formatted_hex


if __name__ == '__main__':
    hex_data = [
        0x364A65466C271216,
        0x2447243568082139,
        0x29323C0F5A1A7D60,
        0x4D647C3C45531544,
        0x74152339130F7024,
    ]
    for value in hex_data:
        res = little_to_big(value)
        print(res)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值