欢迎您访问我爱IT技术网,今天小编为你分享的电脑教程是:防止程序被破解的一种方法,在平时使用电脑中总免不了某些软件的激活、甚至备份等,比如:辛辛苦苦写的程序没做好备份丢失了,那是很难受的事儿。本文针对这些诸多问题,由我爱IT技术网电脑教程小编,精心整理并收集网络上这些有用的知识分享给大家,注意知识来源于互联网,是有用的知识收集整理,如果你觉得有侵犯你的权利的,请你及时联系本站的相关负责人,我们会在第一时间为你处理,谢谢你的配合!
防止程序被破解的一种方法
近来,由于国人知识产权的意识较薄弱,很多高价软件在网络上都能找到所谓的破解版,而且这破解版不仅仅被破解了,还可能被修改了一些公司、作者信息之类的,这就会给软件的制作者或者制作公司带来极大的困扰,辛辛苦苦开发的产品被破解了,自己一分好处都得不到,反而别人还不知道是你开发的,这直接导致了国内的付费软件发展不起来,都去使用一些所谓的“免费”的软件。一些公司或作者为了利益可能会给这些所谓的“免费”的软件 加上一些各种各样的后门来保护自己的利益,或使用广告等手段达到收益的目的。这样可 能就会给使用者带来困扰,导致用户群的减少,从而又影响了整体的利益,直接造成了一个恶性循环。
相信大家对加壳这种方法也较了解了,但是只要程序可以在系统中运行,那么壳始终都是有脱下来的方法,而脱下来后我们可以轻松修改汇编代码。因此,我们必须在程序内部中做点手段才能防止程序被破解。
前期准备工作(包括相关工具或所使用的原料等)
Ollydbg(OD)
详细的具体步骤或操作方法
众所周知,很多破解是从字符串开始着手的,而我们一般在c++中使用字符串是直接写在函数参数中,而不是使用字符串指针,像这样:
这样,如果我们在Ollydbg(OD)中打开,我们一下就可以找到对应的代码:2

这样,我们可以通过修改汇编代码轻易的跳过这段代码,或者修改显示的内容等等。 假如我们现在使用另一种方法调用函数,通过字符串的函数指针,像这样(使用了一点 无意义的汇编是为了防止编译器优化代码,导致看不出效果):
—asm{
mov text. 0
mov title, 0 };
text=L〃验证失败〃; title=L"错误";
MessageBoxW(NULL, text, title, MB_OK | MB_ICONERROR);
这时,我们点开od看看:

原来可以直接看到的字符已经消失了。
这时,笔者想到了加密字符串的方法,常用的就是base64的算法了,但是base64就算加密后还是很容易被找到对应的ascii字符的密文和密匙从而进行修改破解。因此,我们需要一个可以便于加密和管理字符串的方法。由此,笔者再次想到了压缩数据。
不管用zlib或者lzma算法都可以很方便的压缩和解压缩字符串,我们只需要建立一张对应的字符串表就行了,同时我们要尽量保证字符串压缩解压缩算法不被轻易才出来就行了。
但是,问题又来了。我们很好地已经将字符串保护了起来,但是如果破解者在函数处下断点怎么办。这时我认为需要在函数前面包装一下,或者给函数下个钩子,在执行函数前先 检查有没有调试器的存在,如果有,那我们必须做一些伪装或者干脆不执行这个函数。但是请注意,检查是否有调试器存在最好不要直接调用IsDebugPresent,这是一及其愚蠢的做法,我们检查是否有调试器存在一般有几种方法:
以上就是关于防止程序被破解的一种方法的分享,如果你有更好的经验或者补充,请在下面评论框中发表你的答案。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
