CTFre-V&NCTF2020-strangeCpp

3 篇文章 0 订阅
2 篇文章 0 订阅

https://buuoj.cn/challenges#[V&N2020%20%E5%85%AC%E5%BC%80%E8%B5%9B]strangeCpp

 

先使用一下exe,发现是貌似检测系统环境变量的程序

然后放入ida,定位一下他这个程序的主函数

可以看到引用了很多字符串,看一下他引用的字符串的位置:

然后有一个细节值得我们注意,那就是byte_140021008这段字符串被跳过去了,被一个很可疑的函数sub_140013580引用,我们跟踪进去看一下

其实根据第一个截图,就是主函数的截图,我们知道dword_140021190变量是一个与CPU数目有关的东西,但是其实不重要,重要的是,我们要让putchar这个实现,就是要让if这个判断能进入,也就是找到一个合适的dword_140021190变量的值,然后通过sub_140011384那个函数,让result=607052314

sub_140011384函数:

通过以上条件,写注册机:

byte_140021008 = [0x26, 0x2C, 0x21, 0x27, 0x3B, 0x0D, 4, 0x75, 0x68, 0x34, 0x28,0x25, 0x0E, 0x35, 0x2D, 0x69, 0x3D]
result=0
result_end=0

for dword_140021190 in range(14549743):
    result=(((dword_140021190<<8)^(dword_140021190>>12))*291)&0xFFFFFFFF
    if(result==607052314):
        result_end=dword_140021190
        break
print("theNum:%d"%dword_140021190)
flag=""
for i in range(0,len(byte_140021008)):
    flag=flag+chr((result_end^byte_140021008[i])&0xFF)
print(flag)

然后得到输出:

theNum:123456

flag{MD5(theNum)}

当dword_140021190=123456的时候,if条件能进入,得到flag是MD5(theNum)

顾名思义,我们要让123456进行MD5编码,然后得到最后的flag:

flag{e10adc3949ba59abbe56e057f20f883e}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值