bugku一道逆向题目分析

发布者:极安御信
发布于:2022-04-27 12:33

1.查看题目,得到的信息只有点击一万下,以及和和ce工具有关,先下载下来 

2.下载下来是一个exe,先查壳看看程序信息

vb写的无壳

3.运行一遍程序,看看流程

好家伙,要我点击一万次按钮才给我flag,不可能!整活!

4.分析:作者说点击一万次有flag,那我们可以猜想有两种可能,第一种:当按钮按下时程序会检测此时一个计数器变量的值是否大于一万,如果大于一万则显示flag。第二种:当按钮按下时程序会检测此时一个计数器变量的值是否等于一万,如果等于一万则显示flag。那我们依次验证我们的猜想。

猜想一:当按钮按下时程序会检测此时一个计数器变量的值是否大于一万,如果大于一万则显示flag

看到窗中左上角的数字随着按下按钮次数的增加而增加,作者又提及ce,这不得不逼我想起ce工具对数值变化的敏感啊。

那我们就打开ce进行内存搜索变化的数值,因为我们看到窗口左上脚的数值是一个整数,那我们就使用精确数字、四字节类型搜索

好家伙,首次扫描以后就只有300多的结果,那岂不是再变化几次数值就直接拿捏了吗?那我们接着通过按下按钮增加数值来继续搜索,为了增加搜索速度我们多按几次多增加点数值,这样可以排除一些偶合数据

!!!!既然数据不在了,我以为是哪里失误了我又用同样的方法重复了几次,发现结果是一样的(正如作者说的那句话,不好用的ce,怀疑是他写的坑),那此时说明肯定这个数据不是四字节类型,为了提高数据查找效率,我决定换一种方法搜索.

这次我才用未知的初始值、所有数据类型进行搜索


为了再次误入歧途,我不采用数值的增加或减少来跟踪数据,而是用变化与没变化来进行跟踪,经过几次数据的变与不变跟踪得到了29个数据,那我们先加入列表进行数值更拍筛选数值(这里我不建议二分法筛选,这样可以降低程序的奔溃率)

加入列表以后我们点击数值字段先把数据按照数值大小进行排序,通常这种4.5555.....E带e的数值我们可以先不用考虑,因为这大小就和我们寻找的很离谱

那我们就先找一些看起来是整数的数值进行筛选,运气比较好,第一个数值就筛选到了窗口左上角的变量

通过看这个数值,发现这个数值的单位1并不是窗口左上角显示的数值的单位一,那我们先不管,先随便改个大的数值去让窗口的数值超过一万就可以验证我们的猜想一了


改了一个500800单位发现窗口的值变为了25004了,但是没有跳出flag的提示,我按下按钮多次也没有,那我们的猜想一验证失败了,我们验证猜想二。

猜想二:当按钮按下时程序会检测此时一个计数器变量的值是否等于一万,如果等于一万则显示flag。

又猜想一的最后一步我们可以算出内存中的数值的多少单位等于窗口数值的多少单位,说干就干

经过简单一算得到内存中的数值200单位等于窗口数值的1单位

那我们改个窗口数值的9999个单位,也就是更改内存的数值等于200x9999

好家伙,一改完按下按钮还就弹出来了,同时也验证了我们的猜想二对了

F5这个数值(找出是什么访问了这个地址)

 

点开以后显示空白的,因为此时这个数据没有改变所以也不会有访问和改写的记录,我们再按下几次按钮就一定有了

 

十一.我们选择第二个(fstp和pop指令功能一样),点击显示反汇编程序

 

此时我们上下浏览便可以找到信息框的提示,我把这个flag提交以后发现不对,仔细一看我觉得这个更像是base64加密的字符串,于是我再进行了base64解密,发现也不对,我又试了很多常见的加密方式解密,但是都不对,无奈之下我点开了writeup才知道居然是base58加密,表示以前没接触过,但是通过base58解密以后便得到了flag,提交显示正确

十二.  再附上一个base58的介绍以及与base64的区别,也算是学习到了新的一种加密方式



声明:该文观点仅代表作者本人,转载请注明来自看雪