逆向刷题笔记1:BUUCTF-xor

下载题目文件,拖到IDA中打开,找到main函数。

F5查看伪代码。

用户先输入flag且长度必须是33,否则报错。

将flag中第二个字符开始,与前一个字符异或,得到__b,如果__b与global的前33位完全相等,则输出Success。

以上就是程序运行过程。

由此可以得知,只要知道global的值,就可以逆推出flag。

双击glabal查看,值如下:

得到global,就可以开始编写Python脚本解flag:

s = ['f',0xA,'k',0xC,'w','&','O','.','@',0x11,'x',0xD,'Z',';','U',0x11,'p',0x19,'F',0x1F,'v','"','M','#','D',0xE,'g',6,'h',0xF,'G','2','O']
                                                    #注意'O'不是'0'
flag = 'f'
a = 0
b = 0

for i in range(len(s)-1):
    if isinstance(s[i],str): a = ord(s[i])          #判断s[i]是否为字符型,如果是,则转化为Unicode数值
    else: a = s[i]
    if isinstance(s[i+1],str): b = ord(s[i+1])      #判断s[i+1]是否为字符型,如果是,则转化为Unicode数值
    else: b = s[i+1]
    flag += chr(a ^ b)                              #将a和b异或的结果转化为字符型并附加到flag

print(flag)

运行脚本,得到flag{QianQiuWanDai_YiTongJiangHu} ,也就是本题的flag。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值