学习周期:php
咱们把学习划分为十一个阶段。首先来看下学完这十一个阶段花费的时间,也就是学习周期。
自学模式:阶段一到阶段十应计划1年时间;阶段十一应计划1年时间,共2年时间
培训模式:若是参加一些系统的优质的培训可少走弯路,能够将学习周期缩减为1年时间
注意:在看书学习的时候,要习惯性的打开VC,常常实践书中的理论和例子。一些重要的代码在理解了以后应该再背着写一遍(注意:不是照着抄),加深印象,当背着写不出来的时候,再回头看看书中的代码。要明白,书看懂了,离会写代码还有一段距离,在写代码的时候还会遇到不少问题。遇到问题不要怕,解决了,才是学会了。html
要进入IT行业,作码农,首先就得精通一两门计算机编程语言。就比如你想成为一个伟大的做家,首先也得会一两门人类语言同样。不然,你即便能力再大,想法再多,也是没法实现的。计算机编程语言,是人类与计算机交流的主要途径。正是程序员经过编程语言,让计算机完成相应的任务。python
做为程序员的入门编程语言,咱们推荐选择C语言。曾经就任于Amazon和Google的卓越程序员Steve Yegge在他的文章《几种编程语言的优缺点》以及《程序员的呐喊》中指出“你必须懂C”,由于C最懂冯诺依曼计算机,而冯诺依曼计算机是当今计算机的架构标准。mysql
C语言是一门很好很实用的入门编程语言。C语言运行效率高,它是作底层和安全开发的必备语言。不少低效率的编程语言,也提供了访问C语言库的接口,就是由于C语言的执行效率高。时至今日,绝大多数的底层软件,包括操做系统(如Windows, Linux, UNIX等),数据库软件(如MySQL),办公软件(如OpenOffice),杀毒软件,网络通讯协议,包括JAVA语言的实现,互联网,以及各类内核驱动等都是用C语言开发的。C语言做为编程语言之王,是当之无愧的。截止2016年9月,C语言在TIOBE(http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)编程语言使用排行榜上依然占据TOP2的位置,仅次于排名第一的Java语言。linux
可是C语言的学习有必定的难度,这使得一些初学者望而生畏,学到中途就半途而废。某些高校为了减轻你们的学习负担,也放弃将C语言做为编程入门的教学语言,而选择更容易的语言好比Java做为编程语言。可是,只要坚持学习,C语言是能够学会的。并且只要把C语言掌握了,学习其它语言,就变得很是容易。事实上,不少优秀的程序员只懂C和汇编。程序员
在C语言学习过程当中,须要重点掌握的地方包括:redis
l 整数编码与存储;算法
l 二进制,八进制,十六进制与转换;sql
l 变量的类型,做用域,存储空间,生命周期;数据库
l 字符串的定义以及常见操做;
l 函数的传参:传值,传指针,(传引用);
l 函数的调用约定:cdecl,stdcall,fastcall,nakedcall,(thiscall);
l 指针,指针定义,*与&,指针加减运算,指针与数组关系,常量指针与指针常量,数组指针与指针数组,函数指针与指针函数,二级指针;
l 内存布局,分配与泄漏;
l 结构体,天然对齐与sizeof计算大小,结构体赋值(浅拷贝,深拷贝);
l 位运算与应用
l 学会调试工具的使用
入门C以后,须要进一步学习的书籍包括《高质量C/C++编程》--林锐博士,《C语言编程精粹》--姜静波
数据结构是算法的基础。算法又是程序的核心。因此,学完C语言后,应该当即学习数据结构。数据结构包含:字符串,数组,链表,堆栈,队列,二叉树,排序,查找,HASH表等等,这些都要牢固掌握。
数据结构教材推荐使用清华严蔚敏老师的《数据结构(C语言版)》教材。除了严蔚敏的教材,还推荐一本李春葆老师的《数据结构习题与解析》 李春葆 C语言版。这两本书结合看效果最好。此外,也一样能够参考麦洛克菲官网入门专区的《数据结构》部分。
数据结构是程序设计中的关键。所以咱们必定要多花精力把数据结构学好,打下牢固的基础。不能急于求成,数据结构都没学好,就想用VC等开发工具,写一个不错的软件出来,固然这也是不可能的。
数据结构中须要重点掌握的包括:
l 链表常规操做:建立,遍历,查找,插入,修改,删除
l 队列:先进先出,出队,入队,队空判断,链队与数组队列实现
l 栈:后进先出,堆栈,入栈,栈空判断,链栈和数组栈实现
l 树:二叉树定义,遍历(先序,中序,后序),二叉排序树,平衡二叉树
l 排序:插入(希尔排序),选择(堆排序),交换排序(冒泡排序,快速排序)思想,实现与复杂度
l 查找:折半查找,hash查找,平衡二叉树查找
汇编是一门颇有价值的课程。在调试程序,逆向和漏洞挖掘等方面都会涉及到汇编知识。有了程序设计和C语言的基础,咱们能够紧接着学习汇编语言。与C语言相比,汇编语言显得晦涩难懂。汇编语言包括各类各样的寄存器,内存地址,寻址方法,8086的经常使用汇编指令,再加上一些伪操做,还有 DOS和BIOS中断的调用。有了这些概念和汇编基础,咱们就能够看懂书上的汇编程序了。到此,你应该会对计算机的理解更深一层。学好汇编语言,对于理解计算机程序执行的底层机制,以及之后程序调试和分析,都有很大的帮助。推荐汇编学习书籍:《汇编语言》--王爽,《天书夜读》--邵坚磊。
汇编语言学习重点
1,CPU与寄存器(X86,X64)
2,汇编指令集
(1)CISC VS RISC
(2)传送指令:Mov/lea/push/pop
(3)算术指令
(4)逻辑指令
(5)串操做指令
(6)控制转移指令
(7)处理机控制指令
(8)指令机器码
3,C语句、函数调用的汇编分析
(1)循环语句(for,while,do-while)与汇编
(2)条件语句与汇编
(3)数组访问与汇编
(4)结构体访问与汇编
(5)结构体数组与汇编
(6)cdecl调用汇编
(7)stdcall调用汇编
(8)fastcall调用汇编
C是面向过程语言,C++是面向对象语言。一个程序员,是须要掌握面向对象的思想的。以把大象装入冰箱为例子,虽然一样是为了解决问题,在面向过程的程序员眼里,须要分为3步,第一步打开冰箱,第二步把大象放进冰箱,第三步关上冰箱门,而后每一步实现一个函数;可是在面向对象程序员眼里,首先是分析解决问题中各类不一样的对象,这里涉及的对象有3个:人,冰箱,和大象。而后再分析各个对象的属性和行为以及它们之间的关系。
找本C++上手的书(推荐《C++ Primer》),用一个月的时间去了解C++和面向对象语言程序设计思想,包括数据的封装,关系的继承,和多态等。C++的推荐书籍包括:《C++Primer》,《Effective C++》,《Thinking in C++》,《More Effective C++》。
C++重点学习内容:
l 封装
l 继承
l 多态
l STL模板库
如今大多数程序,为了提升本身任务的并发,都使用了多线程。在多线程环境里,程序为了保证全局资源的一致性,而提供了各类同步与互斥机制。
多线程与多进程重点学习内容:
l 线程与进程的概念和区别:资源分为基本单位,调度基本单位
l 事件
l 互斥体
l 信号量
l 临界区
l 死锁
l 共享内存
l 管道
如今是互联网时代,而网络协议是互联网的基础协议。所以,必须学会网络编程。在网络学习这块,最重要的就是TCP/IP协议的学习,SOCKET编程的学习。学会如何使用SOCKET进行通讯,传输数据。
推荐的书籍包括:《TCP/IP 详解 卷1-2》 W. RICHARD STEVENS 机械工业出版社。
网络协议学习重点:
l TCP/IP协议:协议分层,TCP创建链接握手,断开链接,UDP协议,IP协议,ARP协议等
l HTTP协议:GET,POT,PUT,DEL等
l SOCKET编程:ip/port,socket,accept,recv,send,recvfrom,sendto等
l 服务器端IO通讯模型:好比完成端口模型(IOCP),SELECT模型,以及EPOLL模型等。
后台程序通常都须要管理数据,好比注册的用户信息,订单信息等。这些信息通常都是存放在各类数据库中。所以,咱们有必要系统的学习一下数据库。数据库的学习,最重要的就是SQL编程的学习,包括insert,update,delete,select等语句的灵活使用。学习SQL编程能够结合具体的MySQL数据库来学习。各个编程语言都提供了访问数据库和执行SQL语句的接口。
此外,还必须了解一些非关系数据库,好比redis,mecached等。这些数据库比传统的关系数据库有更高的执行效率,通常用来作后台的优化和性能的提高。
SQL的学习推荐网站: http://www.w3school.com.cn/sql/index.asp。书籍:《sql语句用法与讲解》
,《MySQL中文参考手册》等。
后台服务器端程序,能够不用界面。但若是要写客户端程序,就必然会涉及到界面的开发。做为底层程序员,界面开发能够不精通,但必需要会。界面开发就是要处理各类控件来接受数据的输入和输出用做人机交互,好比按钮,编辑框,单选,多选,列表等等,此外还须要掌握控件的消息处理机制。
在WINDOWS平台能够学习MS官方的MFC界面库(对WIN32 SDK的封装,但开发更容易了),也能够学习跨平台的QT界面库,以及开源的DUILIB库。Linux中有GTK或者是QT界面库。固然还包括移动端的Android界面,IOS界面开发等。
实际上界面开发的原理都差很少,都是在处理各类控件和消息,因此入门仍是很容易的,掌握了其中一个界面库,学习新的界面库也很容易。
界面开发推荐书籍:《VC技术内幕》,《深刻浅出MFC》,《疯狂的Android》等。
曾经WINDOWS是一统天下,不可一世的WINTEL联盟长期占据IT市场绝对支配地位。可是,时过境迁,随着LINUX不但完善和发展,尤为是在Android将Linux选为底层操做系统以后,Linux系统获得了极大的普及和发展。如今谁也不敢小觑Linux了。
做为程序员,掌握Linux系统与开发成为必要,Linux平台的程序设计与开发是必备技巧。很难想象一个程序员,不懂Linux意味着什么。
Linux入门书籍推荐:《UNIX环境高级编程第二版》,《Linux程序设计(第四版)》
Linux系统学习重点:
l Linux各类管理命令
l LINUX文件系统
l VIM or EMACS
l GCC
l GDB
l LINUX开源项目:lamp/mysql,redis,memcached,curl,json等
通常来讲,程序员应该精通一门语言,熟悉2到3种语言,因此有必须学习一些其它语言。这里的其它语言包括JAVA Python等。在学好了C语言以后,若是再学习Java,python,php,C#等别的语言,就很是容易了。由于语言都是举一反三的,拿来就用了,并且C和C++算是语言中最难掌握的,若是都学会了,那么其它语言都很容易的了。
学习了JAVA,就能够进一步学习移动编程,好比Android应用编程(好比 《疯狂的Android》)了,而在一开始又学习了MFC的消息映射的思想,学习ANDROID界面编程也应该很容易理解里面的事件和监听机制,Android的界面布局与MFC不同,是经过XML来进行独立布局的,这个须要从新理解。从长远来看,程序员起码应该掌握:C,C++,Java,Python这几种语言,是颇有必要的。
推荐书籍:《Java语言程序设计-基础篇》,《Java语言程序设计-进阶篇》,《简明 Python 教程》,《Python学习手册》
在有了C语言基础以后,咱们就能够向本身最感兴趣和最擅长的领域发展了。对于安全专业来说,能够分为以下几个领域,固然这些领域不是孤立的,而是互相联系,相辅相成的。
主要分为Windows内核驱动开发和Linux内核驱动开发。所用语言主要为C语言,负责为系统编写.sys驱动或者.ko驱动。用来完成各类底层监控和管理工做。这是各种安全软件,主动防护,防火墙,自保护等必须用到的底层技术。
Windows平台内核驱动开发的重点内容为:
l SSDT,SHADOW SSDT ,INLINE HOOK
l 各类回调框架
l SFILTER文件过滤
l MINIFILTER文件过滤
l DISKPERF磁盘过滤
l TDI/NDIS/WFP网络防火墙
l 主动防护HIPS
l ARK等
LINUX内核重点内容包括:
l 内核的编译与裁剪
l 内核模块的开发与编译
l 内核内存分配
l 内核同步与互斥
l 内核中断上半部与下半部机制
l 内核HOOK与调试
l 基于linux内核的网络防火墙开发
推荐书籍:《Windows Internal》,《Windows 2000设备驱动程序设计指南》,《寒江独钓:Windows内核安全编程》,《Linux设备驱动程序第三版》,《Linux内核设计与实现第三版》,《Linux设备驱动开发详解》,《Linux_内核彻底注释_V11_赵炯》,《深刻分析Linux内核源码》
逆向技术就是使用反汇编工具,将二进制程序还原成汇编代码,而后再基于汇编代码分析整理,获得程序的算法逻辑,甚至还原出C语言代码。逆向工具通常都是使用强大的IDA Pro工具。固然,现实中不少程序为了防止被逆向,会使用一些保护措施,好比加壳加花指令等。注意,逆向技术与开发技术是相辅相成的。而且学习逆向技术,必须以开发技术为前提。若是开发技术都没有掌握好,甚至想绕过开发技术的学习,直接学习逆向技术,早晚会让你付出代价。你们能够关注下全部招聘逆向工做的帖子里,都会对开发能力提出明确要求,要求熟练掌握C和相关平台的开发技术。
推荐书籍:《The IDA Pro Book》
随着移动互联网的普及,移动安全问题愈来愈突出,尤为是开放平台Android系统,面临着日益突出和严重的安全问题,针对手机安全的威胁层出不穷。所以,移动安全是将来必须重点面对的技术领域。
推荐学习书籍:《Android软件安全与逆向分析》
移动安全学习的重要内容:
l NDK编程
l SMALI语言
l ARM汇编
l HOOK
l ROOT
l 动态调试
漏洞分析与挖掘是系统安全的一个重要分支。每当IT界有重大漏洞曝出,都让人心惊胆战,更况且还有不少黑客手握0Day而还没有曝光的各类漏洞,利用这些未公开的漏洞,能够随时入侵用户的计算机,窃取各类机密数据。
漏洞挖掘重要内容:
l 缓冲区溢出漏洞:栈溢出,堆溢出
l 任意地址写入任意数据攻击
l XSS攻击
l SQL注入攻击
l 竞争条件漏洞攻击
l PATH攻击等
l FUZZ测试
l 操做系统安全机制:Security cookie, SAFE SHE ,DEP, ASLR, SEHOP, Safe Unlink等
l 安全编码
相关书籍推荐:《0day安全软件漏洞分析技术》