软件保护原理与实现

软件保护原理与实现

ID:41122319

大小:99.50 KB

页数:8页

时间:2019-08-17

软件保护原理与实现_第1页
软件保护原理与实现_第2页
软件保护原理与实现_第3页
软件保护原理与实现_第4页
软件保护原理与实现_第5页
资源描述:

《软件保护原理与实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、0、理解函数与实现见“理解函数调用”一、软件防拷贝:从一台机器拷贝到另一台机器失败回忆:从一个软盘或光盘拷贝到另一个软盘或光盘失败(做记号)。避免软件的克隆。原理:利用机器上的部件的个性。例如CPU的ID,硬盘的序列号,网卡MAC地址等。完成者:安装程序。过程:安装程序将部件的个性值保存在某个位置,然后完成安装;应用程序启动时读部件的个性并与安装程序设定的部件的个性值进行比较,相等则继续运行,否则退出。部件的个性值藏在哪里:注册表(优点:好操作;缺点:重装系统后数据软件不能运行)。磁盘保留扇区(优点:隐藏好,但杀毒

2、软件可能不让;缺点:完全格式化后软件不能运行);文件内部(最好),单独一个文件(要使用一些随机数据)。举例:利用分区的序列号保证软件只能在该分区运行。1)、设计安装程序setup.exe2)、在被保护程序中设置分析代码举例:“取CPU和硬盘ID值”二、防止文件名被修改、所在目录被移动:检测文件名与目录名方法:先保存当前程序的文件名与全路径,运行时比较。1.方法1charpBuf[MAX_PATH];//存放路径的变量GetCurrentDirectory(MAX_PATH,pBuf);//获取程序的当前目录strc

3、at(pBuf,"\");strcat(pBuf,AfxGetApp()->m_pszExeName);strcat(pBuf,".exe");//获取程序的全文件名2.方法2//函数返回应用程序所在的路径CStringCClientApp::ReturnPath(){CStringsPath;GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);sPath.ReleaseBuffer();intnPos;nPos=sPath.

4、ReverseFind('\');sPath=sPath.Left(nPos);returnsPath;}三、利用扇区防拷贝软件设计1、目的:保护公司设计的软件不会被非法复制。2、原理:分析磁盘结构,在磁盘上寻找保留扇区(系统未使用,不会被覆盖的)扇区。安装程序使用底层办法将某个密码写入扇区。被保护程序启动时读该扇区密码,与设定的密码相同,则正常运行,否则退出。3、步骤:设计安装程序,负责分析磁盘、寻找保留扇区、写入密码;设计被保护程序,负责读指定扇区的密码并进行比较。本处利用了物理硬盘的第60磁道写入密码“he

5、llo”。四、检测父进程反调试【防止调试】见“软件注册与保护2检测父亲进程保护自己”。反调试措施是软件开发者为防止开发的软件被破解或关键代码被他人非法攫取的一种手段。反调试措施很多,检测父进程反调试是DOS时代就有的技术,但Windows下未提供直接的解决方法,在目前流行的介绍软件保护技术的书籍中也未作介绍。1.原理一般情况下,在资源管理器下用鼠标双击或运行cmd.exe用键盘输入exe文件名来执行一个可执行文件。前者建立进程的父进程为explorer.exe,后者为cmd.exe。如果要防止受保护的可执行文件被

6、分析调试,在其被执行时,可以检测它的父进程是否为explorer.exe或cmd.exe,若是,则当前进程没有被调试,否则可能被调试,需要采取一定的反调试措施。在DOS下分析当前进程的父进程时,可以到程序段前缀PSP中去找,对于DOS程序的exe文件,PSP在代码段的前一个段,紧靠代码段,若是com文件,则在IP寄存器0~99H区域。PSP的大小为100H字节。检测Windows程序的父进程比DOS复杂得多,微软没有提供现成的函数。但从几个其它用途的函数从侧面可以实现。函数Process32First和Proces

7、s32Next用于列举当前正在内存中的进程,它们要用到一个结构PROCESSENTRY32。该结构中有两个字段th32ProcessID和th32ParentProcessID,分别描述一个进程的ID值和该进程的父进程的ID值。从父进程ID值可以获取父进程的路径名。如果发现父进程的文件不是explorer.exe或cmd.exe,则可以采取反分析措施。反分析措施可以有两种方法。一种是当前进程退出,使其无法继续分析下去。另一种是破坏某些关键字节,让其调试出现错误。2.检测父进程实现技术以一个简单的对话框程序来分析其过

8、程。1)包含相应文件#include#include"psapi.h"#pragmacomment(lib,"psapi")因为Process32First等函数包含在tlhelp32.h中,GetModuleFileNameEx函数包含在文件psapi.h中。2)枚举所有进程的ID值BOOLCFatherPApp::InitInst

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。