第50篇:使用OD逆向破解流光Fluxay扫描器各种限制(怀旧)

19d7d27c567983882d328f31900daf82.png

 Part1 前言 

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

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

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

 Part2 破解过程 

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

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

7c7fa98ccd5de199087e60b9a62315d2.png

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

504f91adb0d7c2c3511cd4dc29504631.png

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

  • 软件过期限制解除

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

cd3ef69392e5062e355de13c9f147247.png

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

1049d8ffccf6b9643496598590ac312b.png

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

db4e52386650123edf1cf68ed16f23a9.png

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

  • 数字验证解除

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

dd9d51539d325584a02dadae8fdb1c7d.png

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

a534e6fab0dc4214ce485c5f51556d1c.png

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

5dba8eb2400133da3b324cf9f81009fc.png

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

2628e40c9021b462a1834c6a40307066.png

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

8cbda9e505ad0d4ac9a99d67133a8f47.png

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

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

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

370dccd0cf6d8a289e01caeece1f4693.png

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

8ec5110f5d1bbbfb2a3265b480ca8985.png

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

bfce1efa279328feecb2711fc8b3e8b9.png

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

334873d0d61c3296162576429eb0da09.png

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

88f1eb7b27bf0637dd7179f5d9aa32b9.png

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

0db5ac3deb17abba793aa41f9e936cf5.png

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

4187e737d1e8e168e5f65e68851191a4.png

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

df956d38a4b57bb681ccb257ab6143d7.png

b19db89907039709217c17245488112d.png

 Part3 总结 

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

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

eaa3b8de02e7916b1385fa76abed7804.png

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

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

希潭实验室

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值