re -20 buuctf findKey

findKey

关于花指令的文章:
1
2
3

拿到文件拖入ida后
在这里插入图片描述
发现未被反编译,可能存在花指令
在这里插入图片描述
找到花指令后,nop掉下一行的重复指令
在这里插入图片描述
将其保存为可执行文件
在这里插入图片描述
在这里插入图片描述
保存后将修改好的程序拖入ida
在这里插入图片描述
文件已经被反编译成功
发现sub_401005的参数全部已知,跟进分析
在这里插入图片描述
a2通过指针赋值,该函数为Str字符串改值,也就是str与v12相互异或:

s = '0kk`d1a`55k222k2a776jbfgd`06cjjb'
b = ord('S')
for i in range(len(s)):
    print(chr(ord(s[i])^b),end='')

得到字符串:c8837b23ff8aaa8a2dde915473ce0991

在if判断中将str与pbData比较,所以观察pbData数据
在这里插入图片描述
得知pbData长度<=6,跟进sub_40101E函数
在这里插入图片描述
CryptCreateHash(phProv, 0x8003u, 0, 0, &phHash)这句话等价于md5加密,在想到str也确实是32位小写,md5解密得到:123321
本以为flag得到了,答案错了。
在这里插入图片描述
再想到if中的语句,MessageBoxA是弹出对话框函数,if后v11也被弹出,而v11被sub_401005处理过,跟进
在这里插入图片描述
先将第一个参数的数据提出
0x57,0x5E,0x52,0x54,0x49,0x5F,0x01,0x6D,0x69,0x46,0x02,0x6E,0x5F,0x02,0x6C,0x575B,0x54,0x4C

在这里插入图片描述
也是一次异或操作:

a = [0x57,0x5E,0x52,0x54,0x49,0x5F,0x01,0x6D,0x69,0x46,0x02,0x6E,0x5F,0x02,0x6C,0x57,0x5B,0x54,0x4C]
b = '123321'
for i in range(len(a)):
    print(chr(a[i]^ord(b[i%6])),end='')

得到flag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值