自我保护第一课加密与防破解
本文转自兄弟软件论坛,感谢楼主!
本文为全中文编写,不需要有PE文件格式知识,不需要掌握汇编或C语言的编程技巧,一些加密算法直接由易语言提供,特殊的加密算法大家可以翻译C语言代码、汇编代码或VB代码。 本文中将“Cracker”一词翻译为“奸人”,意为“奸邪小人”之义。本人对破解者一向深恶痛绝,有人说中国的软件发展中破解者有一份功劳,可我说这话不对,看看因盗版而产生的微软对操作系统及软件业的垄断,国内软件业在盗版的夹缝中生存……,如此下去,软件作者没有收益,将不再会有优秀的软件推出。防止盗版,匹夫有责,我想通过本书的推出可以加强易语言用户的加密能力,将盗版杀死在大家共同的手中。 随着采用易语言编制程序的人们越来越多,写一个软件易被奸人破解的情况也越来越多了,有个别用户甚至于怀疑易语言是否有安全性。从技术性上来说,我只能说加密技术与编程语言无关,一个编程语言的安全性一般指所生成的机器码是否稳定、可靠,而不是防破解方面,如果想要很好地防止破解,那么掌握一门加密技术是非常必要的。 本书考虑到使用易语言的用户大部分对PE文件结构不太熟悉,因此没有采用很底层的方法去教学,而是采用与易语言直接表达的方式试图说明如何加密。 本书基本上是按以下的顺序进行讲解的: 破解技术 反破解技术1 反破解技术2 反破解技术3 防改文件 文件名验证 LOGO图片验证 窗口标题验证 防改文件大小暴破 加壳后数据签名验证 加壳后CRC验证 文件大小验证 防调试 花指令 反调试模块 反调试支持库 内存注册机 不进行判断,用循环代替 字符串打乱器 及时清内存 算法注册机 RSA算法 数值计算支持库 其他 多处验证点 随机验证 命名刻意隐蔽 本书是集体创作作品,并集成了多位作者的公开著述,在此一并表示感谢。其中部分文字内容根据易语言的特性作了修正。文中不署这些作者的姓名,以防止奸人对他们的软件的刻意破解。 本章整理:麻辣教师 目 录 《易语言软件加密技术》 1 一.易语言程序加密的目的 5 1.保持软件的完整性 5 2、保护软件开发者的权益 5 二.易语言程序加密的原则 5 1.加密前要考虑周到且严密 5 2.需要加密的内容要制定一个计划 6 3.加密时制作好文档,以备以后的修改 6 4.发布前问一下是否可以正式发布软件了 6 三.防止程序内容被更改 7 1.防止软件名称被更改 7 2.防止窗口标题被更改 7 3.防止LOGO图片被更改 8 四.防止内存注册机 8 1.不要使用简单判断 9 2.采用MD5对比 9 3.多注册码拷贝 9 五.防止文件被暴破 10 1.常用加壳软件介绍 10 2.加壳后文件大小验证 14 3.加壳后数据签名验证 14 4.加壳后CRC验证 15 六.防调试方法 16 1.易语言的花指令 16 2.反调试模块的使用 17 3.反调试支持库的使用 17 4.通过检查父进程得知是否被调试了 18 5.使用多线程 19 七.注册机制 19 1.简单注册原理 19 2.RSA算法注册 20 3.数值计算支持库 27 八.给奸人一些教训 27 1.给破解者的教训 27 2.给破解版使用者的教训 30 3.行为不要过火 30 九.网络验证法 30 1.实现的原理 30 2.存在的几个问题 31 十.加密狗加密 31 1.加密狗的选用 32 2.加密狗加壳法 33 3.加密狗写存储器法 33 十一.加密算法策略(暗桩) 34 1.易数据库密码怎么泻露了 34 2.利用吴氏加密算法 37 3.海岛挖宝 38 4.随机验证 39 5.不同权限验证 40 6.忽悠型的GHOFFICE过滤词语验证代码 41 7.伪验证技术 43 8.定时验证、延时验证、客户数据集累验证 44 9.验证与专业知识相结合技术 44 10.伪装,用易语言写自有支持库 44 11.绝妙的暗桩设置 45 12.发布不完整版本 45 13.程序、数据结合加密技术 45 14.自定义算法 46 15.加密框图 46 附录1加密已形成密码学 48 附录2《如何用简单方法防止破解》 49 附录3代码与数据结合技术 50 (正 文) 一.易语言程序加密的目的 在此有必要说明一下为何要为自己的程序进行加密,初步认为有以下两点: 1.保持软件的完整性 这里包括了文件名不被更改,文件版权信息不被更改,文件尺寸不被更改。 很多时候有的奸人拿到您的软件,他可以将文件名更改,将文件版权信息的字符串或图片更改,然后放上自己的东西,如放上病毒可以对其他电脑造成破坏,如果放奸人的弹出广告收益的是奸人,而不是作者。相反,使用这些软件的用户反而将作者痛骂一通,造成声誉上的损失。因此处于保护自己的完整权益来说,也是有必要保护软件的完整性。 例如QQ软件,曾出现过多款个人行为的补丁版,更改了QQ的一些信息与界面,为此QQ公司十分头痛,以后的一些事大家也知道,现在看是破解QQ的很少了,而且在安装QQ新版本时,它会检查是否有破解补丁存在,如果存在就不运行。 2、保护软件开发者的权益 也许你会说,一个不被破解的软件一定是一个没有加密的软件,那么看看下文您就会知道,那只是一个理想中的事情,除非您是有钱了没有事干的人,否则您开发软件的目的是什么我是很难知道的。 无论是个人还是公司,如果生产一个软件得不到收益,以及后继开发资金的鼓励,那么无疑这个软件是很难再开发下去的。这样的例子很多很多,我不想举例,国内已出现了很多软件的破解版,而一旦出现了破解,那么所造成的损失是非常大的。 二.易语言程序加密的原则 早先人们的加密方法是通过在软盘上格式化一些非标准磁道,在这些磁道上写入一些数据,如软件的解密密钥等等。这种软盘成为“钥匙盘”。软件运行时用户将软盘插入,软件读取这些磁道中的数据,判断是否合法的“钥匙盘”。 软盘加密还有其它一些技术,如弱位加密等等。 随着近年来软盘的没落,这种方法基本上退出了历史舞台。新的软件加密技术也越来越多了。 1.加密前要考虑周到且严密 说实话,有很多人在易语言论坛上发贴,说自己用易语言编写的软件有了破解,还非常高兴,有人用才会被破解,但我想,如果是很高兴的这样子,除非你的软件技术含量很低,或你是微软,想被别人破解,您不应该高兴,这有点象别人打了你一耳光,你还很高兴,你的知识产权或著作权已被奸人侵犯了,性质很恶劣,后果很严重。除了拿起法律武器,劳命伤财,还有就是加强加密方式。 如果被制作出注册机,情况是最糟糕的,作者需要全部更换全部用户的注册KEY文件,工作量相当地相当地大。因此一个好的软件保护发布前必须考虑周到,而且是面面俱到,否则出一个新版,发现一个破解,再出一个新版去修正,那样的事情是极其弱智的。 2.需要加密的内容要制定一个计划 一开始不明白如何加密的易语言用户,一般就找一下论坛上关于注册的例程套用到自己的程序中,认为这样就是加密了,实际上本节所要讲的是制作一个学习计划,将所有需要用到的知识与软件都收集到,这个计划就是一个加密计划,也是本书所要讲述的。 3.加密时制作好文档,以备以后的修改 在加密中有可能使用了多处加密,因此需要将文档写好,以防止以后忘记,实际上您可以在易语言中使用备注的方式作以说明,这些备注在编译时是不会被编译进目标EXE文件中的,大家可以放心写,同时也节省了写外部文档的时间。以后如果找时,可以直接搜索找到加密的地方。 4.发布前问一下是否可以正式发布软件了 制定一个风险评估标准,以考验一下程序的风险性,被破解的可能性,如果你是破解者,在不知道如何加密的情况下会如何去破解这个软件。 有一个参考的评估标准在下面。 共享软件注册加密自我评测表 评测方法:以下问题,若答案为是加1分。 1. 是否加壳? 2. 是否采用两种以上的不同的工具来对程序进行加壳/压缩? 3. 是否有软件自身的完整性检查功能?(CRC校验或其他) 4. 与软件保护相关的字符串是否有进行加密处理? 5. 是否采用了比较成熟的密码学算法? 6. 是否有多处验证点,调用多个不同函数或判断多个不同全局标志进行注册验证? 7. 是否有随机验证的功能? 8. 是否采用了在线验证功能? 9. 注册过程中是否尽量少地给用户提示信息? 10. 是否不依赖于GetLocalTime( )、GetSystemTime( )这样众所周知的函数来获取系统时间? 11. 是否有伪破解功能? 12. 是否在软件中嵌入了反跟踪的代码? 13. 是否对校验函数命名做了刻意隐蔽? 14. 是否将注册码、安装时间记录在多个不同的地方? 15. 是否在校验时故意加入冗余干扰代码来误导解密者? 16. 是否有自己独特的防破解措施? 建议:得分在6分以上才可以正式发布软件! 制作者:中国共享软件联盟•lcraz |
监狱刚放出来个杀人犯~我回来了~
级别: 精灵王
精华: 0 发帖: 570 可可豆: 18202 CB 威望: 3120 点 在线时间: 386(时) 注册时间: 2009-01-20 最后登录: 2012-01-17 |
判断(取循环风俗冗余校验和(读入文件(取执行文件名()))= 18293823767)
其中上述的数字为主程序的CRC码值。 大家可以利用上述特性,即结果是数值的特性,不用进行比较,而是用加减法的方法得出前后两个CRC验的差值,如果为0,那说明两个数字是相等的,主程序没有被改动过。否则就是被改过的。 例如下述代码: 程序被改 = 1 计次循环首(取绝对值(取循环风俗冗余校验和(读入文件(取执行文件名()))- 18293823767),) 程序被改 = 0- 跳出循环() 计次循环尾() 返回(程序被改) 上述代码中,“取绝对值()”是将负数也转换为正数,以方便进行计次循环。 上述代码中,数值型变量“程序被改”为1表示没有被改动过,如果为0表示被改动过。返回的数值就可以进行一些陷阱的计算了。 我的方案的缺点分析: CRC-32的值其实可以由奸人自行计算得出后,重新写入到程序验证处。这样的话,我们做的工作岂不是没有意义了? 其实解决的方法还是有的,我们可以在计算CRC-32值之前,对参与转换的字符串加点手脚,例如对这个字符串进行移位、xor等操作,或者把自己的生日等信息加入到字符串中,随你的便什么都行,总之不是单纯的文件的内容就行了,然后在最后比较的时候,也用同样的方法反计算出CRC-32值。这样得到的 CRC-32就不是由文件的内容计算出来的,相信对破解者的阻力也会加大不少。 总结: 以上的方法大家都可以在软件中采用,最好写到一个DLL文件中,然后多放几个需要验证的子程序,随时以备调用即可。 六.防调试方法 1.易语言的花指令 加花指令的方法有通用性,即所有的反汇编器都可以用这种方法来抵挡。这种方法主要是利用不同的机器指令包含的字节数并不相同,有的是单字节指令,有的是多字节指令。对于多字节指令来说,反汇编软件需要确定指令的第一个字节的起始位置,也就是操作码的位置,这样才能正确地反汇编这条指令,否则它就可能反汇编成另外一条指令了。并且,多字节,指令长度不定,使得反汇编器在错误译码一条指令后,接下来的许多条指令都会被错误译码。所以,这种方法是很有效的 。 易语言新版本中增加了自动插入花指令的功能,并且插入后虽然文件体积大了一些,但不会造成运行错误。大家可以点击菜单“工具”→“系统配置”。弹出的窗口如下图所示。 不采用花指令时,反编译出来的代码几乎是跟源代码一一对应的,这样一来我们的程序还有什么秘密可言呢?完全可以从反编译的结果中理解程序的功能。 其实花指令就是人为地构造一些“陷阱”和一些无用的字节,起到迷惑破解者和隐藏信息的作用。在这里,易语言为你构造了这些“陷阱”。大家只要将上述配置项打开就可以了。同时也提醒大家,在发布新版本时采用以下的方式:第一周发布的是花指令级别为1,第二周发布的是花指令级别为2,第三周发布的是花指令级别为3,第四周发布的是花指令级别为1……,周而复始,这样破解者根本跟不上你变换的速度。 加密第4定理:每周发布一个新版本,让破解的速度赶不上发布的速度。 2.反调试模块的使用 目前易语言论坛上出现了一些模块或支持库,带有反调试的功能,当启用后,就会查看进程中有无调试器,如SOFTICE等调试工具,对易语言的调试也同样有效。 由林子深提供的另一个模块:“星光灭绝”模块大家也可以尝试用一下,为何说是尝试呢,这些模块并不稳定,并且极易造成WIN98下程序死机。并且打开易语言也会认为是调试器,从而会自动退出。 大家自己在易语言论坛上搜索吧。不推荐大家使用。 3.反调试支持库的使用 海洋的支持库也提供了反调试的功能,具体是海洋增强支持库。 但要注意兼容性问题,一定要在多个操作系统下进行严格的测试后才能发布。 4.通过检查父进程得知是否被调试了 一般情况下,直接运行的程序的父进程是EXPLOER,在易语言中调试运行的父进度是易语言,而在破解人手中运行的父进程是用于破解的调试软件。因此我们就有必要判断程序的你进程是否是EXPLOER或易语言,如果不是,非常有很大的可能是在奸人的调试软件中被调用了,这时就好办了。哈哈。 易语言论坛的用户“笨笨啊”提供了一个取进程与父进程的模块,并且有模块源代码,程序主要是由API取得进程内容。 大家可以搜索易语言论坛,用户名为“笨笨啊”,或关键字为“父进程”可以找到这个源代码。 下图是在易语言中调试程序时,父进程为易语言: 下图是易语言编译后运行,其父进程是EXPLORER.EXE,编号为860: 加密第5定理:一个正常运行的EXE的父进程是EXPLORER.EXE 不过这里要注意的是:奸人有可能将调试程序的名称改为EXPLORER.EXE,这样可以伪装一下吗?不可以,你需要检查一下名称为EXPLORER.EXE的进程有几个,进程ID是不是一样的?如果有两个不同的进程ID,那么这时再判定就可以知道是不是被奸人调试了。 5.使用多线程 在Debug的手册里可以看到Debug工具的局限:第一个局限是只能下4个内存区域的断点,每个断点不能控制超过两个字节,这样内存断点不能控制超过 16个字节的区域;第二个局限是对多线程只能同时跟踪一个线程。因此利用其的第二个弱点,大家可以多开几个线程进行来回验证。 多线程的编程方法参看易语言手册。 一般开5-8个线程就够奸人忙活的了。 加密第6定理:使用5个以上多线程来回验证注册。 七.注册机制 1.简单注册原理 在易语言安装后的程序“\e\lib\krnln\samples\软件注册.e”就是演示了软件注册的原理。 其中有一个子程序是重复取硬件码的,存在取硬件码失败的情况,因此要重复多取几次,如果取失败就用一个默认的硬件码代替。这个大家一定要看一看, 注册机的原理就是:用户在使用过软件一段时间后,认为软件较为理想,要求向作者注册,而此软件中提供了用户本机上的硬件号,用户将此硬件号发给作者,作者给出一个注册码,用户拿到此注册码后填写,软件就注册成功。注册码的计算是由硬件号产生的,计算过程只有作者知道。 例如:用户机器上的硬件号为34,作者返回的注册码为1904。用户在注册码输入栏中输入1904,那么注册成功。作者是这样计算的,34X56=1904。那么软件中也是这样计算的。以上介绍的只是例子,大家也许会说,从1输到9999,总有一个会遇上的,但事实是硬件码不会这样简单,可以是16进制的,而计算也不会这么简单,可能会用上矩阵也说不定,因此相比较而言,靠猜测的方法去破解是愚蠢的。 下面看一下易语言自带例程中的程序代码,此为要求用户输入注册码时的判断语句: 此为判断语句调用的返回注册码的子程序: 通过以上检查是否输入的硬件码与注册码对映。 而软件作者手上有一个注册机,可以生成此硬件代码,大家可以在此例程上加一个按钮,此按钮的代码如下: 这样作者就可以很轻松地得到注册码,然后将这个注册码发给用户用于注册了。 上述只是在一个理想的状态中实现的,即没有奸人对你的软件进行破解。如果奸人看上了你的软件,只靠这么简单的方法,那么一定会吃大亏的。因此大家在注册码生成的计算上要想尽一切办法使之复杂化,如:采用位异,采用加上计算数值,采用……有些办法将在后面章节中进行介绍。 2.RSA算法注册 ①RSA简介 使用RSA非对称密钥算法对指定字节集数据进行签署,支持32到4096之间任意合法的RSA位数,返回签署后的结果文本。 说明一,电子签名系统简要实现方法: 首先给所有具有签署权利的人员授予不同的RSA钥匙,RSA钥匙由“公钥”、“私钥”、“公共模数”三部分组成,为了生成符合要求的随机密钥,可以下载使用 http://dywt.com**/RSATool2v14.rar 第三方工具软件(内有操作说明)。然后将所有人员的“公钥”和“公共模数”成对向外公布,“私钥”由被授予人员自行妥善保管。 被授权人员使用“私钥”和“公共模数”对指定数据进行签署,然后将签署后的结果文本随同被签署数据一起发送,接收者收到后,使用该签署者公开的“公钥”和 “公共模数”及签署结果文本对被签署数据进行验证,如验证通过则说明该数据必定是此签署者所认可的,且没有经过任何篡改。 说明二,数字签名用作软件注册系统的实现步骤: 1、欲注册用户提供注册信息(如硬件代码、用户姓名等); 2、软件作者使用自己的私钥对该注册信息进行数字签署得到签署结果文本; 3、将此签署结果文本作为注册钥匙文件发送给用户; 4、在用户端的软件使用相同的用户信息、注册钥匙文件及软件作者的公钥进行签名验证,如果通过表明已经注册,否则表示未注册。使用本方法在私钥未泄露的前提下,可以绝对避免破解者做出软件的注册机。 ②RSA工具使用简介 RSATool工具运行界面如下图所示: 有很多人说RSA工具不会用,其实RSA工具的使用方法吴涛已说明得非常清楚了。下面引用吴涛说明书的原文: 吴涛写的RSATool工具使用说明书如下: RSATool 2.14 工具软件使用指南: (软件下载地址: http://eyuyan.com/RSATool2v14.rar) 为了生成符合要求的随机RSA密钥,请类似如下操作: 1、在“Number Base”组合框中选择进制为 10 ; 2、单击“Start”按钮,然后随意移动鼠标直到提示信息框出现,以获取一个随机数种子; 3、在“KeySize(Bits)”编辑框中输入 32 ; 4、单击“Generate”按钮生成; 5、复制“Prime(P)”编辑框中的内容到“Public Exp.(E)”编辑框; 6、在“Number Base”组合框中选择进制为 16 ; 7、记录下“Prime(P)”编辑框中的十六进制文本内容。 8、再次重复第 2 步; 9、在“KeySize(Bits)”编辑框中输入您所希望的密钥位数,从32到4096,位数越多安全性也高,但运算速度越慢,一般选择1024位足够了; 10、单击“Generate”按钮生成; 11、单击“Test”按钮测试,在“Message to encrypt”编辑框中随意输入一段文本,然后单击“Encrypt”按钮加密,再单击“Decrypt”按钮解密,看解密后的结果是否和所输入的一致,如果一致表示所生成的RSA密钥可用,否则需要重新生成; 12、到此生成完成,“Private Exp.(D)”编辑框中的内容为私钥,第7步所记录的内容为公钥,“Modulus (N)”编辑框中的内容为公共模数,请将上述三段十六进制文本保存起来即可。 ③一个简单的RSA注册机 例如:我们已通过上述RSA工具得到以下三个变量: 公钥: 20063 私钥: 7FC4638275AF6B27AFD040FED32A941D227154ECDE37ABFF73D72DB50F9FC70C75BC3AF0EC26016BC706D953A9C5D6831E0DDD27B42A182CB92A6E426693511E42EB0BF9D64459809D5EC305E13B2A85BA004BA934232305D3DA1205E7AD1D01744BBCF286B23D64CC68371FDD39DAA43861920DA3DE5F9335A77983BFD08A83 公共模数: CEB774FCCE9DB84A4452A0774264FC55F35A8D8AA9D1FC5EBD3E0880B7B62A4EF834FD6E855CD84A4D04F3BBDE32180FC3EE45AB5582C2320A6575C6ECF923A24EAF59F22F930631347E0E3B0477A89FCE22FE741F5053EC5320AAF6489CC407056361F01E031A02DB52CB0CBDFBB11F72C340354C6CAB78D97630EB8A6A5431 初始化代码如下: 注册窗口设计界面如下: 注册按钮代码如下: 上面的程序窗口插在用户的程序中,当需要注册时即弹出注册。 作者手中的注册机软件界面如下:(注意保密) 生成按钮代码如下:(注意保密) 上述程序已在易语言4.0中运行通过。运行抓图如下所示: 加密第7定理:RSA算法虽然很强,但弱在钥匙文件如何保密上。 ④算法实现中的注意事项 上述代码中取硬件码的命令没有采用重复取,而只取了一次,在实际操作中需要正规地多取几次,获取硬件码失败也要作相应的默认处理。并且硬件码好要转换为另一串字符串。 上述代码中所有字串均未作分解处理,实际编程中需要分解,且分别隐藏到程序各处。最好也加上密。 上述代码中注册码文本较长,可直接读取一个文本文件进行比较。即生成的注册码存在一个文本文件中,在点击注册按钮后,直接找这个文本文件的内容进行对比。文本文件的文件名可以是硬件号的名称。 上述是基本算法演示,其中的注册算法还可以再进行加工,变得更复杂一些。 上述中注有(注意保密)字样的代码与程序需要软件作者严格保密,不对外公开。 大家再看一个易语言大奖赛获奖作品:“家电维修”的例子,大家也可以在易语言新建窗口中找到这个程序,看看注册窗口的代码吧, |
-临-兵-斗-者-皆-阵-列-在-前-
|
监狱刚放出来个杀人犯~我回来了~
级别: 精灵王
精华: 0 发帖: 570 可可豆: 18202 CB 威望: 3120 点 在线时间: 386(时) 注册时间: 2009-01-20 最后登录: 2012-01-17 |
附录3代码与数据结合技术
《于破解过招,保护你的共享软件》 ——此文曾作为连载刊登于《电脑报》2003年41、42期,如要转载,请注明出自《电脑报》 ——本人仅是一名初学者,如有疏漏之处,还请列位前辈们指教,谢谢! crossbow@citiz.net 共享软件是软件业目前世界上比较热门的话题,国内更是如此。成千上万的中国程序员以极大的热情投入到这个领域来,都憧憬着用辛勤的劳动来获得丰厚的回报;但,实际并非如此,绝大多数的人都弑羽而归。值得注意的是:除了选题和技术上的原因外,最大的原因就是共享软件被破解(Crack)了。 破解见得多了,不免有些麻木。大部分作者都是新软件发布一个星期左右甚至一天之内就会在网上发现注册机或者被修改过的软件(行话称之为“*****”)。破解者制作了英文、中文、俄文、德文等语种的注册机大肆发散不说,还常常给作者寄一份,外加一封挖苦辱骂的信。唉!我们得罪了谁?没日没夜地熬夜编码,难道得到的就是这连绵的挖苦和不尽的羞辱吗? 不!决不!我们有理由也有能力保护自己的劳动成果!但问题是:如何保护?关注国内,网上关于破解资料和教程俯拾皆是,而关于软件保护方面的资料则是凤毛麟角(大多都关系到什么技术垄断),这种畸形现状就导致了相当一部分朋友的加密非常脆弱甚至可以称得上是“弱智”!要知道,你要面对的是已经形成团伙的众多破解高手呀,国内的什么CCG、BCG,国外的eGis、King、Core、TNT、DAMN和TMG,皆为水平一流的破解组织。全球盗版软件不少于80%都是由他们的破解的,技术实力连大软件公司都不可小视。 看到这里,你是否已经已经灰心了?别怕,虽然我们理论上无法完全避免被破解,但如果能够有效地拖延被破解的时间,并充分打击破解者的自信心,是可以让破解者无法忍受这种折磨从而最终放弃的。 破解,通常的做法有两种——暴力破解(*****)和写注册机。下面我就来依次讲解每种破解方法的原理和应对方法,这些都是鄙人积累的一些共享软件保护经验,某些关键地方还有例程讲解(Delphi代码,使用C++和VB的朋友可以自己稍微修改一下),希望能对新手们有些帮助,能够更有效地保护自己的劳动成果。 §暴力破解(*****) 这是最常见,也是最简单的破解的方法。该法最适合于对付没有CRC效验的软件,破解新手乐于采用。 大凡共享软件,验证是否注册大多数要采用if条件语句来进行判断,即使你采用了什么RSA或ECC等强力加密算法,也免不了使用if条件语句。呵呵,这里就是共享软件最为危险的地方哦,当然也是*****手孜孜不倦所寻求的目标呀! 例如,你的注册子程序易语言代码类似如下: .如果 (签名验证 (到字节集 (编辑框_硬件号.内容), 编辑框_注册码.内容, 公匙, 公共模数) = 真) 信息框 (“注册成功!”, 0, ) .否则 信息框 (“注册失败!”, 0, ) .如果结束 这个注册函数即使使用了强劲的RSA算法进行注册码验证,可是依然很容易被破解,我们只要把这里修改为: .如果 (签名验证 (到字节集 (编辑框_硬件号.内容), 编辑框_注册码.内容, 公匙, 公共模数) =假) 或 .如果 (取反(签名验证 (到字节集 (编辑框_硬件号.内容), 编辑框_注册码.内容, 公匙, 公共模数) ) =真)) 就可以破解成功了,这时戏剧性的结果会产生:随便输入任何注册码都可以注册通过,相反输入正确的注册码却无法通过注册。其具体操作是先反汇编或者跟踪你的程序,找到判断注册码的cmp、test等汇编指令后的关键跳转指令处,通常是je、jz之类的汇编指令,把它们修改为jne或jnz即可,这样常常只需要修改一个字节就可以完美破解之。 |
-临-兵-斗-者-皆-阵-列-在-前-
|