大多数机器的存储方式都是小端排序,小端序指的是数据的高位(偏左边的)放在内存中的高地址(偏右边的)处,这样会导致存放好的数据对于我们看来好像是“倒过来”的
大端序则是我们看上去从左到右的正常排序
例如0x12345678,它在内存中的存储顺序为:
| 0x78 | 0x56 | 0x34 | 0x12 |
因此使用工具对内存进行一些作业时(如逆向分析过程中提取到的密文),我们提取到的预想的数据并不是正常的顺序,必须先让其转换成大端序,再进行后续操作
当然,如果你要将大端序转成小端序,一样的脚本再跑一次就行了,逆置是相互的
import structdef 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_hexif __name__ == '__main__':hex_data = [0x364A65466C271216,0x2447243568082139,0x29323C0F5A1A7D60,0x4D647C3C45531544,0x74152339130F7024,]for value in hex_data:res = little_to_big(value)print(res)