第50篇:使用OD逆向破解流光Fluxay扫描器各种限制(怀旧)
2023-2-5 21:46:24 Author: ABC123安全研究实验室(查看原文) 阅读量:5 收藏

 Part1 前言 

大家好,我是ABC_123,最近在整理之前用过的工具,发现了大学时期曾经用过的小榕写的扫描器“流光Fluxay”,一晃15年过去了,这个工具当年在国外的名气也是响当当的,想起来了那时候研究技术的单纯和快乐。

我收集了好几个流光扫描器的版本,发现有几个1999年和2000年的流光版本有各种限制,导致软件打不开了,可我还想再用一下。在年前把王爽老师的《汇编语言》重新看了一遍,又看了一些都快忘干净的逆向破解教程,于是就使用OllyDbg尝试解除了该软件的各种限制,正好练练手。

接下来就讲一讲具体的破解过程,我尽可能讲得详细些,适合新手入门。总共需要破解3处限制:1、软件启动时的“用户调查表”;2、数字签名校验;3、多处软件过期校验。

 Part2 破解过程 

  • 去掉“用户调查表”界面

软件打开后会有一个“用户调查表”界面,刚开始这个界面就把我给难住了,找关键字、找API函数、查找堆栈的窗口函数都不行,一通下断点一直走下去就走进类似于“PeekMessageW”的消息队列死循环。

最后想了个方法,出现“用户调查表”界面后,在OllyDbg上点击“暂停”按钮,然后按“Alt+F9”,从系统领空返回到程序的领空,很快找到关键跳转,然后在00407D19处下断点调试。

接下来将00407D19处的窗口给NOP掉,OD重新载入发现,第一个“用户调查表”窗口已经被去掉了。

  • 软件过期限制解除

将去掉“用户调查表”的程序保存为另一个exe文件,双击运行,直接提示“软件过期”,接下来就是去掉这个限制。

各种搜索关键字发现找不到,怎么办呢?经过思考,出现“流光2001已经到期”之后,程序会退出,那可以先将“程序退出”的功能给去掉,OllyDbg一直跟到004060B3处,发现了msvcrt.exit标记,发现了退出功能代码,在此给nop掉。

此时发现,软件仍然提示过期,但是不会退出了,说明修改成功。接下来猜想,退出代码上面必然是各种关键跳或者关键call,所以退出指令之前的几个jmp跳转指令全部打上断点,重新动态调试。

最终发现在0040606B处,将jle有条件跳转改为jmp无条件跳转,即可成功解除“软件过期”提示。

  • 数字验证解除

接下来继续运行流光2000,这时候,会提示“数字验证失败”,说明作者怕软件被捆绑后门,进行了校验。

为了解除这个“数字验证”,首先点击“确定”按钮,然后一路单步F8跟到“msvcrt.ext”退出提示,然后使用OD查看之前的汇编指令,发现了关键跳转所在的位置,同样将附近的4、5个跳转全部下断点,重新用OllyDbg动态调试。

最终经过反复测试,发现将00406875处的跳转改成jmp无条件跳转,即可绕过“数字验证”。

至此,已经将流光2000的所有限制全部解除(这里发现有时候还是会提示软件过期,但是在win10操作系统下不会提示,我也就不再花费时间去解除这些限制了)。

重新看一下这个流光老版本的界面吧,怀旧一下。

  • 流光1999年版本的限制解除

接下来破解一个网上能搜索到的最老的1999年版本的流光。有了前面的参考,破解起来会容易很多,毕竟一个软件研发者的写代码的习惯都是一致的,因而我们的破解思路也应该是一致的

同样出现了一个“流光II用户调查表”,但是这个界面和前面的不一样,前面的破解方法失效。这里我猜想一个软件开发人员,研发习惯都是一样的,所以我重新看了一下前面刚刚讲过的流光2001的破解启动界面的关键call附近有啥重要标记,发现有一处“Software\Banyet\FluXay”字符串,所以我们直接在流光1999软件中搜索这个字符串吧,猜想流光1999的关键call也在这个字符串附近。

接下来搜索“Software\Banyet\FluXay”,果然不出所料,存在这个字符串,接下来打上断点。

在当前断点之后很容易就找到了关键call,在004047D5处,将此处的call给nop掉。

第一个启动界面就被去掉了,接下来熟悉的界面出现了,好怀旧的界面啊。

点击“我同意”按钮之后,熟悉的“数字验证失败”又出现了。

这个界面使用前面的破解方法就不行了,猜想后面的功能实现不一样,接下来使用OD按下Ctrl+F8自动单步走,发现最后会陷入PeekMessageA消息队列的死循环。

接下来怎么办呢,我想了各种办法,最终用了一个废力但是效果不错的方法,我找了几个参考关键字,在关键字附近的关键跳都打上断点,然后F8单步走,凭感觉和经验在遇到的关键跳附近都打上断点,总共打了10几个断点,反复动态调试,终于有一个关键断点被找到了,于是将0043784C处改成jmp无条件跳转。

至此流光1999年的这个版本限制完全解除,看一下当年小榕大神的作品。

 Part3 总结 

1.   无意中发现找到msvcrt.exit退出指令,向上找关键跳和关键call,这种方法效果不错。

2.   逆向破解方面如果有软件编写经验会更好,上述我的破解过程,完全是按照研发人员写代码的流程来思考和破解的。

公众号专注于网络安全技术分享,包括APT实战分析、红队攻防、蓝队分析、渗透测试、代码审计等,每周一篇,99%原创,敬请关注。

Contact me: 0day123abc#gmail.com(replace # with @)


文章来源: http://mp.weixin.qq.com/s?__biz=MzkzMjI1NjI3Ng==&mid=2247484949&idx=1&sn=add5842acd5497c763b056017b1a8ac6&chksm=c25fc96ef5284078753ffabd1951ff0e49e755c279296ca98545464fbdc7fa8f248d20de3eef#rd
如有侵权请联系:admin#unsafe.sh