软件破解

来源:互联网 发布:吉他编曲软件 编辑:程序博客网 时间:2024/04/26 21:53
这几天在宿舍没事干,公司的活不好拿到学校里面来做,论文交给老师现在还没去问消息。而是突然想起来一件长久以来没有完成的任务----破解软件.
我一直在用一个桌面软件,做的很不错的国产软件,名字就不说了,很感谢作者。我想破解它并不是想拿出去传播,更不想用它去赚钱(当然也赚不到),只是想看看破解一个软件到底难不难,有多难。想想软件编程方面的一般知识都掌握得差不多了,那就动手吧。
首先把该软件备份一下,然后用w32dasm把可执行文件反汇编,该软件的帮助文档我已经完整地看过一遍了,估计不会有什么问题,可是还是出了问题,一打开 exe文件,w32dasm就自动退出,怎么回事?我试了几遍,都是一样。难道这样做不对,exe反汇编还是有问题,难道这个exe有什么办法能防止反汇编?可是我根本就没有执行任何它的代码啊,理论上说不通啊?
最后,我想到会不会是w32dasm的问题(按说这么成熟的软件应该不会有问题啊)?我决定到看雪论坛上学习一下。仔细地看了看它的几篇文章,里面提到了壳的问题,并且仔细地学习了一下壳的原理。感觉会不会是w32dasm对加了壳的可执行文件支持不好?不管怎么样,我还是要试一试。先下载了几个必要的工具:fileinfo,upx,等等。用fileinfo一看,果然是使用了upx加了壳,还好没有对壳进一步改动,使用upx轻松地就解了壳,我把脱了壳的可执行文件考贝回去,运行一下,还是可以用,说明脱壳没有问题。接下来要正式破解了。
我下载了另外一个调试工具:OllyIce,因为原理和w32dasm都差不多,我也没有仔细看它的帮助文档就开始了工作。这次顺利地就反汇编成功了(我又试了一下w32dasm,也成功了,可能还是原文件加了壳的原因)。面对着满屏幕的汇编代码有些不知所措,好在前段时间在兴唐实习的时候抽空看了看w32asm教程,静下心来仔细看看,也没有什么大的困难,不过要弄清楚软件的流程也并不是一件轻松的事,好在我的目标不算远大,还不需要弄清楚这些。我首先找到了程序的入口点,一步一步跟踪下去,发现调用了某个函数后出现了提醒注册的窗口,我原来想能不能看他的返回值得处理,然后改变相应的指令,试了好久,还是没成功。工作陷入了停顿。静心,不可浮躁,我提醒自己!还有什么办法呢?每次我在它的某个界面上按右键时,第二次出现的菜单里面会有一个菜单显示未注册,并禁止使用,按照一般的编程方法,都会是在响应事件时判断某个值,以便视情况决定出现的菜单。何不找下处理菜单的位置?我在ollyice的菜单上找了一会儿,才找到一个插件提供unicode文本搜索功能,仔细地看了看它的处理。在mov未注册字符串的语句前面有一句是mov注册时的字符串到寄存器,中间隔了将近20多条asm指令(想想高级语言也就一句话的功夫啊)!。在这句指令之前,确实有几条指令在比较一个内存数据的值和0的关系,如果是0,那么就装载未注册对应的菜单,果不其然,可是接下来该怎么办呢?我记下了该内存地址。又搜索了整个程序,还发现了很多地方有类似的逻辑,并且内存地址都是一样的,看来是猜对了!可是如何才能破解掉他呢?如果在这些菜单的处理中改变内存的值,那么还是会出现开启时的提醒注册对话框,并且有些功能说不定还是不能用,因为初始化主对话框时这个值还是0。看来还是得看看开启时的逻辑。我restart了程序(当然这不是第一次了),检查了开始时的代码。首先尝试不调用提醒的那个对话框,不行。因此我一个个地往上找,看看都调用了什么函数,因为肯定在此之前进行了判断。终于发现在调用一个函数的之前,先清空了一个变量的值,调用之后,又调用别的函数前有比较此变量的值,而此变量的地址就是刚才记下的值。接下来的工作就简单了,利用ultraedit修改exe文件,保存,覆盖原始文件,重启,OK!成功了!

将近弄了一天,幸好此软件的壳不复杂,还有以前的基本功还算凑合。总结:
心一定要静得下来
充分利用软件提供的功能

再次感谢软件的出品公司,感谢看雪论坛!
原创粉丝点击