sudami和achillis对初学者的建议

简介:

sudami对初学者的一点建议

1. 若对Windows底层开发没有兴趣,不建议继续深究, 若有些兴趣可以继续。

2. 先广泛打基础,比如C/ASM/C++/MFC,再学习Windows核心编程,对R3上的一些开发有所熟悉,再系统的学习《操作系统》等书籍,理解整个系统的原理,构架,实现。

3. 有了以上基础,可以开始阅读一些驱动入门书籍,如《Windows内核情景分析》, 多上Google搜索资料,下一份WRK/ReactOS,没事翻一翻,搭好驱动编译环境后,可以尝试写些小驱动,在蓝屏中摸索总结,从而积累初级的经验。

4. 等成了驱动开发初级工后,可开始学习WindbgIDA的使用,多看源码多F1看帮助文档。

5. 等熟练以上工具后,开始Windbg动态调试,IDA静态逆向其他驱动(包括微软自己的)。 在这一过程中,你又会接触到脚本语言,汇编知识点,Intel手册,加密解密,Vmware等一堆的东西,同样你需要熟悉它们。

6. 等你熟悉以上东西后,可以给自己提些需求,并实现该需求,比如写个小型ARK,在这个过程中,你可以切实感受到开发一个程序是一个系统的东西,你又需要回到R3写界面,重温MFCWTL等设计与使用。当然又要写驱动程序,保证兼容性等问题,这个过程是漫长的,期间你会发现写一小部分功能,你可以扩展收获很多知识点。

7. 等你熟悉以上东西后,已经可以自己独立解决问题了,基本不需要到网上求助。

遇到问题,会利用WRK/Windbg/IDA/Google等方式自行搞定,如网上有现成的解决方法,借用之,取其精华,唾其糟粕。 若网上没有现成的,则需要你IDA系统文件,Load pdbWindbg动态调试内核等手段自行挖掘,若网上只有类似的程序,你可以逆向其关键部分参考之,而后变成自己的东西。

8 .等你经历了以上7个阶段,你可以开始系统的了解Windows的构架,站在产品的角度思考问题,分析问题,解决问题,对自己多提需求,进而再去实现之,这阶段是积累经验的阶段。

9. 基本能够胜任大多数公司的项目需求了。

 


achillis的一点建议

一、充分熟悉Ring3的常用API,熟练系统编程包括各种HOOK技巧等),各种进线程操作、文件操作、内存操作、同步操作等,都可以熟练完成,《Windows系统编程》、《Windows核心编程》是这个时期的最好参考书籍。

二、跟踪Ring3 API的调用过程,熟悉Ring3 APINative API的过程,最佳参考资料是ReactOS源码,或直接用IDA反汇编系统DLL(大部分常用API在Kenel32.dll里),或者直接用调试器跟踪API调用。

三、熟悉Native API,使用Native API编写一定量的程序,熟悉系统调用机制和系统基本架构(所谓的架构简单理解就是调用层次,这个完全可以通过调试跟踪来熟悉),熟悉内核中API的基本调用方法,这是转向驱动编程的一个非常好的过渡,参考资料Windows2000/NT Native API大全。

四、可以开始编写最简单的驱动程序了。楚狂人的驱动入门教程非常适合这时候看。张帆的《Windows驱动程序开发技术详解》,《Rootkits–Windows内核安全防护》也是这个时期的最佳参考书籍。

五、对驱动编程有了一定的熟悉,可以继续分块(进线程比较容易上手,然后再继续文件、内存、注册表等的学习)进一步熟悉系统机制,熟练程序要达到第一阶段熟悉Ring3 API的那个程度,这个阶段可能需要相当长的时间。可参考《Windows Internals》、《Windows内核情景分析》等等。

六、对大部分系统机制比较熟悉,可以开始编写一些功能性的驱动程序。可参考《寒江独钓》。

七、这个时候,你对驱动程序的编写已经随心所欲,所完成的功能仅仅受限于你的想法。

相关文章
|
8月前
|
人工智能 缓存 自然语言处理
初学者必须知道的对于面试的技术记汇
如何回答的一个技术记汇,或你对xxxx的理解 例如:你说一下对闭包的理解 答:1.xxx是什么 2.应用场景 3.优缺点 ​ 4.具体实现 5.还有没有更好的解决方案!
64 0
初学者必须知道的对于面试的技术记汇
|
10月前
|
监控 网络协议 Linux
libuv初学者学习笔记
开始阅读前,我简单的理解觉得是,类似于leetcode的一种题,外部同时启动开始,但是内部严格的按照线程1->线程2的顺序发生过程。
|
11月前
|
存储 前端开发 程序员
C++初学者学习笔记(下)
相比较于面向过程的程序设计来说有更多的封装的函数可以使用,相比较来说会比较方便。但是如何去设计整个程序的思路也是需要一定的训练的。
92 0
|
11月前
|
存储 算法 编译器
C++初学者学习笔记(上)
相比较于面向过程的程序设计来说有更多的封装的函数可以使用,相比较来说会比较方便。但是如何去设计整个程序的思路也是需要一定的训练的。
94 0
|
设计模式 缓存 运维
前端“老油条”给初学者的一些建议
这篇文章主要是介绍下现有的一些大厂的工作模式以及使用的技术栈以及经验,如果你是高手的话那可以忽略了,如果是初学者我建议是可以看看的。可以作为一个初步了解,可以从侧面看出自己应该学习哪些技术和知识,学习更多有用的东西,目标更加的明确。
85 0
前端“老油条”给初学者的一些建议
|
机器学习/深度学习 存储 算法
【入门必看-算法基础知识讲解】小白都也能看得懂
【入门必看-算法基础知识讲解】小白都也能看得懂
463 0
【入门必看-算法基础知识讲解】小白都也能看得懂
|
前端开发 JavaScript 算法
新手开始学习编程的正确姿势
最近因为疫情的原因,我没有出去找工作。我不会的东西还有很多,野路子学的一些编程知识都不系统化。目前已经感觉到技术提升遭遇瓶颈,想在家里沉淀一下。我在朋友圈还打出 180 天前端逆袭计划 的口号 ,但是自己又总有些踌躇不定。上次写的 CSS 学习笔记我都已经忘记了—— CSS布局之水平居中布局。偶然在 Medium 看到了一篇文章,比较认同作者 Lucas F. Lu 在 The Correct Way To Begin Learning How To Code 一文中的观点,遂于作者取得联系,申请翻译许可。
827 0
新手开始学习编程的正确姿势
|
程序员 Android开发 UED
UI设计初学者应该如何入门?
1、UI设计师是什么? 不说UI设计师,就连设计师,很多人都以为只是P图的美工,这里有必要先明确一下UI设计师的概念。当我们要学习一门技能,进入一个行业的时候,此时此刻正确的认知对于我们来说太重要了。
1309 0
|
JavaScript 前端开发 Java
小白编程系列(一):编程语言选择
前言 汇智网开通以来访问量一直在持续不断的攀升,数以百万计的用户为了学习编程,访问了我们的网站,通过使用我们有在线编程环境的互动课程获得了一些自己想学习的知识。
1458 0

相关产品

  • 云迁移中心