首页
社区
课程
招聘
[原创]我眼中的加密与解密
发表于: 2006-1-18 01:37 26541

[原创]我眼中的加密与解密

2006-1-18 01:37
26541
我眼中的加密与解密
作者:thebutterfly

我接触加密与解密已经5个年头了,在看雪论坛中也潜水了两个春秋,却一直不敢说自己的水平怎么样.面对这个标题,更是心有千言却难以下笔.我只能说说我个人接触加密解密的经历以及自己对加密解密的一些浅陋的看法,如果有不妥之处,还请各位高人多多指教.

(一)我和破解

我是从游戏中熟悉电脑的,上了高中,我终于有了一台自己的电脑.而我迷上破解是从借同学的一张光盘开始的.那张光盘上有一个目录叫"高手区",里面除了有一些CrackMe的破解动画外,还有看雪论坛当初编写的那本"Crack Tutorial"(名字不一样,内容相同),现在看起来那些东西似乎显得过于低级和简单了,可不管怎样毕竟是它们引领着我走进了破解的大门,更确切的说,是走进了计算机科学的世界(为什么?后面会说).
那本Crack Tutorial以及一些其他的破解动画确实给我了很多学习的东西,例如我印象最深的是几句程序判断注册的"经典组合":
1)cmp xxx,yyy
jz/jnz zzz
2)call xxx
test/or eax,eax
jz/jnz yyy
.........
现在你对这些可能不屑一顾,但以那个时候的加密解密水平来衡量的话,这已经是很不错的了(不信可以翻翻2001年的看雪论坛精华)
可是,当时我才高一,对计算机理论知之甚少,很快破解的学习便进行不下去了,主要是很多指令都不懂,例如对于一条简单的lea指令助记符,当时我就是不懂诸如lea ebx,DWORD PTR [ebp + 4]之类的指令到底是什么含义,虽然现在看起来这些指令是那么的简单,不仅如此,类似于消息循环等Windows程序的基本内容我都一无所知.所以,高二的时候我便下定决心要学习汇编语言.我利用去大学参加竞赛的机会买了一本x86汇编语言的教材,从此便开始了汇编语言的学习.
学习汇编语言并不是一帆风顺的.不少人视汇编为畏途,认为汇编是最难学习的语言之一,更何况我是自学.在高中繁忙的学习中,如果每天能抽出半个小时看汇编就已经很不错了,更要命的是有问题找不到人问,一切只能靠自己解决(有人问:看雪论坛呢?回答:当时我上不了网),x86的基本架构,指令寻址方式等我都花了很长一段时间才弄明白.这段艰辛的路程至今仍然记忆犹新.
到了大学,我有幸进入了软件工程系,得以继续学习我感兴趣的计算机.我利用1年的时间我自学完了Windows编程(靠的就是罗云彬的那本<<Windows环境下32位汇编语言程序设计>>),过程同样是曲折的,记得我有一次编写多线程程序时,程序怎么也不能正常结束,那时我花了3天的时间才弄明白原因:书上内容有误......
我买了<<加密与解密>>又一次开始学习,也是正式开始学习破解,到这个时候,我发现,书上讲的那些例子是那么简单易懂,高中第一次看加密解密时的疑惑这时全部无影无踪了.看雪论坛上不少的精华文章都能毫无困难的读懂.我深深感到当初选择学习汇编语言是正确的,正是因为那时的选择才使得现在学习破解才如此的顺利.
如今我仍然在学习<<加密与解密>>,但同时有有了新的挑战:学习保护模式Windows驱动程序的编写.

我对看雪论坛的认识也是从那本Crack Tutorial开始的,看雪论坛是我两个每次上网必去的论坛之一(另一个是霏凡论坛),不过当时论坛很不稳定,经常上不去,而且系统换来换去的(以后才知道是遭到攻击了),后来我家安装了包月的宽带,我才真正成为看雪论坛的常客,并在04年7月份注册了现在的帐号.看雪论坛确实是很好的论坛,国内没有其他破解相关论坛的质量有它高的.正是由于大家的无私奉献才造就了今日的看雪论坛.翻开看雪论坛精华集,对比一下2001年的精华1和2005年的精华7,感慨万千啊.

(二)为什么要学破解
记得当初初识破解时,我觉得破解很神秘高深,那些大牛破解了软件还不忘在软件上留个名,多么风光啊.正是由于这种动机才促使我努力去成为一名破解高手.如今的我当然还不能称为高手,可是我知道,我在成为高手的路上又走了一步.此时破解对于我来说已经不只是简单爆破几个玩具程序,它包含了更多更广的内容,如逆向工程.在学习破解的过程中,我不断学习到很多相关的东西,如SEH,PE文件的结构等知识.我曾经计划用10年的时间成为破解高手,现在已经过去了接近5年,不管到时候怎么样,我的目标不会变.10年不行就15年.因为破解已经成为我的兴趣,一种探索计算机世界的兴趣.所以说,当初的那些简易的Crack教程引领我走进了计算机世界的大门,不仅仅是破解的.

(三)我对加密解密的一些个人看法
此部分内容如有不妥之处还请各位指正

1.关于学习加密与解密
各位从我的经历可以看出来,当初我是对计算机一无所知,到现在初步掌握了破解技术,其间走过了不少弯路.关于如何学习加密与解密我就不多说了,看雪大哥有文章,置顶贴也有相关的说明(http://bbs.pediy.com//showthread.php?s=&threadid=769),我只是结合自己的经历来说明
----关于对"初学者"的一些提醒
学习加密解密的有两类人,其一对计算机已经有一些了解,例如懂汇编语言,懂计算机体系结构等等,只是不知道如何把知识应用到加密解密这一方面.这类人是真正的初学者.他们学习加密解密会比较容易,花的精力也会比较少.其二则是对计算机知之甚少,例如那些不懂汇编语言的,也就是和我当初一样.恕我直言,这类人其实不能称为"初学者",充其量只是"门外汉"而已,论坛上很多初级问题正是他们提出的(如某某指令的含义是什么等,这可以去查Intel的手册的).他们如果想达到一种比较高的层次,就必须花很多的时间和精力.但问题是,你有这么多的时间和精力吗?我当初从一无所知到现在花了5年的时间----我当时才高二,时间和精力都有.对于第二类人,我不怀疑你们的主观因素,相信其中有不少是愿意学习破解的,对破解真正感兴趣的,也是有耐心愿意学习的.但是我很怀疑你们的客观条件----时间和精力.学习破解基本上相当于学习大学两年的课程还多(如果你想成为高手).所以,如果你们想学好破解,想成为高手,首先要想想是否有充足的时间和精力.如果没有就不要浪费太多了,能玩玩几个简单的程序就可以了.

2.关于软件加密问题

有句话说:理论上任何软件只要能完整运行所有功能一次即可PJ.其实更准确的说法是这样:
(在Cracker不增加功能模块的前提下)任何一个软件,如果所有功能都能够在本地机器上运行至少一次,那么这个软件经过修改一定可以无限制的在本地机器上运行所有功能.(可以被PJ)
证明:在软件运行每一个功能模块时抽出此功能模块代码,然后将它们组合就成为PJ后的软件了(注意是理论上的证明)
逆命题也对:
如果一个软件可以被PJ,那么它的所有功能一定可以在本地机器上运行至少一次
证明:假设某软件已经被PJ,但是它的某功能不能在本地机器上运行,也就是说,从软件中得不到这个模块的代码,那么PJ后的代码中是如何有这一段代码的呢?注意前提:Cracker不增加功能模块
因此,一个软件可以被PJ   等价于   它的所有功能可以在本地机器上运行至少一次

也就是说,

一个软件不能被PJ   等价于   它不可能在本地机器运行所有功能一次

要打造(理论上)不能被破解的软件,这是一条基本原则
例如,Demo版的软件没有某个功能模块代码,那如果Cracker不自己写代码是无论如何也不可能PJ成全功能的软件的.

在第6期的看雪论坛精华中有篇文章<<保护软件著作权要注意避免的思路误区>>,作者是廖红旭,作者一针见血的指出当前软件保护的关键失误是"简单地通过条件判断语句来“甄别”合法用户",就是说,把整个保护的"终审权"交给一个简单的条件判断语句.应当说,作者是非常正确的,但是他提出的方案(“不论前述认证结果正确与否,都将该认证结果再次作为算子,经过必要运算后对发行前已受保护的软件核心功能代码进行解码”,<<加密与解密>>第二版P224的思想类似)也不能彻底解决这个问题,因为一旦Cracker得到了一个可用的Key,那么这个软件就相当于可以执行所有功能一次,也就是可以PJ,作者自己也承认这一点.

计算机=硬件+软件+网络,所以,加密和解密也必须体现这个特征.

考虑等价条件:它不可能在本地机器运行所有功能一次,怎样才能满足这个条件?思路如下:
a.本地机器上不能存在所有功能代码.
这是Demo版软件的特征,那么,正式版应当如何处理呢?
b.在非本地机器上存在本地机器缺失的代码,且这段代码不能在本地机器上执行(否则就相当于本地机器有所有代码)
如果认为这"非本地机器"是硬件,那么就有狗加密方案,如果认为是网络服务器,那么就有CS模式方案

写得很乱,毕竟是自己的原创,不妥之处还请各位多多批评指正

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (66)
雪    币: 3515
活跃值: (4042)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
2
对第2部分的不同意见:

只要是要卖的软件,必定有正式完整版,只要有正式的完整版就一定能有人破解。

所以理论上说,永远都没有破不了的软件。(当然我不行,那些高手行)
2006-1-18 07:33
0
雪    币: 44229
活跃值: (19960)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
非常感谢thebutterfly将自己的学习体会写出来,这样能给其他想学习加解密技术的朋友一个参考。
thebutterfly毅力真强,能坚持5年不容易。希望以后多参与论坛讨论中,这样你会认识很多朋友的,对自己学习也有帮助。
2006-1-18 09:34
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
4
一路走来不容易
2006-1-18 10:43
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
5
fly大哥搞PJ多久了呀
2006-1-18 10:47
0
雪    币: 288
活跃值: (415)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
6
顺便我也想问问kanxue老大是什么时候开始学破解的呢?
2006-1-18 10:50
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
最初由 thebutterfly 发布
我眼中的加密与解密
作者:thebutterfly

我接触加密与解密已经5个年头了,在看雪论坛中也潜水了两个春秋,却一直不敢说自己的水平怎么样.面对这个标题,更是心有千言却难以下笔.我只能说说我个人接触加密解密的经历以及自己对加密解密的一些浅陋的看法,如果有不妥之处,还请各位高人多多指教.

........


一个软件不能被PJ   等价于   它不可能在本地机器运行所有功能一次

要打造(理论上)不能被破解的软件,这是一条基本原则
例如,Demo版的软件没有某个功能模块代码,那如果Cracker不自己写代码是无论如何也不可能PJ成全功能的软件的.

这句话我劝你收回,你做不到不代表全世界做不到。而且我已经有认识的老外能做到这种程度。不过不在0DAY。不排除0DAY有高手,但最强高手就是不在0DAY。
2006-1-18 11:03
0
雪    币: 44229
活跃值: (19960)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
8
最初由 Pr0Zel 发布
顺便我也想问问kanxue老大是什么时候开始学破解的呢?


93年开始接触电脑,97年购了台MMX 166(8000元,真贵!),大概98年时候开始涉足这领域。但没人指导,走了不少弯路。

由于是非计算机专业,毕业后一段时间没电脑接触,但那时意识到汇编重要性,因此我学汇编时没上机操作的(那时做梦都想要台386,甚至是8086都乐意),也没人交流,完全啃书本,直到有了自己电脑。
2006-1-18 11:05
0
雪    币: 332
活跃值: (479)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
9
现在正处于"门外汉"阶段,估计也进步不了多少了,后悔当年没有进计算机专业(虽然很喜欢,当时只有绿屏的苹果机,觉得真神奇,但是最后还是计算机第二志愿――却不幸被第一志愿录取),至今没有学习过语言和数据结构,因此不会再进步了――没有精力,老了,年轻真好啊!

看雪老大93年电脑,呵呵,比我晚了5,6年呢。当时只有绿屏的苹果机,记得96年我还见过有人在用他打字!
不过接触破解比我早,我记得那时有个台湾有个俞煌男[辉煌[,中国有个高春辉,然后直到看雪学院的出现,带领我才真正进入crack!

我也是98年购了台MMX 166(也是8000元左右,真贵!),后来升级到k6-2 450,现在给老丈人玩游戏呢!不过在家没资格动电脑了,现在,唉!
2006-1-18 11:14
0
雪    币: 3515
活跃值: (4042)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
10
最初由 kanxue 发布


93年开始接触电脑,97年购了台MMX 166(8000元,真贵!),大概98年时候开始涉足这领域。但没人指导,走了不少弯路。

由于是非计算机专业,毕业后一段时间没电脑接触,但那时意识到汇编重要性,因此我学汇编时没上机操作的(那时做梦都想要台386,甚至是8086都乐意),也没人交流,完全啃书本,直到有了自己电脑。


我是97年大学时候开始接触计算机,大三才开汇编,结果没学,抄同学的才抄了58分,最后系主任给加了3分,没挂掉。

98年12月买的P MMX 166黑金刚,花了4600多,比你便宜多了。后来01年毕业换了K62-350,64M内存,现在放老家了,可是忘了把显示器放回家给老爷子玩,现在手头宽了点,笔记本和台机都有了。简直浪费。

00年后半年开始上网,常去白菜、文岭、双星、老看雪001论坛。

然后摸索暴力,一直暴力到现在。

汇编,算法,脱壳全是一窍不通。学不来。

BTW:2006脱壳教学我基本能看明白,但是看过去了,不几天就忘掉,内容的系统性上感觉还可以。
2006-1-18 11:25
0
雪    币: 44229
活跃值: (19960)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
11
最初由 laoqian 发布
后来升级到k6-2 450


呵~真巧,我后来也升级到k6-2 450,没想到TX主板电源部分带不起,用了一周主板烧坏了,不得己换块主板,后来内存升级到384M,这台电脑一直用到2005年8,现在终于跨进G时代了。;)
2006-1-18 11:43
0
雪    币: 251
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢楼主为我等晚辈指明前进的方向
2006-1-18 11:47
0
雪    币: 1334
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
最初由 china 发布


所以理论上说,永远都没有破不了的软件。(当然我不行,那些高手行)


此理论不适用于 大型机和没有留出调试接口的CPU;
因此这一理论有一定的局限性
2006-1-18 11:58
0
雪    币: 450
活跃值: (552)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
14
忆苦思甜了
向中国的cracker界的先驱致敬!
2006-1-18 12:16
0
雪    币: 332
活跃值: (479)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
15
最初由 kanxue 发布


呵~真巧,我后来也升级到k6-2 450,没想到TX主板电源部分带不起,用了一周主板烧坏了,不得己换块主板,后来内存升级到384M,这台电脑一直用到2005年8,现在终于跨进G时代了。;)


我的主板到没事。
不过,当时我为同事升级主板Bios时(一起买的同样配置)搞砸了,当时由于升级失败后他在插flash时趁我不注意插反了,一开机就烧了,不得已我只好学会了热插拔刷flash,幸好搞到一块旧flash,后来我把能接触的mmx166基本都给生了k6-2,呵呵!生了4,5台呢!不过因此(我在单位的也是mmx166,我一时犯傻也生了),熬了好久才换新机器!――单位管计算机的领导说,你的机器已经很快了,新机器给更慢的同志吧,当时我就晕倒了!
2006-1-18 13:26
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
16
最初由 laoqian 发布


我的主板到没事。
不过,当时我为同事升级主板Bios时(一起买的同样配置)搞砸了,当时由于升级失败后他在插flash时趁我不注意插反了,一开机就烧了,不得已我只好学会了热插拔刷flash,幸好搞到一块旧flash,后来我把能接触的mmx166基本都给生了k6-2,呵呵!生了4,5台呢!不过因此(我在单位的也是mmx166,我一时犯傻也生了),熬了好久才换新机器!――单位管计算机的领导说,你的机器已经很快了,新机器给更慢的同志吧,当时我就晕倒了!

2006-1-18 13:36
0
雪    币: 217
活跃值: (81)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
我学的是工程,97年的时候还在用486,汇编根本就不懂,后来看了一些书,感觉向天书,没多久也忘了,后来在白菜上混日子,可是没过多久白菜也关了,再上龙族混,可龙族的文章少,请求破解的东西不少,然后再停在看雪。看雪以前也看过就是觉得太差尽,一些好几天前的文章,最后发表日期竟然是当天的(与白菜不同地方)。后来慢慢明白这是回复的日期。来看雪闲逛慢慢成是一种爱好。虽然误入其中已经两三年了,可还是PJ盲(汇编、算法一窍不通),不过看到一些好的文章我也会收藏,一些好的工具我也会下载(也知道下了没啥用)。我从不曾想过成为“pj”,也许兴趣爱好就是这样的。
2006-1-18 14:15
0
雪    币: 288
活跃值: (415)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
18
我买第1台电脑是在2000年中, Celeron 566 (好像当时出了两个星期就买了 ),当时就花了7500.刚买到的时候什么也不会,只是在网上乱逛.那时候经常在Cfan(<电脑爱好者>杂志论坛)上面混,后来因为那一次cfan事件离开了这个论坛.
接触PJ是在2002年左右(不是学习),还记得当时那个软件加了壳,自己还不会脱,直接就用W32DASM来"分析",不脱壳当然什么也找不到,到现在想起这件事还觉得好笑
之后在网上看破解的文章,印象最深的是当时的7878787878大法,经过一年多的混乱接触后找到了一个路标:2004年6月23日买了<加密与解密>,之后就在这里注册了.一直至今.感谢Kanxue与论坛上面的朋友指点了我好多好多.
2006-1-18 14:38
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
19
最初由 laoqian 发布
现在正处于"门外汉"阶段,估计也进步不了多少了,后悔当年没有进计算机专业(虽然很喜欢,当时只有绿屏的苹果机,觉得真神奇,但是最后还是计算机第二志愿――却不幸被第一志愿录取),至今没有学习过语言和数据结构,因此不会再进步了――没有精力,老了,年轻真好啊!

看雪老大93年电脑,呵呵,比我晚了5,6年呢。当时只有绿屏的苹果机,记得96年我还见过有人在用他打字!
不过接触破解比我早,我记得那时有个台湾有个俞辉煌,中国有个高春辉,然后直到看雪学院的出现,带领我才真正进入crack!

........


貌似叫俞煌男,还有ErrorFree什么的,当时印象很深的就是他们的"78787878大法",当然那时候是什么也看不懂
2006-1-18 14:52
0
雪    币: 332
活跃值: (479)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
20
俞煌男!!是的
"78787878大法",现在俺也有时用用呢!不过有时还是87654321好用一些,都是78有时反而不好,^_^
2006-1-18 16:00
0
雪    币: 219
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
好文!要向楼主学习!
2006-1-18 17:43
0
雪    币: 176
活跃值: (100)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
22
最初由 鸡蛋壳 发布


而且我已经有认识的老外能做到这种程度。

说到这里我突然想起以前001论坛有过这样的文章,通过对内存的跟踪写出一个DLL来变成完全功能版,不过那篇文章怎么也找不到了,也是老外写的,不知道谁有的请贴出来,谢谢!
2006-1-18 18:01
0
雪    币: 225
活跃值: (146)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
23
我也说点,我至今对破解还一知半解!laoqian是俺同行(可能还是老乡,^_^),也不是计算机专业的,好像99年才有了电脑(可怜)C300A,在电脑上打游戏时间很长,知道看雪可能收拾2000年以后了(大概是03年吧,够晚的),之后发生了兴趣,主要是单位有带狗的软件,想自己家里也弄一份,就开始琢磨,到处找杂志,网上搜,好像2004年才真正懂了点,爆了几个简单的狗,之后忙于工作,加上没什么基础,也没什么长进(主要是毅力不够,懒得下苦工)!看雪的书都买了,零星看了点简单的,书基本作收藏用了!汗,惭愧~~~
2006-1-18 22:32
0
雪    币: 221
活跃值: (137)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
24
学习有二年了,可还是一个门外汉.真难呀.
2006-1-18 23:47
0
雪    币: 426
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kbs
25
越学越觉得里面东西多,尤其深奥的更多~~~~~~``
爬山还有个头,这到好,学无止境...
2006-1-19 08:19
0
游客
登录 | 注册 方可回帖
返回
//