如何学习软件逆向工程?

我是网络与信息安全相关专业的大一学生,想向逆向方向发展,目前会大一教的C,python看了python学习手册,汇编看了汇编语言:基于x86处理器,J…
关注者
240
被浏览
164,875
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

这样的问题邀请我N次了.学习逆向没有Silver bullet,技术在更新,你也需要不断的学习,但是大致上有些基础的东西是需要学习的.

需要看的书籍:
1.Intel 微处理器.
2.Windows环境下32位汇编语言程序设计
3.WindowsPE权威指南
4.C++反汇编与逆向分析技术揭秘
5.加密与解密第三版
6.IDA Pro权威指南
需要掌握的工具:
静态反汇编工具: IDA Pro/hooper(一般)
动态反汇编工具: ollydbg/x64dbg
Windows内核调试工具: windbg
看这些书的基础:熟悉C++,熟悉编程.针对不同的语言,你也要知道一些.至此,软件逆向你就入门了.

我始终认为,要在逆向与反汇编上有大的成就,编程是必须会的.再接着就是必须熟悉密码学.熟悉软件工程.因为越往后走,你会越发现,软件逆向并不是简单的反汇编,而是需要很多的知识.其中编译器的知识是需要的.软件逆向是会走向工程化的.很多时候一个人是在短时间内无法完成的.这个时候借鉴软件工程的方法,会有好处.目前在国内外对于软件逆向的研究并不是很成熟,软件逆向工程性的方法理论目前也没有成熟.因此在软件逆向领域是非常有挑战性的.这是一门新兴的领域,需要广大爱好者的研究和投入.

其次软件逆向是针对不同的语言,难易程度不同.对于非编译型语言,逆向的难度要小很多.目前我认为编译型语言逆向最难的是C++.对于C++的逆向,我十分推荐上面提到的4.C++反汇编与逆向分析技术揭秘这本书.
国外也有两篇极佳的论文/文章:
黑帽大会上的演讲:blackhat.com/presentati
Reversing Microsoft Visual C++ Part II: Classes, Methods and RTTI. igorsk .openrce.org/articles/fu
国内论坛上也有一些文章(大致看看就行了):
【原创】RTTI结构详细分析(VC++)
【原创】易语言消息机制分析(消息拦截原理)
【原创】MFC消息拦截分析(+示例程序分析)
【原创】逆向分析 C++继承内存分布(带虚函数) 及动态绑定实现

密码学在逆向中的应用:

【原创】UltraISO注册算法&keygen分析(已算出一组注册码)


所以最终的重点是啥?如果你只想了解一下逆向,看看前面两本书就OK了;如果你想逆向软件系统,达到我推荐的层次也就OK了;如果你想写反编译引擎,那就深入了解编译原理以及现有的反编译理论(看论文啊大佬);如果你想解放全世界,请先精通哲学:)