新手ctf逆向-----BUU [V&N2020 公开赛]strangeCpp WP

新手ctf逆向-----[V&N2020 公开赛]strangeCpp WP

#前言

第一篇文章纪念一下,学习逆向已有大半年了,但因疫情影响,本身能力还是很垃圾,写写博客,一是为了在刷题之余放松一下,二是前人栽树后人乘凉,自己看了不少的WP,也为后来者留下一些糟粕仅供参考,这是今天做的一道题,确实如名字所示中间有点奇怪。

找函数

找了一手函数列表没有main函数在这里插入图片描述所以没办法shift+f12查一下关键词

在这里插入图片描述仿佛直接看见了flag,实际并不是,空欢喜一场,但点进去貌似是主函数
0000000140021008 aUh45IOm        db '&,!',27h,';',0Dh,4,'uh4(%',0Eh,'5-i=om',0    就这一行但其实仔细看下来并没有flag函数,只是个戏弄你的函数,但是在点开27到33行这几行的数据段的时候,发现在下面有一串奇怪的字符,嗯,肯定有东西,往上找调用它的函数

分析分析

在这里插入图片描述就这个函数,看到putchar函数里面有刚刚看见的字符串,嗯,有flag那味儿了。。。。。。
从尾开始搞起,打印的肯定是flag了,就是dword_140021190这一段和刚刚找到的字符串逐个异或,然后就是找dword_140021190这一段是啥了
继续往上看,sub_140011384这个函数对它肯定做了什么事情,点进去瞅瞅
在这里插入图片描述逻辑也很清楚,有dword_140021190最开始的值进行了位移、乘法得到了dword_140021190最终的这个值,但是我们并不知道最开始的值是啥,回到最开始的函数找线索,
在这里插入图片描述第21行有对dword_140021190进行限制,那我们就可以写脚本了,在那个范围内一点一点试就完了

写脚本

for v8 in range(14549743):
    v7= (((v8 << 8) ^ (v8 >> 12))*291)&0xFFFFFFFF
    if (v7 == 607052314):
        print (v8)
        break
enc = [0x26, 0x2C, 0x21, 0x27, 0x3B, 0x0D, 4, 0x75, 0x68, 0x34, 0x28,
       0x25, 0x0E, 0x35, 0x2D, 0x69, 0x3D]
flag=""
for i in enc:
    flag +=chr((v8^i)&0xFF)
    print(flag)

在这里插入图片描述v8=123456,被我写的垃圾代码打印的东西盖住了
代码还是非常简单的,但是那个3行的0xFFFFFFFF,11行的0xFF是我写这道题学到的东西。刚开始我并没有写这俩与运算,但是确实,没有这俩与运算,根本跑不出来。我百思不得其解,最后没办法了,问吧!
学长说是因为v8和flag溢出了,必须对变量进行限制,0xFFFFFFF是最大32个字节,0xFF是最大8个字节,学到了学到了,以后写脚本得注意注意。。。。。。

出FLAG!!!!

把123456在线md5解密一下就出来了
在这里插入图片描述

flag{e10adc3949ba59abbe56e057f20f883e}``

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值