[NewStarCTF 2023]Endian
本文最后更新于132 天前,其中的信息可能已经过时,如有错误可以直接在文章下留言

一道新手赛的题目,很简单。但是存在一个我不会的地方,可以记录一下。

逻辑很简单,如图

就是考查异或,但是看题目好像也有大小端序的考查

点进array可以看到,也是数值很大的十六进制数字,要和0x12345678进行异或,应该就可以得到flag

一般我们将数字转换成字符都是用python中的chr(),Ascii码表的范围是0~127,当然chr()函数还可以接收数值更大的参数,输出一些其其怪怪的字符。但是像这题的数值太大它会报错,如图

那怎么将我们异或后得到的数据转换成字符,转换成flag呢,答案就是int.to_bytes()函数,也就是说我们将这些大的数字转换成字节串,这点做密码的时候也是,大的数值一般都是转化成字节串。

Python的int.to_bytes()函数用于将一个整数转换为指定长度的字节序列。语法

int.to_bytes(length, byteorder, signed=False)

length:指定字节序列的长度,必须是一个大于等于0的整数。
byteorder:指定字节序列的字节顺序,可以是'big''little',分别代表大端序和小端序。
signed:可选参数,指定是否支持有符号数,默认为False,即只支持无符号数。

我们对上面的数据array按d,然后可以发现第一个数据的75在高地址,然后也在高位,所以数据是小端序的模式,然后两个十六进制数字是一个字节,所以是一个数据是四个字节,然后写脚本解决。

脚本如下

data=[0x75553A1E,0x7B583A03,0x4D58220C,0x7B50383D,0x736B3819]
flag=b''
for i in range(5):
    flag+=(data[i]^0x12345678).to_bytes(4,'little')
print(flag)
#b'flag{llittl_Endian_a'

然后再加个括号就是flag,flag{llittl_Endian_a}

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇