本文最后更新于 337 天前,其中的信息可能已经过时,如有错误可以直接在文章下留言
一道新手赛的题目,很简单。但是存在一个我不会的地方,可以记录一下。
逻辑很简单,如图
就是考查异或,但是看题目好像也有大小端序的考查
点进 array 可以看到,也是数值很大的十六进制数字,要和 0x12345678 进行异或,应该就可以得到 flag
一般我们将数字转换成字符都是用 python 中的 chr (),Ascii 码表的范围是 0~127,当然 chr () 函数还可以接收数值更大的参数,输出一些其其怪怪的字符。但是像这题的数值太大它会报错,如图
那怎么将我们异或后得到的数据转换成字符,转换成 flag 呢,答案就是 int.to_bytes () 函数,也就是说我们将这些大的数字转换成字节串,这点做密码的时候也是,大的数值一般都是转化成字节串。
Python 的 int.to_bytes () 函数用于将一个整数转换为指定长度的字节序列。语法
length
:指定字节序列的长度,必须是一个大于等于 0 的整数。byteorder
:指定字节序列的字节顺序,可以是'big'
或'little'
,分别代表大端序和小端序。signed
:可选参数,指定是否支持有符号数,默认为 False
,即只支持无符号数。
我们对上面的数据 array 按 d,然后可以发现第一个数据的 75 在高地址,然后也在高位,所以数据是小端序的模式,然后两个十六进制数字是一个字节,所以是一个数据是四个字节,然后写脚本解决。
脚本如下
然后再加个括号就是 flag,flag {llittl_Endian_a}