Nothing is impossible-----看雪十年

   第一部   看雪十年之看雪彩虹

看  风见雨建站难
雪  天冰地梅花香
十  万朋友八方帮
年  年岁岁声望隆



密界看雪,巨变十年。看雪的十年,有年轻人的激情和理想,有自
强不息的意志,有志同道合的热血加盟,有五湖四海的帮扶。偶然和
必然,成就了一段东方的Nothing is impossible。

有梦想谁都了不起,有勇气就会有奇迹。

看雪的成功模式是西方经营模式的典范。借鸡生蛋,别辟洞天,敢闯
敢拼,优势带动。看雪的初期,和大多数雄心勃勃试图创业的人一样,
首先面临的首要问题是生存。时势成大业。科教兴国的战略和软件安
全的朝阳行业特性,是看雪渡过生存难关的第一要点。

看雪的崛起和成长,根本在于它的优势品牌效应:资料检索。加密和解密
资料的匮乏和稀缺,让看雪网站网路惜金。而看雪初期无偿共享的粗放式
原始经营理念,本是年轻人创业的弊端。但在这个特殊的行业和当时的冷
辟状况,却是因祸得福,引得各路志同道合的奇人异士相互交流,从而无
心插柳柳成荫,赢得了任何行业都要首先争取的生存法宝:人气。这是看雪
走出困境的第二要点。

看雪今天的壮大,在于一直强调实用,以及理论、实践的紧密联系。最典型的就是
Crack Me板块始终在密界中保持旺盛的人气,良性循环至今。有高手的神龙见
首不见尾的即兴表演,也有加密高手的神来构思,有菜鸟成长的愚者一得,也有
老手的一剑封喉。Crack Me大赛,无疑强化了看雪的品牌效应,给加密和解密
高手提供了一块良好的技术和思想相互交流的试验田。各路好手各显神通,绝技
纷呈,让无数人受益良多。

看雪近几年的经营理念发生了巨大的变化,开始了有目标、有重点、有推销、有
发展的有序经营。这令我困惑。似乎看雪得到了经验丰富的经营人才的真心点拨。
有传闻看雪得到了大财团的扶持。真假不管,看雪走向了正轨是好事,也是我等
菜鸟的心愿所向。密码学和.NET两大品牌的开拓,无疑是引领了密界的技术潮流。
究竟是何方经营人才,能有如此宏图大略,重点突出,居安望远,张弛有度?

不历经风雨,怎么见彩虹?

如果说看雪现在的隐忧,个人愚见,我觉得看雪的隐忧在于经营管理人才的相对
薄弱。经营人才和技术人才基本上是水火不容的。而看雪现在的经营人才构成
却忽视了这一社会铁律的潜在危害。不可否认,这个特殊行业里,技术出众的人
才有无形的权威。如何协调好这个毛盾,的确是一道现实的难题。

金融海啸,百业冲击,密界洗牌,黎明前夜。

看雪的十年,和许多人的人生轨迹一样,有坦途,更多的是弯路和挫折。失败是
成功之母。经历了太多痛苦阵痛的看雪,机遇当前,必将和伟大祖国一样,走向
繁荣和昌盛,和中华民族一起,让二十一世记的世界瞩目。

看雪百年,会是怎样?

Nothing is impossible!

看  龙腾密界惊艳
雪  花辉映聚英才
十  全十美争最好
年  来人往铸霸图 



  第二部   看雪十年之看雪论剑

看   独孤九剑无敌,
雪   密冰川漏洞寻,
十   发十中佳话传,
年   积月累天才汗。


业余看雪,看雪业余。闲暇观战,见证神话。Crack Me 2009大赛历时近一月
余,硝烟虽去,探讨味浓。赛后至今,各路加解密高手仍将自己的体会和观感
凝聚成作品,交流印证。

锻炼研究分析能力是我踏入密界的初衷。我想谈谈我个人的所观所感,仅供参考。

Crack Me 2009大赛是加密和解密的最高水平的较量。Nothing is impossible,
相信是大多数参与者最直观的感受。SMC加密技术的普及和ccfer解密的强悍,无疑
是这次大赛的主旋律。对于我而言,这次大赛令我感触最深就是境界。外星人神定
气闲的表演,无疑是对SMC加密技术逆向可行性的争论的最有力明证。花指令、代码
混淆和SMC技术,是三大对抗IDA静态分析的有力法宝。对于花指令、代码混淆在动
态调试面前的相对脆弱,SMC加密技术和数学难题算法(和/或密码学算法)的有机
组合,对于动态调试却同样有着相当的加密威力。这次大赛中,众多加密高手都采
用了此技术,就是最好的明证。

值得一提的另一位传奇的解密高手是海风月影,享誉国际密界的Strong OD的作者。
他(抑或是她?)在大赛中的神速爆破,引发了我极大的研究兴趣。高效率爆破的
背后,是否有专门的爆破脚本的作品问世呢?

这次大赛中,众多加密高手采用了许多常见的加密手段。我试图从实用性、稳定性、
兼容性和普及性等方面来对加密强度进行大致的排名。

第一位:算法。

复杂的算法是加密的王道。

密码学算法是最佳首选。各种密码学算法的有机互补,依然在对抗时间成本上威力巨大。
然而,在算法的隐蔽性上,加密者需要费些心机。原来CRC是可逆的,这个结论对于
大多数解密者而言,相信如获至宝。如何隐蔽密码学算法的特征码,是加密者需要重点
处理的关键。

数学难题算法在历次大赛中盛行,似乎有成为加密主流之势。甚至有人觉得:解密=数学好。
我个人并不认同这种论断。壳狼兄的数学家老婆就是个很好的明证。既然加密小组中加密
高手和数学高手可以相互合作,为什么解密就不能各自分工呢?同时,数学难题算法对加密
者的素质要求过高,不具有很好的普及性、实用性。

加密者自己设想的算法。这往往是双刃剑,实际的效果却是和加密者的初衷相差甚远。最尴尬
的情况常有发生:算法过于复杂,往往存在加密者不察的算法明显漏洞。最后的高级组决赛,特例漏洞给了一流的解密高手展示潇洒的一剑封喉的机会。

模拟游戏算法于是顺理成章地成为了加密者的宠儿。游戏算法的复杂度符合加密者的要求。数据和规则的繁复提示:解密者必须熟悉游戏才能有效地提高理解效率和解密效率。立体图形化的算法模型,既考验解密者的几何数学的能力,也考验对IDA的使用经验的日积月累。这次大赛中,推箱子和魔方两题中的防御实战效果明显。那么,我们是否能据此得出歪论:解密=玩游戏好?我个人得出的结论只能是:
加密的精髓在于加密者对于多门学科的扬长避短的巧妙引用。而对解密者而言,素质要求更高,不但要解密技术好,还要知识面广,兴趣广泛,广交各行各业人才精英。最理想的情况应该是:找个数学家的老婆,玩游戏高手的情人,学心理学的小蜜,搞密码学的大姐,认个编程高手大哥。

第二位:猛壳

猛壳的实战效果是相当明显的。从实用性、稳定性、兼容性和普及性四种评定标准中,任何一方面对加密强度的效果都是令人满意的。实战的缺陷就是过于普及。一流的高手通过脚本相互
传递研究心得,接力研究,用人海战术分段分析,步步逼近壳的保护机制核心。一流的脱壳高手的带壳调试,再一次展示给我们Nothing is impossible。猛壳的弱点在于脱壳高手集体智慧的结晶-特征码。壳的精髓在于壳的保护机制。手动脱壳是任何研究解密的人提高自己的必须练习手段,其中PE结构是脱壳研究的重点。

第三位:SMC技术

SMC技术有效地防范了爆破,也是这次大赛的拦路虎。数学难题算法的互补,使得解密者即使得到一份正确的注册信息,仍然较难做出注册机。适当地与反调试技术、花指令有机地结合,实战的威力才能更加强大。ccfer近乎神技的概率穷举,是对SMC技术的巨大挑战。相信围绕SMC的加密和解密的攻防仍会精彩纷呈。

第四位:反调试

反调试往往受到加密新手的追宠。反调试检测工具和Strong OD对于反调试手段具有相当的制约。基于内核的反调试技术在用户机器的稳定性和兼容性上,还有许多需要完善的技术细节。反调试如何防范有经验老手的静态分析?
在实际运用中,有时会和某些壳在兼容性上存在问题。

第五位:双进程保护

双进程保护对于Ring 3级的调试器,实战效果还是非常显著的。在提升解密者的分析时间成本
上,有着明显的实效性。适当地与反调试手段结合,是加密者的常用技术组合。实战效果主要体现在算法的隐蔽性上。可以考虑适当地与反DUMP技术结合。双进程技术有时会被杀毒软件
误报,对加密产品的市场形象有所影响,至少在公立单位的销售上会遇到不小的阻力。与WIN系统高版本的数据保护技术的冲突,也是需要注意的地方。

第六位:花指令和代码混淆

这是高手最鄙视的垃圾,加密强度低,主要防御对象是静态分析。但适当地和反调试、反DUMP技术结合使用,能够大大地增强反调试手段的隐蔽性、可读性。它的实用性和普及性、兼容性、稳定性都符合。但由于交互式OD或IDA脚本的存在,解密者可以慢慢地戏弄。前提是只要有利可图。


Crack Me 2009大赛是加密和解密高手乐此不彼的试验田,见证了看雪十年的成就和壮大。菜鸟如我,为什么不能利用看雪的强大的资源检索,拼凑出山寨版的Crack Me 2009大赛述评?

Nothing is impossible!


   第三部   看雪十年之看雪菜语

看  菜鸟想飞密界
雪  冻难冷高手梦
十  万小时何足道
年  月如梭绝技锤

  我是菜鸟又菜鸟,我能学会破解码?
Nothing is impossible!

  对于菜鸟而言,如何才能高效而迅速地成长为密界高手呢?心傲的我,带着这个疑问闯进了
看雪。看雪的资料和我的自学秉性相互结合,让我对逆向有了自己的一些肤浅认识。

  首先,我们需要的是对加密和解密进行对象定位。加密和解密是对软件安全研究的学科。
它的研究对象是程序。程序由一个主线和两个部分组成。主线是程序流程。两个部分是程序
结构和数据。

  解密难学,难在何处?
解密之难,难在程序结构和数据相关规定的繁复上。
解密之难,难在多学科、多领域的交融组合。这就对解密者的知识面提出了极高的要求。

  作为菜鸟,能够学会解密吗?
Nothing is impossible!

  作为菜鸟,如何学习解密?
你是如何学会、精通游戏的?游戏的入门,首先是游戏规则的熟悉和掌握,其次是游戏的
常规打法的了解、掌握,最后是不断地揣摩、总结,打出高水平的游戏。

游戏和解密的最大不同,就在于规则的简繁上。解密涉及的程序结构和数据的诸多繁琐的规定,对入门者的兴趣维持是很现实的考验。甚至是能够熟练运用高级语言编程的高手,对于系统底层相关的结构和数据的知识也需要大量的精力和时间去熟悉和掌握。

想要速成的人,只需要学会并掌握如何使用解密工具就足够了。

要想进一步的提高自己,我觉得首先学习者自己要有“十年树木,百年育人”的认识。其次,
要坚持循序渐进,打好解密基本功。特别是非计算机专业的,要有充裕的时间来玩解密。

作为计算机专业的入门,最困惑的是如何高效的下断。其次是不会调试分析,易语言和MFC是他们的头痛之处。最后是对底层系统的程序结构和重要数据的认识缺乏,常见的如SEH和反调试。
他们学习的盲点在于逆向分析思维的意识不足。写出注册机是学习提高的必经途径。更高层次
是手动脱壳分析,分析重点是壳的保护机制,通过壳的分析和学习,追溯相关的程序结构和数据方面的知识。作为高效率的解密学习,对相关保护技术的编程是捷径。再提高就是不断地交流,和实践的反复锤炼。

作为非计算机专业的入门,在现在的加密水平下,在多学科知识相结合的大趋势下,想要得窥门槛,难度是巨大的。然而,业余起步的逆向高手,往往不飞则已,一飞惊人。作为业余的,我想除了少数天赋极高的人才外,大多数人最现实的学习解密之道是对解密的某一方面进行深入的研究。例如脱壳、翻译、教学等。

看雪网站上的解密资料是我所见过最全的。如何充分利用好这份资源?

模仿是人的天性,也是入门的必然学习途径。但模仿到一定时候和水平,必须要有自己的思考和笔记。笔记的内容不是流水账。笔记要求你对自己的体会尽量浓缩成最少的语言来表达。
笔记并不是记录你的成功结果,而是对你的困惑和解决之途的探索及所得,要善于归纳总结。举个简单的例子:

学脱壳的都知道脱壳的七种基本方法如下:
方法一:API函数法
方法二:ESP定律法
方法三:内存镜像法
方法四:一步到达OEP
方法五:最后一次异常法
方法六:模拟跟踪法
方法七:“SFX”法

就我现在的理解,我将上述七种方法归纳总结成一句话:上述方法都是对壳的流程的不同解读,解读的目的是最大效率地找到OEP,从而能够迅速定位自己关心的问题。

运用到我们的脱壳实践中,如何迅速地把握壳的流程是选择高效率地脱壳切入点的关键。随后
才能对我们关心的壳的相关保护机制进行剖析和学习。比如,老是看到有人在脱文中说手动
追踪IAT加密时,按SHIFT+F9按了数百下,手都酸了,眼睛估计也挺累的。这个人脱壳分析
低效的关键在于对壳的流程的把握和理解不足。随着你对壳的流程理解的深入,你可以有好几种方法从低效中解放出来。

在模仿中始终要以批判的眼光有选择地吸收,善于发现问题,经常举一反三,才能学得扎实,
学得深入。

例如
1.关于脱壳中SEH的调试,许多脱文都是教我们说看堆栈的SE句柄。然而,我用的
看雪版本里没有SE句柄的显示。
2.已经按了SHIFT+F7进入了SEH,怎么办?难道要重头再来?OD查看里有个SEH链,一看就行。
3.被壳修改了SEH的处理代码的地址怎么继续单步跟踪?复习一下,SEH结构的深在含义,尤其是CONTEXT指针+B8的理解。
4.碰到INT 2D,如何用OD进行调试?
5.壳的某个SEH处理代码中有反硬件断点处理,我手动分析时,发现花指令繁多,可读性差。如何高效地迅速定位到对反硬件断点处理的代码位置?

这些所有的实际调试中遇到的问题,都迫使我们回头一次次复习SEH结构,更对FS:[0]的理解日益清晰。最后的问题:堆栈的SE句柄显示的原理是什么?一切问题的核心,都归结为对SEH结构的理解层次,以及对于结构中重要数据的含义的理解层次。

高手重结构,
新手重数据,
F7脱壳王道,
核心是调试。


ccfer的神奇是他不断追求完美、追求高效的回报。作为模仿者和学习者,我们除了学习他的破解之法,解题思路,更要揣摩他的高效秘诀。为什么高手定位IAT加密如此高效率,脚本编写代替手工分析是关键。于是,我开始学习LOVEBOOM的OD脚本编写。对于SEH异常,对于已经掌握的反调试(锁键盘鼠标、EnableWindow),都可以用脚本来交互式调试。

要学会自我钻研,触类旁通。一些脱壳文章中,介绍说查找FF25来迅速定位IAT表的位置。那么,能不能找到一种比FF25更简便、适用范围更广的迅速确定IAT表方位的方法呢?存疑是最有效率的学习方法。我自己总结出一种。后来又翻出看雪的旧帖,学到了另外的方法。

作为加密和解密的独特魅力所在,就是对于漏洞的发现和攻防。许多加密者往往对这些漏洞
缺乏感性的认识,导致加密作品的秒破。对于算法漏洞而言,我以前总结出两条:特例漏洞
和常量漏洞。这次的Crack Me 2009大赛,让我对概率漏洞和穷举漏洞有了全新的认识。对于
结构漏洞,则内容相当丰富。例如,爆破点就是最最基本的结构漏洞。

不断地交流,在交流中探求差距的原因,是走向高手的最有效率的提高方式。ccfer、sessiondiy和乌龟大师给了我很多的临摹机会,许多无名的高手的文章也对我启发不小。Petnt大侠的破文,让我认识到学习汇编编程的重要性。这次ccfer的表演,更加深了我对学习汇编编程的重要性的认识。在每周一次的实际脱壳练习中,我开始尝试不看内存、寄存器和堆栈的内容,进行汇编代码的阅读、分析。感觉很别扭,也很吃力。我明白循序渐进的重要性。同时,我开始有意识地理解老壳的特征码的内在含义所在,有意识地记忆一些特殊的机器码,梦想有一天能够养成下意识的反汇编本能。以后有时间,学习汇编编程是不错的选择。路漫漫其修远兮 ,吾将上下而求索。

我能吗?Who knows,just do it!一步一个脚印。有耕耘,就会有收获。

Nothing is impossible!

看雪的美女都喜欢看雪!

Nothing is impossible!


                                                      

                                                     NBA2005 
                                                                               20091207 22:42