迷路 writeup——by c0smic

西普CTF-迷路-以夕阳落款

拿到程序后,首先运行一下,看看情况:

载入IDA,查看一下字符串,看到了Y0u win等字样,结合ollydbg动态分析之后,明白了程序的基本流程。

西普CTF-迷路-以夕阳落款

首先将获取的输入经atol()函数转为数字,并与92381221h做比较,之后对输入做md5并将结果与4850B7446BBB20AAD140E7B0A964A57D进行比较,一致则success。而经查询4850B7446BBB20AAD140E7B0A964A57D对应的明文是sakjflks。这样叫我如何是好?既要等于92381221h又要是sakjflsk,除此之外,sakjflsk经该程序md5之后有些位置为大写字母,有些为小写,要满足这些实在是不现实。

之后想对按钮下一个消息断点,从头看看是否忽略了什么东西。

西普CTF-迷路-以夕阳落款

结果看到了这个,原来里面有两个"输入(Input)"的button,od里ctrl+g搜索ShowWindow下断。

西普CTF-迷路-以夕阳落款

这里可以看到有一个按钮被hide了,把它的值00000000改成00000001即可。

西普CTF-迷路-以夕阳落款

这才是它正常的面貌。右边那个应该是在逗我。在GetWindowTextA处下断,od里逐步跟

西普CTF-迷路-以夕阳落款

发现这里是个很关键的地方,一言不合就跳到失败的地方去了,IDA里f5看看里面是什么

西普CTF-迷路-以夕阳落款

可以看到这是在判断输入是否满足基本格式OOCTF{里面有32位}。输入需要满足这种格式。满足这些条件后,程序运行到这里,调用函数00401860,且传入的参数正是{}里面的32位字符串。

西普CTF-迷路-以夕阳落款

经该函数处理后,得到另外一串字符串,并调用函数00402d06进行判断是否一致。

西普CTF-迷路-以夕阳落款

现在思路很清晰了,输入的字符串首先由函数00401740进行格式判断,满足格式后,再由函数00401860对{}中的32位数据进行处理,处理结果由函数00402d06判断是否等于b5h760h64R867618bBwB48BrW92H4w5r。

现在的关键就是函数00401860的过程,IDA里面看该函数的代码:

西普CTF-迷路-以夕阳落款

该函数对于字符串中的数字不做处理,字母转化成字母表中对应的0-25之间的数值,并由

西普CTF-迷路-以夕阳落款

进行处理,之后将得到的v9再转化成相应的字母,其中v5,v6的值用od跟的过程中可以看到,v6等于28,v5在之前由sub_41458e进行过处理,为3或5。

加密算法清楚了,解密即可,至于v5的值,3和5都试一下,5可以得到正确答案。

西普CTF-迷路-以夕阳落款
西普CTF-迷路-以夕阳落款

Flag:

温馨提示: 此处内容需要评论本文后刷新才能查看,支付2元即可直接查看所有Flag。

小广告:关于获取西普实验吧所有Flag请点击这里查看索引

查看所有Flag文章需要输入密码,需要获取文章密码的童鞋请扫描下面微信或支付宝二维码捐助至少2元(老哥,捐多捐少是个缘分)之后发送支付凭证号联系我获取,Flag大全地址:Flag大全

新功能:捐款的小伙伴请联系我把自己的注册邮箱加入网站白名单,可以免回复看到本站所有Flag

PS:本站不是实验吧的官方站点,纯粹是个人博客,收取Flag费用仅是维持服务器费用,做站不易,且行窃珍惜!

微信二维码:
支付宝二维码: