[01sec] 二进制安全路线分析
作者:互联网
必读目录
1、Visual C++ 2013 入门经典(第七版)
2、汇编语言 基于x86处理器
3、Windows API -函数、接口、编程实例
4、Windows 核心编程(第五版)
5、Windows NT/2000 本机API 参考手册
1、Windows内核编程
2、Windows内核情景分析
3、Windows内核原理与实现
4、Windows内核安全编程
5、IDA Pro权威指南(第2版)
6、C++反汇编与逆向分析技术揭秘
7、软件调试(第二版)
8、数据结构与算法分析 -C语言描述
9、算法:C语言实现(第1~4部分)
10、Windows PE 权威指南
11、TCP/IP网络编程
12、Windows网络编程
学习经验
x86汇编我推荐看李忠的那本《x86汇编语言:从实模式到保护模式》(看完王爽那本之后再看),然后windows api部分可以换成《windows程序设计》(一定要第五版的),有空闲的话可以配合罗云彬的《win32环境下32位汇编程序设计》,然后要学习pe,这本强烈推荐《程序员的自我修养》(几本必看),然后看csapp(也就是深入理解计算机系统,必看),然后可以开始正式逆向和pwn的学习了,这里我推荐看雪的《加密与解密》,以及韩国人写的《逆向工程核心原理》,想要再拓展就看安天翻译的《逆向工程权威指南》(原大名鼎鼎的RE4B)。之后要想再深入的话在接触windows内核,这个阶段我建议去打ctf,re和pwn的领域,多刷题,坚持下来基本就成为大牛了
以上作为一个还算是搞二进制安全的人的建议(虽然现在主要研究病毒分析),当然如果还要深入就去搞操作系统,编译原理这些了,上面的算是基本功,而这个算是内功。不过最重要的不是看书看多少,必须要实践
顺便如果有钱,可以去考一个OSED,那个配套课程完整的讲解了windows下的漏洞利用以及开发,非常有体系,最后考一个证,找工作也方便(特别是国外找工作)
顺便我想说,看了这一大堆,要学的东西非常多,的确,花这些精力如果去搞开发,拿的待遇比这个不知道高多少。安全特别是二进制安全要达到能够养活自己的门槛就是非常高,而且默认就是全栈,你什么都得会,不仅限于二进制或者Web,这个是一个长期的过程,如果不是真的热爱,建议趁早转行
报名没有限制条件,你有护照就能报名,报名费大概1499刀,3个月的实验室访问,一次考试机会,以及配套的学习资料和视频,官方给出的前提是熟悉x86汇编以及windows常用api,熟练使用各种调试器,反汇编器,会python,C/C++也得会,其它的没啥要求,但是根据我学习的经验来看,最好还是把我最开始的那条回复的东西学完,不然钱容易打水漂。顺便考试资料、视频和考试本身全英文,因此你英语也得有一定水平
顺便推荐几个做练习的网站,等有一定水平再去接触:
PWN:
https://ropemporium.com
https://exploit.education
https://pwn.tn/home
https://pwn.college
https://pwnable.tw
https://pwnable.kr/
RE:
https://www.root-me.org
https://flare-on.com
https://challenges.re
https://crackmes.one/lasts/1
http://reversing.kr
C语言与单片机
关于C语言入门没有反馈的问题,其实可以考虑从单片机入门,不用学的多深入就能做一点东西了,新手学习用的小项目也很多。而且在没有了操作系统的干扰后,程序直接指挥CPU做每一步操作,更容易看到程序执行每一步后的反馈,也更方便理解程序是怎么控制物理世界的实物。单片机的RAM比较小也没有操作系统捣乱可以很方便的手动管理,更方便理解指针、结构体等容易容易把新手劝退的点。我上学时候 很多同学都是大一学校开了C语言的课,学了个狗屁不通期末考试30分都够呛,倒是大二在单片机课上把C语言学明白了。
不过从单片机入门也是有一些缺点和局限性的,比如需要有一点基础的电路知识(至少是高中水平),因为和硬件有关所以需要一定的动手能力。
那是你还没用到复杂功能,举个例子,把STM32如何操作GPIO等外设的底层代码搞清楚了,C语言的指针和结构体就算是学明白了。
C/C++
C++缺点之一,是相对许多语言复杂,而且难学难精。许多人说学习C语言只需一本K&R《C程序设计语言》即可,但C++书籍却是多不胜数。我是从C进入C++,皆是靠阅读自学。在此分享一点学习心得。个人认为,学习C++可分为4个层次:
第一层次,C++基础:挑选一本入门书籍,如《C++ Primer》、《C++大学教程》、或Stroustrup撰写的经典《C++程序设计语言》或他一年半前的新作《C++程序设计原理与实践》,而一般C++课程也止于此,另外《C++ 标准程序库》及《The C++ Standard Library Extensions》可供参考;
第二层次,正确高效地使用C++:此层次开始必须自修,阅读过《(More)Effective C++》、《(More)Exceptional C++》、《Effective STL》及《C++编程规范》等,才适宜踏入专业C++开发之路;
第三层次,深入了解C++:关于全局问题可读《深入探索C++对象模型》、《Imperfect C++》、《C++沉思录》、《STL源码剖析》,要挑战智商,可看关于模版及模版元编程的书籍如《C++ Templates》、《C++设计新思维》、《C++模版元编程》;
第四层次,研究C++:阅读《C++语言的设计和演化》、《编程的本质》(含STL设计背后的数学根基)、C++标准文件《ISO/IEC 14882:2003》、C++标准委员会的提案书和报告书、关于C++的学术文献。
由于我主要是应用C++,大约只停留于第二、三个层次。然而,C++只是软件开发的一环而已,单凭语言并不能应付业务和工程上的问题。建议读者不要强求几年内“彻底学会C++的知识”,到达第二层左右便从工作实战中汲取经验,有兴趣才慢慢继续学习更高层次的知识。虽然学习C++有难度,但也是相当有趣且有满足感的。
如果题主认为的「精通」是指上述所指的第二层次,那么我估计一年全职时间也未足够「精通」。首先,阅读这些书籍本身
也需要不少时间,而且对于一般人来说(指除了一些学习记忆能力超强的人),很可能需要阅读几遍才能记住一些细节。另外,阅读后必须要练习。除了入门的习题
外,还需要做一些工程向的项目,才能了解各种语法、编程范式的使用方法及时机,理想地建议参与一些开源项目。然而,学习是需要不断思考并把结果沉淀,方法
包括与朋友讨论、写博客、写知乎答案等,这些都需要时间。
如引文末段所指出,我建议不要把「精通C++」作为一个一年目标,应该要把学习语言作为一个持续的过程,同时要把语言运用在具体的应用场合中。
reference
标签:学习,二进制,编程,C++,C语言,路线,Windows,https,01sec 来源: https://www.cnblogs.com/p136f/p/16287080.html