2024 LITCTF re 部分wp

forgotten message

附件拖入ida。明文

kablewy

打开url会卡死,查看源代码

有一些base64串,解码一下

继续解码。原来是在无限循环输出,难怪卡死。解出的话一个一个拼接即可

Burger Reviewer

文本编辑器打开附件

check都比较简单,直接手撕

revsite1

wasm逆向,解出占运气。打开网页,F12

为鼠标click事件下断点或者在wasm文件的checkflag函数下断点

click事件中可以发现有一个指针。问gpt知道还把这个指针写入到wasm的内存里了

进入wasm,发现果然是输入字符串

继续调试,发现这三条代码看不懂,gpt也没解释清楚

查看var3处的内容,直接就出了

revsite2

打开url,有一个按钮,点击会新开一个标签页,播放老外们最喜欢的MV,同时分数+1

分数需要1e18即一百亿亿。F12打开控制台

试过用selenium库模拟点击并且通过关闭新页面的方式阻止打开新页面,但是次数并不增加。试过改js代码写个循环调用visit_ad方法并用本地文件替换,但是单是循环1000000次内存就到百分百占用直接卡死了。逃不了,只能分析,断点下好,进入调试

向下翻就能找到关键比较

诶,我有一计,试试能不能patch这个1e18。把wasm文件另存在本地,才发现居然是二进制文件

这里可以用ida9.0反汇编。函数很多,重点看visit_ad函数。当然,反编译是别想了,而且也不能patch

鼠标指针放在1e18上再转到hex view就能找到这句汇编对应的机器码

问题是不知道是怎么解码的,只能试着改改看。找到偏移后,修改在winhex里进行。试过多种修改方式后,发现下面这样可以把1e18修改为32

保存修改。另外,保存html、js文件,和wasm文件放在同一目录下

然后浏览器打开html文件,就能正常运行了。点击到31后再打开控制台

步过两个call后,发现调试自动结束了,并且报错了

不是哥们,真要点1e18次啊。wasm调用函数的传参是通过参数入栈实现的,查看函数的参数大致能猜出来函数的作用

那么怎么确定应该是哪个值对应的字符需要左移呢,回溯local2地址的值可以发现由内存地址[0x10310]的值决定

找找地址[0x10310]的值什么时候被修改,并且回溯计算。调试发现内存[0x10320]的值刚好就是分数

地址[0x10320]的值应该是1e18。写个脚本算算地址[0x10310]的值。计算通过数学公式(立方数列求和和平方数列求和)简化,具体细节由调试确定。另外,每次与[0x10310]有关的运算都有两部分,另一部分是左移的偏移,这里也卡了一段时间,明明都得到’}’了。明白这些之后,剩下的就是手撕一下运算

总结

         玩服务器,找dk盾,更适合ctfer宝宝的体质

        二进制确实很需要耐心,无论是rev还是pwn,特别是在面对大量汇编,甚至是大量机器码的情况下。一点一点做,只要方向方法对,总会得到结果的。不要害怕犯错,只要有备份,就还能从头再来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值