- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件反破解技术经验
软件反破解技术经验共享软件的开发是一项非常困难的工作,有了投入,很可能还没有回报,或投入产出比过大。 在国内,您还必须应对软件被破解的情况。 所以相应的一些软件保护技术就产生了。以下是本人的一些经验: 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,改写一些公开的加壳器源码来自加壳,必须注意系统兼容性在Debug的手册里可以看到Debug工具的局限.?第一个局限是只能下4个内存区域的断点,每个断点不能控制超过两个字节,这样内存断点不能控制超过16个字节的区域.?第二个局限是对多线程只能同时跟踪一个线程假设你的注册部分有300行,你可以分成30个inline函数调用或MACRO(一定要inline),func1(),func2()...?func30().?将他们随意放到程序的各个部分,一定不能放在一起(自己能找到就行了)。不要用Memcpy等常用系统调用拷贝注册码,近可能自己写,像Memcpy很好写,性能差点无所谓。经过编译后inline函数展开,注册部分和其他代码混在一起,他要写出注册机就像大海里捞针,在几十万甚至上百万汇编代码里找出有用的注册部分。利用Debug的第一个局限最重要的一点是:注册码也不要放在一起,假设你的注册码是12位,千万不要用一个12位的数组放注册码,你可以在程序的不同位置定义12个全局字符变量,每个放一位,这样注册码在内存就不连续了。最好再加密处理一下(简单的字符异或就可以),验证时再解密。也不要用连续内存保存验证用到的变量,尽量将用到的验证临时变量分散定义在程序的不同处,再在验证中,不断转移一些值到其他变量中,对付暴力和Loader会比较有效。没有必要用复杂的加密算法,更容易成为追踪的目标。只要你将注册部分隐藏的足够好,也没有漏洞,你花1天写的加密算法,破解者可能会花100-1000倍的时间破解。大部分人都会放弃。你将注册做在一起,就像将你的财宝放在现代保险箱里,虽然非常坚固难以解密,对于开锁高手两分钟就打开了。而古代海盗用的方法是将财宝埋在海岛上,这样没有藏宝图,对应高手和低手都只有一条路,拿一把铁撬挖,可能要挖一
原创力文档


文档评论(0)