在学校的论坛里看到了别人转载的这篇帖子,感觉写得很好,拿来跟大家分享一下,可惜没有找到文章的原链接。
原文如下:
逆向工程不是炫耀者用来装B的工具
By Azy
逆向工程不是炫耀者用来装B的工具,因为逆向工程从来就是个脑力活加体力活,同时也是对逆向者身心的极大摧残和对意志力的严峻考验。它需要时间,更需要毅力,任何半途而废的举动都会导致前功尽弃的结果。而这些成本我相信都是那些想要炫耀一时的浮躁者所不肯付出的。
如果说反汇编只是功力不足的浮躁者或者是对解剖对象的不屑者走马观花式的分析举动,那么逆向工程就是长期浸淫于此的心静者和对二进制强烈好奇的探险者令人景仰的还原行为。而对于逆向者本人来讲,这更像是一次艰苦的旅行,但途中却不乏美丽的风景。它是一种大部分时间让人处于崩溃的边缘,但偶尔会让你迸发出发现新大陆的兴奋而能有资本和动力继续崩溃下去的这样一个东西。
真正的逆向者知道,仅仅靠激情是不能过活的。只有激情,远远不够,因为它充其量只是一个必要而非充分条件。
人们对于研究人员和科学家的最最基本的尊崇应该源自他们工作的脑力复杂度与社会价值性。即首先,他们做的这件事不是谁都可以做,需要有一定的知识积累和智力基础;其次,他们的工作应该是有价值,有意义的,而不是将“认识世界的目的在于改造世界”的理论抛在脑后。当scz将自己逆向还原出来的 ntdll中有关堆函数的资料公开时,得到了无数人的顶礼膜拜。因为这件工作一有技术含量二有实际价值,技术含量在于windows堆管理机制系统与算法上的复杂,实际价值在于为漏洞研究人员提供了绝佳的堆溢出理论指导与技术支持。
但是现在,我却发现真正有意义的逆向越来越少。我无法评论那些工作于地下的低调逆向者,或许他们所做的工作极有技术含量与价值,我所能看到的是充斥在周围的一些不明就里的逆向,我不知道这到底有什么意义。
我并不反对逆向与反汇编,确实也需要有人来公开软件内部的机制,尤其是在病毒研究领域,反汇编和逆向工程更是安全人员的饭碗与家常便饭,因为这是他们的工作。
但对目前将安全技术当作业余爱好并有意朝此方向发展的人来讲,是不是应该思考追求一种更加有价值的逆向,而不是简单粗糙的涂改一下IDB就自信满满地将其上传并期待高倍的页面访问与别人的赞美之词。
或许有很多初学者或是已经入门了的人都没有想过:为什么要反汇编,为什么要逆向。他们为了逆向而抛弃了一些根本上的东西。究其原因,或者称做我个人主观上的猥锁猜测:逆向让他们处于一种虚幻的"编码安全感"之中。他们可以意淫地说:源代码指定是我的了,只是逆不逆的问题。因为一个bin就放在那儿,所有的数据结构和算法流程都已经组织好,所要做的就是去读懂它,根本不用考虑在编程过程中的一切细节,也不用去担忧任何项目进度,而实际上这是一种心理上可怕的自我欺骗。
所以,被脑力与体力劳动以及高技术含量等光环所萦绕的逆向工程对于初学者而言有时更像一剂毒药,吞噬与消化了他们的创造力与想象力,它让人变懒,让人产生隋性,让人产生依赖。在强烈地满足了受害人的好奇心与猎奇欲的同时也将他们无形地匡入一个巨大的方框之中。而这个框的巨大危害就在于它使人们明白这祥一个事实:原来高手是这样写的,只有这样做才是正确的流程,我也要这样做。
学习是一个过程,但当这个过程通过一些所谓的捷径跨越了数个阶段而最终到达目的地的时候我不知道会不会生成畸形的产物,也许处于这个过程的人根本就走错了路,迷失了自己,忘了自己原来要做什么而只是在盲目的跟风,研究别人的东西而丢了自己的核心竞争力,并且天真的认为这些逆出来的产物只是对自己才是透明的,殊不知它的创造者只是不忍心揭穿你给你留一点面子罢了。也许在那些受益于你成果的人面前你是一个或许还比较伟大的"解密者",但在原始作者看来你只是一个猥锁的"偷窥者"。他把你往好了想会定位为一种公开与共享的行为,往坏了想那就是你随时准备PQ他的代码。
无知并不可怕,可怕的是我们丢掉了想象力和创造力并虔诚地跪拜于一个死板的知识框架内高呼“万岁”。我们应该意识到:思想比技术更加重要。
所以,对于初学者来说,停掉那些无意义的反汇编与逆向吧,或者让它再上一个层次。创新比重复更有意义。逆向做为一种借鉴更加合适而不必成为学习或创新的必须手段。
如果可以将反汇编与逆向工程上升到发掘漏洞的高度,那么你就不会仅仅满足于了解程序的内部工作机制。因为你有了更高的目标:subversion。即使发现不了什么0day,你也会发现原来的那份一发现冰山一角就迫不及待地想将其公开发表的浮躁情绪已荡然无存。
如果将反汇编与逆向工程上升到把它当作自己产品级工程的一次借鉴,并且你试图有所改进与创新的话,那么可以高兴地说:创新的灵感即将光顾你的大脑。
当逆向者完完本本地将几十K甚至上百K的二进制还原成形象化的高级代码并编译通过时,他可以在松一口气的同时大呼过瘾,因为他完成了一次修炼,功力得到了提升,甚至向禅宗的境界又近了一步。但是他更多思考的是可以汲取到什么,下一步该做什么,如何写出更加高效和优美的代码,如何创新,而不是将逆出来的代码原封不动地安在自己的bin里,抑或是整天被别人写的bin淹没在无尽的逆向之中。如果是这样的话,那么他或许只能算一个廉价的二次体力劳动者,而这个工人却有被F5代替的趋势。
从某种程度讲,浮躁者炫耀者或者是初学者都应该远离逆向工程,因为它或许只会让你体验到一时的自我成就与满足感,但却会养成一种依赖性的思维方式,脑子里产生一种“别人有bin我就逆”的懒惰思想。但是不久你就会发现,往日的激情早已不在,始终跟在别人的后面跑却距离别人越来越远,因为不注重基础积累和知识体系建立而盲目追求奇技淫巧的你已经到达进步的顶点。
逆向技术不是炫耀者用来装B的工具,这或许对初学者也是一个提醒:打好根基,动手实践与思考积累必不可少,但创新才是你与别人区别脱颖而出的策略。逆向技术不是万金油,也不是进步的筹码。
以上所写仅仅是本人的一面之词。如果很多观点你都不赞同,那就权当我在扯淡,在意淫,在装B,在自娱自乐了。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)