自我保护第一课加密与防破解
自我保护第一课加密与防破解
本文转自兄弟软件论坛,感谢楼主!
本文为全中文编写,不需要有PE文件格式知识,不需要掌握汇编或C语言的编程技巧,一些加密算法直接由易语言提供,特殊的加密算法大家可以翻译C语言代码、汇编代码或VB代码。 本文中将“Cracker”一词翻译为“奸人”,意为“奸邪小人”之义。本人对破解者一向深恶痛绝,有人说中国的软件发展中破解者有一份功劳,可我说这话不对,看看因盗版而产生的微软对操作系统及软件业的垄断,国内软件业在盗版的夹缝中生存……,如此下去,软件作者没有收益,将不再会有优秀的软件推出。防止盗版,匹夫有责,我想通过本书的推出可以加强易语言用户的加密能力,将盗版杀死在大家共同的手中。 随着采用易语言编制程序的人们越来越多,写一个软件易被奸人破解的情况也越来越多了,有个别用户甚至于怀疑易语言是否有安全性。从技术性上来说,我只能说加密技术与编程语言无关,一个编程语言的安全性一般指所生成的机器码是否稳定、可靠,而不是防破解方面,如果想要很好地防止破解,那么掌握一门加密技术是非常必要的。 破解技术 反破解技术1 反破解技术2 反破解技术3 目 录 (正 文) 一.易语言程序加密的目的 二.易语言程序加密的原则 共享软件注册加密自我评测表 评测方法:以下问题,若答案为是加1分。 |
lee
监狱刚放出来个杀人犯~我回来了~
级别: 精灵王
UID: 1955 |
沙发 :发表于: 2009-02-22 发自: Web Page
只看该作者 小 中 大
三.防止程序内容被更改
从本节开始,已进入讲解加密的正题,但可能章节不必这样划分,即按加密/破解的方法来划分,如防反调试,反跟踪,反……。但笔者觉得,从一个一个小的知识点的进入是非常重要的。 2.防止窗口标题被更改 窗口标题是否被别人更改这个也可以通过与上述同样的方法实现验证。 3.防止LOGO图片被更改 四.防止内存注册机 解决这个问题的办法是推荐使用RSA注册法,如果你不想采用,那就要一些技巧了。 3.多注册码拷贝 五.防止文件被暴破 暴破是指破解者在模拟算法失败的情况下,恼羞成怒,狗急跳墙,一气之下暴力破解,将软件的壳脱掉,将要求注册的部分直接跳过去,这样直接产生的后果是文件大小被改变了。 普通壳的作用是压缩资源,使文件尺寸变小,一般可使易语言缩小一半以上的尺寸,有的还可以减少系统资源占用。其他编程语言生成的EXE文件加壳后有可能变大,例如C语言生成的程序本来就小,压缩不了尺寸,这时再加上一个壳,尺寸反而会变大。 加密的壳可以提供直接的注册码功能。加密的壳由于是公用壳,很多人都去购买使用,一般容易被奸人看中脱壳,灵活性也差。如果被破解了,那么后果是十分严重的。因此推荐的就是一个普通壳,如UPX,然后进行MD5判断是否被脱壳就可以了。 1.常用加壳软件介绍 2.加壳后文件大小验证 3.加壳后数据签名验证 第一种方式:加密后存放在一个文件中。 4.加壳后CRC验证 |
||
-临-兵-斗-者-皆-阵-列-在-前-
回复引用分享
举报顶端
|
lee
监狱刚放出来个杀人犯~我回来了~
级别: 精灵王
UID: 1955 |
板凳 :发表于: 2009-02-22 发自: Web Page
只看该作者 小 中 大
判断(取循环风俗冗余校验和(读入文件(取执行文件名()))= 18293823767)
其中上述的数字为主程序的CRC码值。 大家可以利用上述特性,即结果是数值的特性,不用进行比较,而是用加减法的方法得出前后两个CRC验的差值,如果为0,那说明两个数字是相等的,主程序没有被改动过。否则就是被改过的。 例如下述代码: 程序被改 = 1 计次循环首(取绝对值(取循环风俗冗余校验和(读入文件(取执行文件名()))- 18293823767),) 程序被改 = 0- 跳出循环() 计次循环尾() 返回(程序被改) 上述代码中,“取绝对值()”是将负数也转换为正数,以方便进行计次循环。 上述代码中,数值型变量“程序被改”为1表示没有被改动过,如果为0表示被改动过。返回的数值就可以进行一些陷阱的计算了。 我的方案的缺点分析: CRC-32的值其实可以由奸人自行计算得出后,重新写入到程序验证处。这样的话,我们做的工作岂不是没有意义了? 其实解决的方法还是有的,我们可以在计算CRC-32值之前,对参与转换的字符串加点手脚,例如对这个字符串进行移位、xor等操作,或者把自己的生日等信息加入到字符串中,随你的便什么都行,总之不是单纯的文件的内容就行了,然后在最后比较的时候,也用同样的方法反计算出CRC-32值。这样得到的 CRC-32就不是由文件的内容计算出来的,相信对破解者的阻力也会加大不少。 总结: 六.防调试方法 2.反调试模块的使用 3.反调试支持库的使用 4.通过检查父进程得知是否被调试了 5.使用多线程 七.注册机制 2.RSA算法注册 说明二,数字签名用作软件注册系统的实现步骤: ②RSA工具使用简介 初始化代码如下: ④算法实现中的注意事项 |
||
-临-兵-斗-者-皆-阵-列-在-前-
回复引用分享
举报顶端
|
lee
监狱刚放出来个杀人犯~我回来了~
级别: 精灵王
UID: 1955 |
3 楼: 发表于: 2009-02-22 发自: Web Page
只看该作者 小 中 大
⑤设计RSA的变形算法
重要提示:上述是对RSA整体进行一次性验证,虽说RSA是一个非常强的加密算法,但是这样的算法太简单,很容易被破解,那么需要通过以下的方法进行变形。以下所举的例子只是一个参考,你自己的方法越古怪越变态越好。 例如,可以采用分解RSA算法,每次只验证一小部分,以保证在程序的各个地方进行不同种类的验证,返回的值有的可设计为数值型,有的可设计为逻辑形,以利于在程序中不同地方调用,调用后可以根据数据进行运算,如果是破解版,那么使用破解版的人得出的结果一定是错误的。采用双RSA密匙、多RSA码也是个好办法,但最好两者之间再混合一下,采用RSA与数值计算支持库混合的方法可以加强加密强度。 另外,密匙字串需要分开存放,全局变量中放一些,程序集变最中放一些,局部变量中放一些,常量中放一些,字符串一定要打乱,不可存为一个变量中,还可以 RSA之上再加密,如RSA密钥是加密格式的,验证完后立即清变量……要注意的事项还是很多,一定要考虑周密一些,即要达到加密的目的,也不要太复杂了,以免自己也被搞糊涂了。如果有错误,误将正版用户当盗版用户对待就不太好了。 3.数值计算支持库 八.给奸人一些教训 1.给破解者的教训 2.给破解版使用者的教训 3.行为不要过火 九.网络验证法 1.实现的原理 2.存在的几个问题 3.网络验证也不能一次全部验证,这样并不保险,需要分段进行验证。并且给予暗桩的设计。 4.可能存在客户太多,一个服务器接收不过来,需要两个以上服务器的情况,或就直接架设两个以上服务器,用于备用。现在的电信与网通经常打架,可考虑一个接电信网,一个架网通网,以备不时之需。 十.加密狗加密 1.加密狗的选用 2.加密狗加壳法 |
||
-临-兵-斗-者-皆-阵-列-在-前-
回复引用分享
举报顶端
|
lee
监狱刚放出来个杀人犯~我回来了~
级别: 精灵王
UID: 1955 |
4 楼: 发表于: 2009-02-22 发自: Web Page
只看该作者 小 中 大
3.加密狗写存储器法
有的加密狗带有存储器,大小不一,有的是1024字节,这样大家也可以将一些重要的信息放在这里面。实际上您也可以将RSA的一些数据放在这里,以供程序双重检查。同样也是通过DLL调用的。 十一.加密算法策略(暗桩) 本章所要讲述的是:加密不要拘泥于一种形式,要懂得变化之道,这样才能让破解者无从下手,这是我的软件加密之最精髓的一点。前文所说只是一些最基础的知识,大家还需要一点变通之法,加密方法越奇怪越好,变态一些也没有关系。看过《倚天屠龙记》的话,可以想想张三丰教张无忌太极拳时的那段对话,哈哈。 当然很多人喜欢暴破的,懒得研究写注册机,所以让他们多花费些时间,多浪费他们的生命,就要多打入一些暗桩,不要用简单的“如果”、“等于”判断,免得再精巧高深的加密算法成为华丽的摆设,破解与反破解是一场暗战,就算不能反破解,也要设计多一些迷局关卡,把破解者肥的拖瘦,把瘦的拖死,让他们痴迷、让他们上瘾、让他们欲罢不能,用代码吸光他们的精血。 1.易数据库密码怎么泻露了 易语言论坛上个别用户说自己的数据库密码被别人知道了,那么我们看一下他是如何加数据库密码的,代码如下: 打开 (取运行目录 () + “\工资库.edb”, , , , , “K39DKEKD944”, ) 好了,我们编译一下,编译成一个EXE文件,然后改文件后缀为TXT,这样我们就可以不用PE专业工具,而是直接用记事本打开了。 然后在记事本中搜索这个密码,大家看到了什么?看下图中反白的部分: 晕死,你这样编程,当然数据库密码会被别人知道了。 将前述代码改动一下,将密码分解为若干单个字符串,然后分别放于全局变量中定义一部分,再在程序集变量中放一部分,这样就不会有问题了。 如下面的试验,只改动一小部分: 口令 = “K” + 到文本 (13 × 3) + 字符 (68) + “K” + “E” + “K” + “D” + 到文本 (18 ÷ 2) + 到文本 (22 + 22) 打开 (取运行目录 () + “\工资库.edb”, , , , , 口令, ) 再按前述的查看方法,可以看到,数据库前后的密码被处理过的部分都看不到了,如下图所示: 大家应该明白了吧,如果上述代码全部处理好的话,一定不会让别人找到口令的。 实际上,对于重要的加密口令来说,都需要分开存放,并且用取字符,位移或取反的方法,以及加减乘除的方法都可以得到一个隐藏很深的字符串。 加密第12定理:相关加密的字符串一定要打乱加密。 作业1:制作一个“字符串搅乱器”,要求如下:输入一字符串或其他类型的内容,输出为经过“字符,取代码,取反,位或,位与,加减乘除,平方,开方”等命令随机配合相加的易语言源代码。界面基本如下: 作业2:制作一个内窥器,将你的密码或加密字存入,它可以自动分解,在编译好的EXE文件中查找是否有相同字符串。 这是自己用易语言制作的一个工具,怎么样,比专用的工具还要好用吧。 作业3:为了不给奸人创造温馨舒适的破解环境,我们要混乱我们的代码,将软件中所有的子程序名全部替换成随机生成的子程序名然后加上正常的备注。例如Func_3dfsa_fs32zlfv()这个函数是什么意思?恐怕只有天知道了。 可以用易语言写一个易语言“名称混乱器”,基本思路为:将易语言源代码复制为文本,然后用混乱器将名称一一对应进行混乱,然后粘贴回易语言中,这样子程序名称和变量名称等都变为不可预知的字符了,因此加强了保密性。但注意,只有当你要发布软件时才使用之,而且一定注意备份源代码。否则当你看不懂你自己的代码时可别怪我呀! 字符串位置内容 是否在EXE中找到 是否在资源骇客中找到 组件名称属性 可看到 组件标记属性 组件内容属性 组件标题属性 菜单名称 组件列表项目属性 可看到 全局变量名称 看不到 全局变量值内容 程序集变量名称 程序集变量值内容 局部变量名称 局部变量值内容 常量名称 常量值内容 可看到 自定义数据类型名称 DLL命令名称 可看到 DLL库文件名 在DLL库中对应命令名 DLL参数名 图片资源名称 声音资源名称 程序集名称 子程序名称 子程序参数名称 子程序变量名称 模块引用名称 过滤器内容 可看到 信息框文本 可看到 2.利用吴氏加密算法 3.海岛挖宝 4.随机验证 5.不同权限验证 6.忽悠型的GHOFFICE过滤词语验证代码 |
||
-临-兵-斗-者-皆-阵-列-在-前-
回复引用分享
举报顶端
|
lee
监狱刚放出来个杀人犯~我回来了~
级别: 精灵王
UID: 1955 |
5 楼: 发表于: 2009-02-22 发自: Web Page
只看该作者 小 中 大
7.伪验证技术
还是先举一个例子说明吧,易表软件在10.0版本前已发现有大量的注册机存在,于是易表作者其后改变了加密方式,易表10.0推出后还是出现了注册机,并且这种注册机注册过的软件可以使用。于是有些用户用注册机取得的注册码使用了,过了一段时间,当盗版用户将重要数据存入易表后,突然有一天数据库被锁定了,于是只好注册易表,并且让易表作者为数据库解锁。 从这里可以基本上判定易表新版本采用了伪验证技术,即在较为明显的地方提供了一级验证,这种验证方式没有经过太强的加密,而二级验证在一定的条件下才触发,而这个条件是检查到了用户输入了重要的数据,或大量的数据,或使用次数较多。 基本原理是注册文件由前后两个注册码拼接而成。一般情况下只进行第一个注册码的验证,而当条件成熟时进行第二个注册码验证。 这是一种双赢的策略,易表作者即收到了注册费,付费的人还会道歉,并且感谢易表作者。哈哈,大家要学习这招哦。 但本办法对于数据库应用及数据量大时检查最好,而对于一些没有生成数据的用户无效。 发布软件的时候发布自己编写的注册机,弄个假破解版,那么想破解的就可能不来了,即使有真的破解,谁会有自己给自己写假破解快啊!可能假破解版中只破解一半,等用户使用了,有数据了再锁定,让他们注册后再给解锁,付了钱还要谢谢你,哈哈,损招,但有用! 加密第16定理:伪验证可以迷惑一般破解者,甚至自己发布一个伪注册机。 8.定时验证、延时验证、客户数据集累验证 9.验证与专业知识相结合技术 10.伪装,用易语言写自有支持库 11.绝妙的暗桩设置 12.发布不完整版本 13.程序、数据结合加密技术 14.自定义算法 |
||
-临-兵-斗-者-皆-阵-列-在-前-
回复引用分享
举报顶端
|
lee
监狱刚放出来个杀人犯~我回来了~
级别: 精灵王
UID: 1955 |
6 楼: 发表于: 2009-02-22 发自: Web Page
只看该作者 小 中 大
15.加密框图
下面给出一个加密的设计框图,大家可以根据自己的实际情况改变加密的策略: 图中主程序外围进行了花指令编译,并且用加普通壳进行保护。脱壳了也无所谓,因为设置了暗桩,随机检查。 图中表示主程序运行后,首先进行了常规的注册码第一次验证,找有没有注册文件。如果这个被破解,注册码应该是一个短的RSA,而真正的注册码是三个RSA的叠加。会生成伪注册机也无所谓。 主程序中用暗桩的形式对窗口标题、版权信息进行验证,这是考虑到如果一启动就验证这些很容易被奸人看出来从而会跳过去。因此用一些随机,或分级,或条件法取得不固定的验证。 主程序中用暗桩的方式对加壳后主程序的完整性进行校验,这个也不要放在常规的验证中,否则很容易被跳过去。可以查文件长度,MD5或CRC32都可以上。 主程序中用暗桩的方式加入了反调试模块。 主程序中布满GHOFFICE过滤词语验证代码。并且源代码有备注,不会搞错的。 主程序在某个条件下随机进行第二级验证,从注册码中取第二段数据,如果注册码长度不够且取不到第二段数据,那么就说明已使用了伪注册机,将用户的数据库锁定,等他付钱来注册。 主程序在一个条件下再激活验证,从注册码文件中取第三段数据,如果注册码长度不够,且取不到第三段数据,那么就说明已使用了伪注册机,将用户的数据库锁定,等他付钱来注册。 编程中还注意将加密的字符串搅乱且分不同地方存放,用吴氏加密命令加密重要数据,也可加入数值计算支持库的算法,也可以加入一些惩罚手段,也可以再加入自己的一些算法。 以下是一些人的编程体会摘录,基本未改其中的内容,在此表示感谢! 附录1加密已形成密码学 我引用《应用密码学》作者的话: 世界上有两种密码:一种是防止你的*****妹看你的文件;另一种是防止奸人阅读你的文件资料。 如果把一封信锁在保险柜中,把保险柜藏在纽约的某个地方…,然后告诉你去看这封信。这并不是安全,而是隐藏。相反,如果把一封信锁在保险柜中,然后把保险柜及其设计规范和许多同样的保险柜给你,以便你和世界上最好的开保险柜的专家能够研究锁的装置。而你还是无法打开保险柜去读这封信,这样才是安全的。 意思是说,一个密码系统的安全性只在于密钥的保密性,而不在算法的保密性。 对纯数据的加密的确是这样。对于你不愿意让他看到这些数据(数据的明文)的人,用可靠的加密算法,只要破解者不知道被加密数据的密码,他就不可解读这些数据。 但是,软件的加密不同于数据的加密,它只能是“隐藏”。不管你愿意不愿意让他(合法用户,或 Cracker)看见这些数据(软件的明文),软件最终总要在机器上运行,对机器,它就必须是明文。既然机器可以“看见”这些明文,那么 Cracker,通过一些技术,也可以看到这些明文。 于是,从理论上,任何软件加密技术都可以破解。只是破解的难度不同而已。有的要让最高明的 Cracker 忙上几个月,有的可能不费吹灰之力,就被破解了。 所以,反盗版的任务(技术上的反盗版,而非行政上的反盗版)就是增加 Cracker 的破解难度。让他们花费在破解软件上的成本,比他破解这个软件的获利还要高。这样 Cracker 的破解变得毫无意义——谁会花比正版软件更多的钱去买盗版软件 ? 然而,要做到“难破解”,何尝容易? Sony 曾宣称的超强反盗版(Key 2 Audio音乐 CD反盗版),使用了很尖端的技术,然而最近却被一枝记号笔破解了,成为人们的饭后笑料! 所以,很多看上去很好的技术,可能在 Cracker 面前的确不堪一击。就像马其诺防线一样,Cracker 不从你的防线入手,而是“绕道”。这样,让你的反盗版技术在你做梦也想不到的地方被 Crack 了。 为什么会这样呢 ?归根到底是因为软件在机器上运行,并且软件和机器是分离的——这一点是关键,如果软件和硬件完全绑定,不能分离,是可以做到象 IDEA 之类几乎不可破解的系统的。这将在后面谈传统软件保护技术时详细说明。 对我的这个解决方案,我不能保证Crack高手在几天之内不能破解它,我只能说:“在这个软件中,我尽量堵住了当前破解者普遍使用的方法以及“我想得到”的可能的缺口。”但是我相信,倾注了我三个月心血的反盗版软件,决不是一个“玩具式”的反盗版软件。 附录2《如何用简单方法防止破解》 1.读完注册码后不要立刻检查注册码,因为读注册码肯定用到系统调用,系统调用附近很容易下断点。先放到内存作为全局变量,然后你可以在程序的任何部分,任何时候,读注册码,读内存是没有任何系统调用的。 2.两种办法处理在内存的注册码, 3.程序多处做CRC校验文件大小检查,发现不对就退出。一定要多处检查,不能只检查一次。 4.用inline函数将注册部分分成许多小块,分散到程序各处运行。最好能放在不同的线程中运行. 检查结束不要给任何提示,在程序中的内存中做一个标志即可,提示信息要延迟一段时间出现,不要让破解者通过提示信息找到标志位置或检查结束位置,否则前功尽弃。当然也可以象上面那样做10000个标记,随机用一个,这时你不用担心破解者知道标记的位置.而且标记最好不要用0或1,可以用一个貌似随机的值作为注册成功的标记,如何产生这个随机值只有你自己知道。 |
||
-临-兵-斗-者-皆-阵-列-在-前-
回复引用分享
举报顶端
|
lee
监狱刚放出来个杀人犯~我回来了~
级别: 精灵王
UID: 1955 |
7 楼: 发表于: 2009-02-22 发自: Web Page
只看该作者 小 中 大
附录3代码与数据结合技术
《于破解过招,保护你的共享软件》 ——此文曾作为连载刊登于《电脑报》2003年41、42期,如要转载,请注明出自《电脑报》 共享软件是软件业目前世界上比较热门的话题,国内更是如此。成千上万的中国程序员以极大的热情投入到这个领域来,都憧憬着用辛勤的劳动来获得丰厚的回报;但,实际并非如此,绝大多数的人都弑羽而归。值得注意的是:除了选题和技术上的原因外,最大的原因就是共享软件被破解(Crack)了。 破解见得多了,不免有些麻木。大部分作者都是新软件发布一个星期左右甚至一天之内就会在网上发现注册机或者被修改过的软件(行话称之为“*****”)。破解者制作了英文、中文、俄文、德文等语种的注册机大肆发散不说,还常常给作者寄一份,外加一封挖苦辱骂的信。唉!我们得罪了谁?没日没夜地熬夜编码,难道得到的就是这连绵的挖苦和不尽的羞辱吗? 不!决不!我们有理由也有能力保护自己的劳动成果!但问题是:如何保护?关注国内,网上关于破解资料和教程俯拾皆是,而关于软件保护方面的资料则是凤毛麟角(大多都关系到什么技术垄断),这种畸形现状就导致了相当一部分朋友的加密非常脆弱甚至可以称得上是“弱智”!要知道,你要面对的是已经形成团伙的众多破解高手呀,国内的什么CCG、BCG,国外的eGis、King、Core、TNT、DAMN和TMG,皆为水平一流的破解组织。全球盗版软件不少于80%都是由他们的破解的,技术实力连大软件公司都不可小视。 看到这里,你是否已经已经灰心了?别怕,虽然我们理论上无法完全避免被破解,但如果能够有效地拖延被破解的时间,并充分打击破解者的自信心,是可以让破解者无法忍受这种折磨从而最终放弃的。 破解,通常的做法有两种——暴力破解(*****)和写注册机。下面我就来依次讲解每种破解方法的原理和应对方法,这些都是鄙人积累的一些共享软件保护经验,某些关键地方还有例程讲解(Delphi代码,使用C++和VB的朋友可以自己稍微修改一下),希望能对新手们有些帮助,能够更有效地保护自己的劳动成果。 §暴力破解(*****) 这是最常见,也是最简单的破解的方法。该法最适合于对付没有CRC效验的软件,破解新手乐于采用。 大凡共享软件,验证是否注册大多数要采用if条件语句来进行判断,即使你采用了什么RSA或ECC等强力加密算法,也免不了使用if条件语句。呵呵,这里就是共享软件最为危险的地方哦,当然也是*****手孜孜不倦所寻求的目标呀! 例如,你的注册子程序易语言代码类似如下: 信息框 (“注册成功!”, 0, ) 信息框 (“注册失败!”, 0, ) 这个注册函数即使使用了强劲的RSA算法进行注册码验证,可是依然很容易被破解,我们只要把这里修改为: |
||
-临-兵-斗-者-皆-阵-列-在-前-
回复引用分享
举报顶端
|
lee
监狱刚放出来个杀人犯~我回来了~
级别: 精灵王
UID: 1955 |
8 楼: 发表于: 2009-02-22 发自: Web Page
只看该作者 小 中 大
令人遗憾的是,目前大部分共享软件都是这样进行判断的,这也是为什么网上被破解的软件铺天盖地的主要原因。因为这样破解实在是太简单了……
难道没有什么可以防止的方法吗?当然有啊!只要把软件的关键代码嵌入到注册码或者注册文件中就可以充分防止破解。但现在问题是,怎么嵌入呢? 最简单的方法就是把关键代码(你的软件功能限制部分最关键而且最简单的一个函数)做成一个小Dll(动态链接库),用强力对称算法加密(密匙可以是主程序某一固定不变的部分或壳的特征值)后生成一个注册文件(License文件,呵呵,格式只有你知道哦!),或者Base64编码后生成一个注册表文件,用户可以双击导入注册表内。 效验流程如下:已注册用户验证注册码时,先验证有没有文件,没有文件者自然受限制的功能无法使用。如果有注册文件,解密之即生成一个小临时文件。如果主程序被脱壳或者被修改(*****),自然特征值密码不符,解密出来的肯定都是垃圾码,没有一点用处。只有没有被修改的主程序才能正确的解码,而且当然只有解密正确的文件才是一个真正的Dll文件,才能被GetProcAddress函数找到欲调用的关键函数地址。这样只有已注册用户才可以享受到你软件的全部功能了。 如此一来,Cracker破解你的软件就变得很困难了: 首先,他如果没有注册文件,即使他把主程序脱壳了,由于受限制的部分和注册文件是关联的,他也根本无法修补完整。 第二,即使他得到了你的注册文件,由于是加密文件,他也无法直接利用之,这样就逼迫他去拆解你的算法,这可是他们最不愿意的碰到的事情哦!如果到了这一步,我想99%的Cracker都是会放弃的,呵呵,只有真正对加密算法有研究的Cracker高手才会继续破解下去。 第三,你是可以用些小技巧来使他的生活更加痛苦一些的,呵呵。这里我推荐大家使用DSA公开密匙加密算法,它和RSA一样,可以进行数字签名(RSA还可以加密,DSA则只能进行数字签名)。我这里选用它的原因就是它有一项非常实用的特性:随机数填充机制。即DSA每次签名都要使用一个随机数K,正因为有这个K的存在,即使是相同的用户名和机器识别码,由DSA加密过的每份注册文件都不会相同。这对Cracker拆解你的注册文件来说是一个极大的障碍。 第四,即使他得到了解密后的Dll文件,他也需要大幅度地修改主程序或者把你的Dll部分的关键代码拆出来填到主可执行文件中。呵呵,这就看他对PE文件格式理解得如何了。即使这样,如果你的程序中有大量的Hash效验和死机代码,呵呵,你就耐心等着我们可爱的Cracker同志吐血吧…… 所以记住啊:用完这个Dll临时文件后立即从内存中卸载此Dll并删掉,而且注意在解密之前探测一下,系统中有没有FileMon这个威胁极大的探测器呀! function DetectFileMon: Boolean; 当然,你可以保护得更好一些:可以不采用临时Dll,而把解密后的关键代码用WriteProcessMemory这个API函数写入到主可执行文件自己进程被提交(Committed)的内存页面的指定位置去。这样由于磁盘上没有解密后的临时文件,破解更加困难。事实上,目前世界上最强劲的专业保护软件 Armadillo就是用的这种方法。而且这种方法可以充分防止被调试器Dump。但实现起来比较困难,尤其是在WinNT 5以后的操作系统中。 由于这种方法将注册文件和受限制代码唯一关联,*****手拿到你的软件也只有干瞪眼。建议大家都给共享软件加上功能限制,这样比时间和次数限制更加安全。 §写注册机 顾名思义,这种方法就是模仿你的注册码生成算法或者逆向注册码验证算法而写出来的和你一模一样的注册机。这玩意威胁极大,被*****了还可以升级。如果被写出注册机,呵呵,你的软件只好免费了。或者你必须更换算法,但以前注册过的合法用户都得被迫更换注册码了,累死你!呵呵…… 上面的方法虽然可以避免*****,但注册机的威胁还是存在的。Cracker要写注册机必须详细研究你软件的验证模块,这必须先将你的软件脱壳,再反汇编或者用调试器跟踪。市面上许多加壳和保护软件都吹嘘不可能被脱壳,令人可惜的是到目前为止没有一个软件兑现了它们的诺言。由于CPU最终执行的都是有效指令,所以等你的程序自解压完成后再从内存中Dump出来就可以实现脱壳。因此不要在壳上面花很多功夫,因为没有这个必要。 反汇编是和调试器跟踪也都是不可能防止的,因为所有的Win32程序都是必须通过API来调用Windows系统中的关键Dll的(如Kernel32.dll、GDI32.dll等),然而API是可以Hook的。我们只能从自己的代码着手来保护我们的劳动果实了。 为了自己调试和以后维护的方便,我们一般采用有意义的名字给我们的函数命名,可这给了Cracker可乘之机。例如这样的函数是什么意思大家应该是一目了然吧?IsRegistered(), IsLicensed(), LicenseVerify(), CheckReg()...这样Cracker就可以轻松地从数千个函数中找到他的目标---你的注册码效验函数!而且破解Delphi编写的软件还有一件TMG小组的破解利器---DeDe,它可以轻松看到你软件里的Form、Unit和函数名,还可以反汇编一部分代码,更是可以和Win32DASM合作反汇编更多的代码,对Delphi软件威胁极大。 为了不给Cracker创造温馨舒适的破解环境,我们要混乱(Obfuscate)我们的代码,将软件中所有的函数名全部替换成随机生成的函数名。例如 Func_3dfsa_fs32zlfv()这个函数是什么意思?恐怕只有天知道了。网上有现成的代码混乱器,你按你使用的编程语言的种类可以找到一些。但注意,只有当你要发布软件时才使用之,而且一定注意备份源代码。否则当你看不懂你自己的代码时可别怪我呀! |
||
-临-兵-斗-者-皆-阵-列-在-前-
回复引用分享
举报顶端
|
lee
监狱刚放出来个杀人犯~我回来了~
级别: 精灵王
UID: 1955 |
9 楼: 发表于: 2009-02-22 发自: Web Page
只看该作者 小 中 大
另外一定要使用公开密匙算法保护你的软件,RSA、DSA和El Gamal之类的算法都可以从网上找到。但注意:将你算法单元中的所有涉及到算法名称的字符串全部改名。避免被Cracker发现你用的算法而模仿写出注册机来!你还可以张冠李戴,明明用的DSA,将名字全部替换成RSA,呵呵,让他模仿去吧!
其它算法如对称算法和Hash算法都也要注意改名,否则这样: //你的加密算法,使用了Blowfish(对称算法)和MD5(Hash算法) 如果你用的什么其它不常见的算法(如Skipjack (NASA美国航天局标准算法), LOKI, 3-WAY, Safer之类不出名但强度很高的算法),并且全部改名,就让他们去研究软件中成堆的如下代码是什么加密算法吧! 当然,最好把Hash算法也全部改名,给会给他们制造更多的困难。但注意,MD5和SHA之类的Hash的初始值会被Cracker从内存中找到,这样他就知道了你用的Hash了。所有建议同时使用MD5的变形算法Ripe-MD(RMD)128或160和其它的Hash,如Tiger, Haval等算法。 另外,请注意要经常效验你的程序是否被修改(Hash效验),如果被修改则退出。但请注意,有些病毒会修改进程的句柄表和它指向的内核对象,这样病毒就可以直接修改运行中的PE文件而感染之了,另外还有网络传输错误的问题也会导致软件CRC出错。因此请不要认为可执行文件的CRC不符而此时程序已被脱壳了。 其实,程序被脱壳最明显的标志是其大小明显大于脱壳前。1M的PE文件被UPX、ASPack之类的软件压缩后通常只有400左右。如果你的软件在运行中发现自己的大小大于800K,我想你应该知道如何做了吧?呵呵... 还有一点,调试器对我们的威胁很大,我们不会肯定让Cracker们舒舒服服地使用SoftICE、TRW和OllyDbg来调试我们的程序。除了常用的MeItICE方法外,这里我给一个我写的方法: 你可以在Delphi或者VC中试试,呵呵,是不是把Delphi和VC杀掉了,因为你现在用的是Delphi和VC的内置调试器来运行你的程序的,当然它会六亲不认了,呵呵!调试的时候你还是把它注释掉吧,发布时别忘记激活哟! 最后一个问题,这也是一个非常重要的问题:保护你的字符串!!!字符串在注册模块中非常重要!当一个富有经验的Cracker破解你的软件时,首先做的就是摄取你的字符串。比如他会输入错误的注册码,得到你关于错误注册码的提示,通常是“无效的注册码,请重新输入!”或者“Invalid key, please input again!”等等,然后用OllyDbg下断点调试或者用WinDASM、IDA Pro等静态分析工具在被他脱壳后的程序中查找那个字符串,找到后进行分析。因此,请一定加密你的字符串!!!一定!!!使用时再临时解密出来,而且要尽量少使用消息提示框,避免被Cracker找到漏洞。加密字符串不需要太复杂的算法,随便找一个快速的对称算法就可以了。 最后提醒你一句,不要在加密上花太多的功夫!你应该把更多的时间和精力都用来完善你的软件,这样会更合算。借用一位前辈的话来忠告大家吧:花点时间考虑你自己的软件,看看它是否值得保护?如果没人用你的软件,保护也就没有意义了,不要过高估计你的软件“对世界的重要性”! |
||
-临-兵-斗-者-皆-阵-列-在-前-
|
自我保护第一课加密与防破解相关推荐
- Centos8 加密 GRUB 防破解root密码
忘记root密码的时候,往往会进入单用户模式重置root密码.任何人能通过未设防grub重置root密码是很危险的事,本文以centos8为例介绍设置GRUB账户给GRUB加密,避免能直接进入单用户模 ...
- FLASH破解与FLASH防破解(FALSH加密与SWF加密软件推荐)
在一些名门论坛,谈论破解之术被明文禁止甚至会招来不尽的鄙视.我一直都对这个观点有种很异样的感觉.诚然,尊重原创是一种美德.然而对于不会说话的工具而言,其本身又岂会有善恶之分?有善恶之分的,是使用这些工 ...
- Android打包混淆----APP加密防破解 + 重新签名
① 准备一个打包过的app文件包 . ② 登陆移动APP加密防破解爱加密官网http://www.ijiami.cn,没有账号的需要先注册账号(登陆后才能上传App文件进行加密). ③ 注册完后,登 ...
- 文华财经指标公式大全,通达信指标加密破解DLL加密防破解技术方法
STICKLINE(做多 AND C<O,C,O,0.3,0),COLORFF00FF; STICKLINE(做多 AND C>=O,C,O,3,1),COLOR0000FF; {ST ...
- Unity防破解 —— 加密Dll与Key保护
在阅读这篇文章之前,我在处理mono加密问题时,也是参考了雨凇的文章,所以建议先看一下雨凇写的关于加密Dll的文章: 1.Unity3D研究院之Android加密DLL与破解DLL .SO 2.Uni ...
- IOS防破解 加密
IOS内购防破解 我们使用的AnySDK的支付来做的,比较简单有效 http://docs.anysdk.com/integration/server/payment-notice/ CPP 接口说明 ...
- 防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之用户卡加密发卡设置说明
防复制防破解小区门禁梯控升级非联网CPU卡脱机写卡门禁梯控一卡通系统92HID623CPU V5.00操作说明之用户卡加密发卡设置说明 1.设置控制器的扇区和密码 本节说明主要介绍控制器和用户卡使用的 ...
- 吾爱破解培训第一课作业密码_如何实现您的第一个无密码登录系统
吾爱破解培训第一课作业密码 You may have heard that there are 360 Million Reasons to Destroy All Passwords and tha ...
- 软件安全防破解之字符串加密,提高破解难度让你的软件不再轻易被山寨
原文:http://bbs.84zcb.com/showtopic-3430.aspx 大家知道提示框和字符串是新手破解的关系,如果我们能将敏感的字符串进行加密传输,那么就可以杜绝90%以上的破解新手 ...
- Android打包混淆----APP加密防破解 + 重新签名
~ ~ APP加密(混淆打包防反编译)的步骤:~ ~ ① 准备一个打包过的app文件包 . ② 登陆移动APP加密防破解爱加密官网http://www.ijiami.cn,没有账号的需要先注册账号 ...
最新文章
- Unity游戏开发大师班
- github建立静态网站,域名解析和跳转
- 简要说说一个完整机器学习项目的流程
- abp的权限与导航菜单的关系
- java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...
- http://ju.outofmemory.cn/entry/307891---------TICK
- 系统不做限流,我看你是对中国人口数量有什么误解
- 蓝桥杯 基础练习 矩阵乘法
- Umbraco中的Examine Search功能讲解
- CPDA|数据分析很难学?分享最有效的学习路径!
- 社科研究方法汇总(含SPSS教程、Maxdea、实验法、社会网络分析法、统计调查法、访谈法)
- linux安装vim
- 在计算机操作中粘贴的快捷键是什么,键盘按什么键复制粘贴 键盘上复制粘贴快捷键是哪个键...
- 大众点评信息流基于文本生成的创意优化实践
- Python爬虫爬取网页上的所有图片
- linux中括号命令,Linux中的括号用法
- Http Status 500
- ipsec 加密流程(一):ipsec策略匹配
- 用计算机打一闪一闪亮晶晶,一闪一闪亮晶晶 我去!RGB轴机械键盘灯光玩法亮瞎人...
- xp怎么删除计算机管理员用户,windowsXP如何显示Administrator账户/如何删除计算机管理员权限的账户/如何更改账户名...
热门文章
- 【sketchup 2021】草图大师图像输出与渲染之Enscape渲染(优秀的实时渲染软件)的安装与软件说明,并在sketchup软件中调出Enscape软件和使用。
- oracle客户端下载和plsql下载以及配置远程连接oracle服务端(超详细)
- if语句 power query_判断(if)语句
- ajax blockUI
- 如何用WGDI进行共线性分析(三)
- 软件推荐:Picasa
- fedora linux五笔输入法,教你在Fedora 14 下安装五笔输入法
- 骑士人才系统4.0,5.0火车头数据抓取
- 微信点餐外卖源码小程序开发
- 年会互动游戏有哪些?年会微信互动游戏制作流程是什么?