某软件 2.5 破解版中问题的修复


写这篇文章仅供学习软件技术,不放任何链接。

某软件在网络上比较流行的 v2.5 破解版中有个小问题,比如在输入多行公式的时候,撤销公式反而变成了复制公式。这个功能影响还是比较大的,网络上有大神已经研究过并进行了相应的处理: j29778fcdg

但想一想这个事情比较蹊跷的,一个破解把正常的功能给破坏掉了,说明原先的破解就有问题。能不能找一下原来的补丁存在什么问题,直接在原来的补丁上动手脚呢?

对比一下看到只有一个函数不一样(所以还是没弄懂原作者的思路,只看到部分段里的数据不一样了):

func matching

简单对比一下,其实就是把 do-while 循环给打开了

func comparasion

disassemble result

还原回去,发现内存越界访问。

access violation

在这里打个断点,发现撤销时也用到了这个函数,猜测这个函数是一个通用的链表清理函数。因为没有完全清理完链表中的内容,发生了撤销时却复制内容的奇怪现象。

由于此时 EAX 为 0 ,推测数据结构中最后一个元素此位置为0。把 operator delete 这个对内存影响较小的函数忽略掉,腾出点位置专门给 EAX 写一个判断。

fix asm

重新运行程序,问题消失,破解程序没有其他问题了,这个修复方法要比 B 站文章里提到的简单一些。