BUUCTF luck_guy

IDA打开

shift+F12查看可疑字符串

双击OK, it's flag:

进入get_flag函数 F5查看伪c代码

慢慢搓代码

memset是一个初始化函数,作用是将某一块内存中的全部设置为指定的值。

strcat 是 C 语言标准库中的一个字符串拼接函数,它用于将一个字符串(source)拼接到另一个字符串(destination)的末尾。该函数定义在 `<string.h>` 头文件中。

s的值是由f1和f2拼接而成的

查看f1的值

f2为空值 看接下来的代码 case4的作用是将f2赋值 这里看了其他大佬的wp  学到了一个新的知识 即大小端存储

大端存储,是将数据的低位字节放到高地址处,高位字节放到低地址处。

小端存储,是将数据的低位字节放到低地址处,高位字节放到高地址处。
                        
这篇博客有更详细的介绍
https://blog.csdn.net/2401_84976395/article/details/138985113

根据以上知识 s的存储方式是小端存储 选中字符串按shift+E可以查看16进制 以此来判断是什么存储 由低地址到高低址 所以s是小端存储

s字符逆序存放得到正确的s

s=[0x69,0x63,0x75,0x67,0x60,0x6f,0x66,0x7f]

编写脚本

flag='GXY{do_not_'
 
s=[0x69,0x63,0x75,0x67,0x60,0x6f,0x66,0x7f]
a=''
for j in range(8):   #循环
    if  j % 2 == 1:
        a=chr(int(s[j])-2)
    else:
        a = chr(int(s[j]) - 1)
    flag+=a
print(flag)

得到flag

flag{do_not_hate_me}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值