此系列文章用于记录Windows逆向学习系列的要点和学习经历。对其过程进行整理,一则对学习过程进行记录和总结回顾,二则希望有幸能为其他学习者提供经验和借鉴。
0x01 前言
逆向学习作为一门相对门槛较高的技术,其学习路线是较为漫长的,相对来说,拥有某种语言熟练的编码能力,了解计算机原理,且对汇编语言较为熟练的人可以更简单的入门此内容。
如果毫无编程经验,并不建议以学习应用为目标来接触此内容,我的理由是:逆向在实际应用过程中,需要编程经验来辅助,相应的,他也会提升你对编程环境的底层认识,使你更容易在编码过程中对代码进行性能优化;同时,逆向在实际工作工程中的应用往往需要与其他编码工作结合才能有所产出。当然,若只是出于兴趣了解,以上内容自然是无关紧要了。
本人学习的目的是为了从底层了解更多编译与硬件相关的技术,提升代码优化的能力。同时,对汇编进行更牢固的掌握,在WIN32逆向过程中也可以提升对windows系统核心原理的理解。
0x02 学习准备
我选择的工具书是较为经典的《逆向工程核心原理》作为学习路线的指引书籍,同时使用《汇编语言第3版》与《Windows下的32位汇编言程序设计》作为汇编辅助参考书进行学习。
学习过程中,使用“吾爱破解”网站中的《160个CrackMe》和www.tuts4you.com中的CrackMe作为实际逆向分析用例。
对于书中的例子,源码部分学习时,使用Win10+VS2019进行编译和测试,通常编译32位进行学习,同时也编译64位比较其差异,为后续进阶学习64位做准备。
逆向分析一般分为静态和动态分析,该系列中先使用OLLYDBG动态分析工具进行学习,后续再研究IDA Pro进行静态逆向分析的过程。
0x03 知识准备
在进入学习之前,你应该检查自己具备的基础知识:
1.Windows程序运行过程(程序如何加载到内存,内存地址是如何划分)
2.什么是程序模块,动态库
3.什么是API
4.什么是程序的堆栈调用
以上都是OLLYDBG分析一个程序的相关界面和知识点,如果你不想打开软件后一头雾水,请务必对以上知识进行了解。