共享软件的开发是一项非常困难的工作,有了投入,很可能还没有回报,或投入产出比过大。
在国内,您还必须应对软件被破解的情况。
所以相应的一些软件保护技术就产生了。以下是本人的一些经验:
1.对软件中重要的数据进行加密变换,如何实现呢,要知道,反汇编工具,最大的好处是通过分析字符串找到
突破口,我们可以将软件中使用的字符串找出来,放到一个文件中,一行一个,
再写一个小工具将其加密,在软件压缩后,将变换后内容贴到软件后面。在delphi中用memorystream装载即可。
这样脱了软件壳,肯定无法正常工作
加密代码段,方法不详
哪位知道,请告知一二。
2。检查进程的父进程,如果不是explorer进程,就是被别的程序装载,在win98下容易实现。使用createtoolhelp32snapshort即可
这样还可对一些脱壳机起作用,使其无法脱壳
如果EXE文件打开方式被更改,也会出现这种情况
3.delphi软件的保护,基于delphi为核心的软件将被反编绎,但以mck为核心编绎的软件则在dede中至今还是很安全的。很多情况下可
以直接在mck工程中引用vcl但有些时候则无效。
4使用readprocessmemory,writeprocessmemory来防破解,软件运行后,可以随时检查软件中某些地址是否被爆破手PATCH了,对于设置时间过
期的,可以在软件中让叛断过期的代码永远不成立,这样可以迷惑一些破解新手,没时间限制吧,过了时间,软件可以用writeprocessmemory
改写此段代码,而实现时间限制
5在所有进程中检查是否有特定名称,如trw2000这类,但软件不断增加,难免误判,所以可以在进程中查找特征码方法,将网上一些精典工具
采集其中特征码,软件可以更安全。对于查病毒木马软件很适用,不需增加扫描引擎。
6利用时间差,如可用gettickcount之类,在软件装载起始处与结束处比较,超过了某一数值,就认为被调试,如果软件中要装载可变内容的数
据时,要将判断放到前面去。此法还要考虑兼容性,要取一个较大的值。
7.锁住键盘,鼠标,防止被调试,user32.dll中有个blockinput即可调用。
8.将功能,注册判断放到DLL中去,脱壳工具大多是对exe文件起作用,DLL则很少有脱壳器。
9.crc校验法,可在任意时候检查自身是否被修改。发现异常删除自已。不要来个提示什么的,那将引导对软件的逆向工程
10.对不同的操作系统进行不同的处理,判断代码具随机性等能有效地避免被'成功'的破解。
破解者不一定在所有的系统下去测试一个被破解的程序,这样将破解程序弄到另一个系统下将被删除。
11用createfilea,_lopen之类来打开sice,ntsice的句柄,检查调试器是否被驻留。
12用findwindow查找特定软件的标题,类名,关闭该软件或退出自已。
13软件中加载无效内容,让反汇编器失效。
{本人还未成功实现)
14,改写一些公开的加壳器源码来自加壳,必须注意系统兼容性
15....待续
最后,在决定对软件进行保护时,是否应当改进软件的功能,这样可能会有更多的用户购买。