本文转自:https://blog.csdn.net/weixin_43415644/article/details/99618192### 本文作者:rkvir(二进制小组组长) 转自某推文,链接找不到了。 一. 在很久以前安全圈并没有把安全技术做出一个特别清晰的分类。在大部分人眼里,所谓的黑客,安全研究者指的就是研究渗透入侵一类的技术的从业者,并不知道什么是逆向工程或者说二进制安全。提起逆向工程也许还有人可以联想到软件破解,如果提起的是二进制安全,那么知道的人就真的是寥寥无几了。实际上二进制安全技术在20世纪90年代就已经有了一小群先驱者在研究。时至今日二进制安全以及发展出了完整清晰的体系,并且有大量的爱好者希望学习这门技术。虽然市面上已经有了许多的经典书籍可以让二进制安全爱好者们来学习。但是似乎没有人提出一条清晰有效的学习路线,避免初学者误入歧途。这也就是这篇文章诞生的目的。本文可能没有那么多的“技术干货”。只是为了给初学者明确为什么要学习Windows下的二进制安全,学习之后可以做些什么,又到底应该如何学习,从基础到深入,都应该做些什么。 二. 为什么学习,学习后可以做些什么?
(1). 因为二进制安全需要深入理解计算机的运行机制,操作系统原理。所以碰到此类问题,你可以很快定位到错误位置,为你的编码工作提供强有力的支撑。 (2). 碰到这类软件的时候,你可以通过逆向工程的方式,将其中的广告页面替换,甚至直接将弹出广告的函数直接ret或用nop填充掉。还给自己一个清静没有广告的办公环境。 (3). 当你想知道这个功能如何实现的时候,你既可以静态分析其函数的实现逻辑,也可以动态跟踪它的数据流向,从而完整了解该功能是如何实现的。 (4). 当软件崩溃是不是无从下手,但是学了二进制安全之后你可以使用调试器接管异常,去发掘漏洞产生的位置,定位到模块或者函数的某一条语句。然后提供给厂商修复或者自己二次开发使用补丁修复漏洞。 (5). 当中了杀软无法识别的病毒是不是很恐慌,学习了二进制安全后就可以直接手动分析病毒做了些什么,并且将其执行的操作逆转,拯救中毒的计算机操作系统。 (6). 刚刚发布的软件马上就被别人破解了,没有收入了。是不是很郁闷,当学习了二进制安全后,你可以对你的软件加混淆、加花指令、加反调试、加代码虚拟化等等手段,让破解者的破解成本增加到无法承受,从而放弃破解。 三. 学习后可以从事什么样的职业上面说的都是日常中的问题,那么如果我们要走专业路线,我们有什么样的职业可以选择呢,下面我们来详细了解一下。
四. 如何学习二进制安全 上面我们已经讨论过了为什么要学,学了可以做什么。学完可以从事什么样的职业。那么接下来我们要讨论的就是如何学习。当初学者兴致勃勃的准备开始学习的时候会发现,虽然书籍众多,却无从下手。一个不小心还会误入歧途,成为一个只懂得是什么,却不懂得为什么的庸人。接下来我们要做的就是,缕清这条线,让其清晰明了。 首先,我们作为二进制研发人员必须要懂的语言有三门半,为什么说是三门半呢,因为这四门语言是C、C++、Python以及汇编。C和C++属于一脉相承因此只算一门半语言,因为这两门语言的学习是连续的,不需要像学习Python或汇编一样重新学习语法结构。那么接下来我来说明一下为什么要学习这三门半语言。首先是C和C++,先不说开发杀毒引擎或者其他大型工程,仅仅有一点最为实际。那就是IDA pro所翻译出的伪代码是C语言格式的。另外在以后漏洞的学习中,除了汇编语言,C和C++是开发shellcode最为高效的语言。而且相比于汇编也更容易理解。并且也许我们想招写一些具有特殊功能的小玩意,比如远(病)控(毒)软(木)件(马),C和C++也一定是你最优秀的选择。或者我们需要写一些驱动代码,比如实现一个类似于火绒剑的监控软件,毕竟,你总不能去用易语言开发吧。现在的系统也不兼容啊对不对。 那么介绍完C和C++的用处,接下来说明下Python的作用。其实Python就像是一个万能胶水,哪里有用粘哪里。它可以辅助我们快捷的开发一些辅助分析工具或者Exploit。也可以充当解放双手释放劳动力解决重复操作的机器人。总之,Python除了性能感人,其他都不会让你失望的。最后说明一下汇编语言的作用。其实这是最不用解释的了。毕竟,动态分析中没有任何一款工具可以把代码还原成伪代码执行,我们分析过程中所接触的全都是汇编代码。 上面扯了一大段为什么要学习这些语言,那么下面来说明下如何学习这些语言。其实很简单,就是看书。当然如果觉得乏味,靠谱的教学视频也是可以的。 C语言有很多本书可以选择,但是我只推荐一本,避免选择困难。这本书叫做《C Primer Plus》,这本书的作者叫Stephen Prata,目前这本书已经翻译成中文版了,可以直接在网上购买。这本书详尽的说明了C语言语法你所需要了解的一切。推荐花30天时间简单学习,然后就开始学习C++。C++的学习我推荐使用《C++ Primer》作为教材。推荐学习时间依然是30天。 你以为我会让你接下来直接开始学Python?你太天真了。 C和C++在简单看完这两本书的情况,你只是知道,却不会使用。这时候你最需要的就是练习了。如果以前数学学的还不错,那就搞本《算法导论》,练习里面的算法与数据结构。如果基础差一点,就买一本国内出版的零基础学算法一类的书练习里面的例子。这个阶段我的推荐学习时长为60天。对,你没看错,和学习语法的时间一样长。 当你练习了这么久之后,就可以继续学习语言了。没错,终于到Python了,买本《Python核心编程》吧。你已经有了不错的基础,相信我,一周之内看完这本书你没问题的。不需要你记住所有库的 使用,Python的库实在太多了,你只需要记住大概有个什么库可以解决相关问题,需要的时候再去网上查就好了。 最后是我们的汇编语言,最艰苦的日子到了,这是个很难学的东西。我学习的时候也感觉头冷,但是很不幸,这是一门必要的语言。 汇编语言我推荐使用《汇编语言 基于x86处理器》这本书来学习。也许很多人都是学习的王爽老师的那本《汇编语言》入门的。我是我还是想推荐这本,因为这本书是我见过最容易理解的汇编语言教材。至此,语言阶段结束。 当我们学习完语言基础之后,我们需要学习的就是系统编程了,这个阶段我们只需要看两本书,但是别高兴的太早,因为这两本书都是大部头,好在我们不是专业开发人员,所以不需要看的那么细致。 第一本《Windows程序设计》,这一本主要讲解的是GUI编程。我们也就是写写安全工具,所以简单看看就行。但是一些以后可能会发现一些奇淫技巧,比如界面藏私钥这种操作。遇到了在了解就行。第二本是《Windows核心编程》,这本书主要讲的是Win32 API编程,需要好好了解一下,因为Windows下的恶意代码一类的,万变不离其宗,最后还是要走API这条路。 这个阶段的推荐学习时间是90天。学习完系统编程,我们要学习的是Windows下的文件结构,也就是PE(Portable Executable)结构,这个结构对于我们分析病毒还是漏洞都有着至关重要的作用,因此需要详细了解,讲解这个结构的书非常多, 我推荐使用《Windows PE权威指南》,这样既学习了PE结构,又复习了汇编语言。推荐时长30天。学习了这么多基础,铺垫了这么久。我们终于要开始学逆向了。软件逆向我依然只推荐一本书《c++反汇编与逆向分析技术揭秘》,软件逆向看这一本书就够了,但是看完之后建议看一些综合类的实战书籍,比如《加密与解密4》,然后我们还需要对Windows的调试原理有些了解,这里使用《Windows高级调试》以及《软件调试》来学习。 推荐学习时长90天 最后我们要选择的就是细分领域了,当然,也可以全学。 恶意代码分析我推荐《恶意代码分析实战》, 至此,我们的安全学习就已经踏上了正轨,需要在工作中不断精进,不断成长。 |
|