大多数机器的存储方式都是小端排序,小端序指的是数据的高位(偏左边的)放在内存中的高地址(偏右边的)处,这样会导致存放好的数据对于我们看来好像是“倒过来”的
大端序则是我们看上去从左到右的正常排序
例如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)