bugku-逆向-11、不好用的ce

下载程序,运行一下:
在这里插入图片描述

点确定,有会弹出一个新的窗口:
在这里插入图片描述

点击Command按钮,左上角的数字就会增加,大概是要我们点击一万次:
在这里插入图片描述

再用PEiD看一下有没有加壳:
在这里插入图片描述

并没有加壳,是MFC编程的小软件。所以我们用IDA打开,是没法查看伪代码的:
在这里插入图片描述

查看字符串也没有找到有用的信息,只有一个标题的From1:
在这里插入图片描述

直接用OD打开,动态调试:
在这里插入图片描述

MFC程序停在统一的外层入口处7770A9E0,直接Ctrl+G或者点击断点跳转到我们内层程序:
在这里插入图片描述

右键->查找->所有参考文本:

在这里插入图片描述

其实上面的DeZmqMUhRcP8NgJgzLPdXa就是加密后的flag,有人直接就知道它是flag了,但我开始没注意到,我是看到之前按我们运行程序的时候看到的字符串“点击一万次有flag”,点击它查看一下:
在这里插入图片描述

单步调试,发现程序调用了msvbvm60.rtcMsgBox(调用一个消息框):
在这里插入图片描述

运行了这行汇编之后就会显示这个框:
在这里插入图片描述

点击确定之后,就到了这一行代码:
在这里插入图片描述

再往下就是返回msvbvm60.66051D33的程序领空:
在这里插入图片描述

返回到msvbvm60.66051D33中调用工程4模块的函数:
在这里插入图片描述

之后就是在msvbvm60模块中逐层的返回、交叉调用:
在这里插入图片描述

最终再回到最里层的函数:
在这里插入图片描述

它再调用工程4模块的函数:
在这里插入图片描述

这个函数再跳转到比较点击次数最终输出函数,00401880:jmp 工程4.00401C80:
在这里插入图片描述

往下到00401E21:test ah,0x40; 判断点击的次数,决定跳转的方向,测试ah的第7位(0100 0000)是否为1。ah的第7位是1,则说明它已经计数到了一万次,则test的结果是1,ZF标志位置0,不跳转,输出flag;否则ah的第7位不是1,则说明它还没有计数到了一万次,则test的结果是0,ZF标志位置1,跳转,不输出flag。
00401E24:je short 工程4.00401E97; 跳转,不输出flag。JE看零标志位,zf = 1则JE跳转,ZF = 0则JE不跳
在这里插入图片描述

所以我们只要在这修改标志位ZF、修改0x40的大小或者修改JE等多种方法阻止程序的跳转,让它正常输出flag即可:
在这里插入图片描述

我们直接把ZF标志位修改成0,让程序不跳转输出flag:
在这里插入图片描述

DeZmqMUhRcP8NgJgzLPdXa明显是加密后的flag,开始以为是Base64,结果解码失败:
在这里插入图片描述

后面觉得可能是Base家族中的其他编码方式:base32、base16、base58、base91、base92、base36、base62、base85、base128、base52、base56、base58、base94。百度搜了一下,发现是Base58编码,找到一个Base8在线解码的网站:http://www.metools.info/code/c74.html
在这里插入图片描述

得到flag:flag{c1icktimes}。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值