下面是programmer和cracker对注册码加密的QQ对话(稍做整理)希望对解密初学者和程序员有一定的帮助,对话中有没有理论错误,请大家指出,因为我是菜鸟难免会讲错,但我认为这样的谈话对不懂加解密的程序员来说会有很大的感触!甚至可能把他导向学习加解密或密码学的方向!!(希望能看完,指出错误)
!!
2004-12-30 19:13:49 maomao
想问一下,你的汇编和vc++怎么样?
2004-12-30 19:14:13 [程序员]
不行。
2004-12-30 19:14:58 maomao
我目前在学这些东西
2004-12-30 19:15:47 [程序员]
是吗?
2004-12-30 19:16:42 maomao
你对密码学怎么样?
2004-12-30 19:17:07 [程序员]
不好。这块真是不行。
2004-12-30 19:19:26 maomao
知道用汇编语言几乎可解很多当前的共享软件吗?反汇编后再用其他语
言写注册机
2004-12-30 19:19:46 [程序员]
是吗?
2004-12-30 19:20:57 maomao
你编的软件用明码比较再怎么加密,加壳也白搭,很容易破的
2004-12-30 19:21:42 [程序员]
现在不用注册码了,改用不同用户名分别编译。
网上公开的都是功能不全的版本,破解了也没用。
2004-12-30 19:22:53 maomao
也没有用的,只要有用户把他的软件放出来不就玩完了?
2004-12-30 19:23:35 [程序员]
可是该软件里含有该用户的标志。这样我知道是谁放出来的。
因为我把用户名直接写入软件里了。
2004-12-30 19:24:01 maomao
对我来说就很容易破,用汇编把里面的代码改了
用户名也改了,你就不知道了
2004-12-30 19:24:41 [程序员]
是啊。
2004-12-30 19:26:21 maomao
但如果现在叫我编软件不管用注册码还是用你的方法编一般人就比较难破,
但要在软件中加入相应的加密代码。我觉的按你的性格和条件很适合学汇编
2004-12-30 19:27:22 [程序员]
我的用户名称也不是直接写入,也是通过一定转换后再写入的。
2004-12-30 19:28:36 maomao
但你的转换是四则运算或异或是吧
2004-12-30 19:29:10 [程序员]
是啊?但我的软件是用加密软件加密过的
2004-12-30 19:31:01 maomao
也一样因为先脱壳,然后反编译原代码就暴露无疑
这就是解释语言的不好地方,而象用vc++,delphi编的是不可能完全反编译的,最多是反汇编,再说要看懂大程序的汇编思路就困难了
2004-12-30 19:32:09 [程序员]
那给一个我编的软件你试一下如何?
2004-12-30 19:34:05 maomao
不用了,你以前要求输入注册码的版本,在我这里自己写了个注册机。但我没有公开过
2004-12-30 19:34:43 [程序员]
好,千万不要公开啊。
2004-12-30 19:34:57 maomao
我可不是那种人
2004-12-30 19:35:12 [程序员]
好,谢谢。你学汇编多久了?
2004-12-30 19:36:11 maomao
我大学的时候就懂汇编和C只不过一直认为没用
2004-12-30 19:36:37 [程序员]
哦。
2004-12-30 19:36:56 maomao
有一种方法会使软件比较难破
2004-12-30 19:37:14 [程序员]
什么方法?
2004-12-30 19:38:09 maomao
对要求注册的软件来讲,比较的时候不要用明码比较,其实用注册码的方式也许比你现在的方法(一用户一个程序方式)加密效果要强,而且售后服务简单。
2004-12-30 19:39:11 [程序员]
那怎么比较?
2004-12-30 19:41:04 maomao
你以前的软件是用:输入的注册码=F(用户名),那么真实的注册码不是在内存中,就是在cpu寄存器里可以找到 (明码比较法)
2004-12-30 19:42:04 [程序员]
那要怎么办,我一直在思考这个问题。
2004-12-30 19:42:17 maomao
而你现在的软件加密方法(一用户一个程序方式)也一样好破,只要把你的比较代码语句用汇编改了就完了
2004-12-30 19:42:52 [程序员]
是啊。你说的用注册码方式,难道就不用比较语句吗?那怎么知道是正确的还是错误的。
2004-12-30 19:46:47 maomao
也用啊 ,不可能不用的啊!
2004-12-30 19:47:26 [程序员]
只要用比较语句,那把"="直接改成"!="就完了。
2004-12-30 19:47:48 maomao
所以现在摆在你面前的就是两个问题:一:如何保护比较和加密的关键语句不容易被破解 二:如何解除明码比较的弊端
2004-12-30 19:48:46 [程序员]
现在有方法吗?微软的office也照样被破。
2004-12-30 19:48:44 maomao
这两问题都是可以比较好的解决的,至少很难被破解!
2004-12-30 19:49:14 [程序员]
能说说看吗?我很想知道。
2004-12-30 19:58:01 maomao
我可以大概告诉你方法
2004-12-30 19:58:14 [程序员]
好。
2004-12-30 19:58:50 maomao
这些都和密码学有关,比如我们的信用卡就用那知识
2004-12-30 19:59:22 [程序员]
哦。
2004-12-30 19:59:26 maomao
你现在的软件在代码里还是用明码比较吗?
2004-12-30 20:01:31 [程序员]
没用啊。我根本就不用序列号和注册码了。不同用户单独编译。而且需知道转换算法破解。而要知道算法就要看原代码。
2004-12-30 20:02:53 maomao
那不是你的软件给谁都好用了,只是用户名显示不是自己而已?
2004-12-30 20:03:07 [程序员]
是啊,我现在就是希望用户不要外放程序。
2004-12-30 20:04:01 maomao
我觉的你的软件问题还真不少。
2004-12-30 20:05:00 [程序员]
可是你一直没说,现在用你说的注册码方式就一定不用比较语句?
2004-12-30 20:13:32 maomao
当然也用比较语句,但是把关键的语句进行加密并且完整性检测(如果发现代码被改,就拒绝执行)
2004-12-30 20:14:56 [程序员]
那如果把完整性检测(如果发现代码被改,就拒绝执行)的判断代码改了怎么办?总之程序只要有判断语句就会被改。
2004-12-30 20:16:26 maomao
至少这样就比原来的难破了,更何况又对关键的语句进行了加密,破解就更难了
没有象你想象中那样简单的。
2004-12-30 20:17:33 [程序员]
哦。
2004-12-30 20:18:46 maomao
你可以把加密的代码在运行时解密 用:关键代码=f(加密代码)
2004-12-30 20:19:41 [程序员]
那也在内存中啊。
2004-12-30 20:19:39 maomao
是啊但是他要修改关键代码就必须修改加密代码,你说对吗?
如果这点清楚了我才能往下讲
2004-12-30 20:21:46 [程序员]
好,清楚了。那他把程序反编译了看到了加密代码的加密程序过程,怎么办?
2004-12-30 20:23:48 maomao
那你看下面的函数,关键代码=f'(加密代码,公匙)其中f'在程序中公开,公匙也是在程序中,也是公开的(公匙只是一串字符串)而且要注意函数f'是不可*函数
2004-12-30 20:28:07 [程序员]
那下面呢?
2004-12-30 20:29:33 maomao
我一个字打不出了,哈哈
2004-12-30 20:28:07 [程序员]
没事!
2004-12-30 20:30:03 maomao
那你看下面的函数,关键代码=f'(加密代码,公匙)其中f'在程序中公开,公匙也是在程序中,也是公开的(公匙只是一串字符串)而且要注意函数f'是不可逆函数
2004-12-30 20:30:55 maomao
还有什么问题吗?
2004-12-30 20:31:07 [程序员]
好了。
2004-12-30 20:35:16 maomao
也许你会说那不可逆的话我们怎么生成加密代码?
2004-12-30 20:35:49 [程序员]
你写出来我来理解理解
2004-12-30 20:38:38 maomao
我们用:加密代码=F(关键代码,私匙)其中F在自己手里不公开,私匙也是在自己手里,也是不公开的(私匙也只是一串字符串),而且F是否可逆无所谓
只要找出这样的一对f',F 及 公匙,私匙 就行了(这样的加密方法在通讯中常用,网上一定有很多)找到算法源代码后,嵌入程序,算出一个自己的私匙,别人就很难破了
2004-12-30 20:35:49 [程序员]
那也是!
2004-12-30 20:43:32 maomao
而且破解的方法只有穷举法,只要算法好,私匙比较长,等到他穷举出来了,你又可以升级软件更改私匙了。有一点要说明上面的函数其实是简化了,在真实的算法中一般有两个私匙,两个公匙 。现在好讲修正注册码明码对比的问题了吗?
2004-12-30 20:50:13 [程序员]
很感谢,有收获。可以。
2004-12-30 20:53:11 maomao
其实注册码加密方法和代码加密也可以一样啊。我们在自己机器上用:序列号=F(用户名,私匙)函数生成序列号,在机器中用 用户名=f'(序列号,公匙),只要他输入了正确序列号才能通过(仔细看看和明码比较:输入的注册码=F(用户名) 有什么不同)
2004-12-30 20:59:19 [程序员]
好。我会把你刚才写的这些整理好,打印出来慢慢研究。
2004-12-30 21:01:40 maomao
这样不就解决了明码比较的两个不安全因素了吗?一。内存和寄存器中没有真实的注册码,二。他没法写出逆变换函数,即使代码公开也有他烦的,他能做的只有:要么用穷举法,要么把你的软件的整个加密子程序换成自己的,这样的工作相当于自己编软件,他如果想靠修改关键代码的方法(爆破法)就难了(因为关键的代码进行加密并且进行了完整性检测)
2004-12-30 21:04:34 [程序员]
是啊。
2004-12-30 21:04:49 maomao
怎么样?密码学,汇编,vc好吧!!
2004-12-30 21:05:07 [程序员]
是啊。我要好好学。
2004-12-30 21:05:35 maomao
以后学好了不要忘了我,否则你就太没良心了
2004-12-30 21:05:54 [程序员]
是啊。你是我师傅了。
2004-12-30 21:06:16 maomao
好象你以前对我还有所提防,当时我真想把你写的软件注册机代码给公开了
2004-12-30 21:06:39 [程序员]
幸好没有。谢谢
2004-12-30 21:08:10 maomao
哪里,你以后一定比我强,因为你现在还没成家,又是搞电脑的,而我是教物理的,又有家,没多少机会搞电脑
2004-12-30 21:08:46 [程序员]
我现在也烦,找不到合适的老婆。
2004-12-30 21:08:59 maomao
会有的
2004-12-30 21:09:21 [程序员]
可能还要等一段时间啊。今天好冷。
2004-12-30 21:09:39 maomao
是的,真冷。如果学加解密我可以告诉你捷径
2004-12-30 21:09:54 [程序员]
好啊。我正想学。有没有什么好的网站。
2004-12-30 21:14:08 maomao
你先买两本书:一本是XXX的《80x86汇编语言程序设计》;一本是段钢的《加密与解密(第二版)》,再就是到
http://www.pediy.com 及其论坛下载工具,资料和讨论问题
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课