声明
本文只是科普和供专业人员在合法范围内进行研究,严禁学习用于非法用途。由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本公众号及文章作者不为此承担任何责任。
前言
Beyond Security出品的beSTORM是商业市场上最通用的模糊测试工具之一。无需访问源代码即可执行测试,几乎可与任何应用程序、协议、语言乃至硬件一起工作,甚至还可以测试为特定行业和特种应用设计的设备和程序。比如物联网、过程控制应用、与can总线兼容的汽车应用、航空工具和低耗能蓝牙设备。
多功能性是beSTORM的最为突出的价值所在,程序员只需学习使用单个界面,就可以针对几乎无限数量的设备或应用程序发起模糊测试。beSTORM测试平台预置了250个测试模块,并且还能轻松地添加新的模块,以覆盖另类或专有的应用程序。
此外,beSTORM还可以作为云服务访问。通过这种方式,一个大型机构可以购买该平台,然后向不同地点的多个用户提供模测工具的使用。
但是beSTORM的试用版只能试用30分钟,如下图。
想要使用更久,除了充钱就只能尝试逆向分析,看看能否绕过试用限制了。由于过程比较简单,本文更适合一些初学逆向分析的朋友们观看。
软件分析
使用exeinfo打开,发现是32位无壳的程序。
而后通过IDA打开进行分析,通过搜索字符串找到一串这样的字符。
这正是报错的地方。
查看其引用继续分析。发现其在0445F71
位置使用了 该字符串,查看附近代码
取当前时间和qword_64D980
处的数据比较。而qword_64D980
处的数据是通过上面的if函数获取值的。判断dword_64D988
的位置是否为0,当其为0 时走入if中会把64D988
置为1,并且把qword_64D980
的值设置为当前时间,简单来说就是软件第一次运行时会取当前时间,之后在运行过程中发现当前和刚运行的时候的时间差大于1980则退出。
至此摸清了时间检测的逻辑,下一步就是绕过限制了。
绕过限制
这里可以通过对程序patch的方式来完成绕过限制,最简单的方法就是改一个非常大的时间差。
以下是比较时间差处的汇编,直接把7BC改大。
点开hex view
这里直接把BC 07 00 00
改成我们想要的时间差。
改完之后的效果如下
我们尝试替换掉程序跑一下,看看还会不会弹出试用期30分钟的提示。结果发现并不能成功。
进一步进行排除,我把比较的时间改为较小数值,并且修改了snprintf函数的参数,把30改成了31,如下图所示。
改完之后,还是出现弹框如下图,并且时间提示信息仍然是30不是31.
根据运行结果,说明我们修改的地方错了,真正的检测可能不在此处。
再回头看字符串beSTORM Trial cannot run test for more than %d minutes.
的引用。发现我们看漏了一个,有另一块的代码使用了它,走进来看一下。
和之前我们分析的那段代码一样的逻辑,只不过这次的时间差是0x708 正好是 1800秒,至此确认这部分是真正的验证代码。接着我们做一些小修改尝试一下。
更改后如图所示。
再次进行尝试。经过三十分钟后没有再退出,成功。
逆向中,需要耐心以及细心,不够细心的话很可能像我一样忽略掉关键的信息。
结语
以我的视角来看逆向分析,分为两个过程,第一部分过程是定位程序的检测代码位置,例如一些需要license的程序判断license的位置。第二部分过程是修改程序或者编写代码完成绕过限制的效果,例如本文中的patch二进制程序,又或者是编写注册机等等。
原文始发于微信公众号(BeFun安全实验室):beSTROM绕过试用限制
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论