逆向
前言
逆向是对一个程序的反编译,从它的可执行程序中反推出程序的结构、流程、关键部分甚至是全部代码
以C(C++与C大致相同,下文不再重复)为例,编译生成的可执行程序(.exe)是代码经过编译、链接生成的PE格式文件。内部蕴含的代码实际上是机器码,可以用汇编语言来解释。
由于语言有许多种,例如C++、VB、C#、Python、Java甚至是Android等等,它们各自有各自的特性,因此想逆向一个程序首先要熟悉它的机制、正向代码流程等
综上所述,逆向是一门很精深的艺术。
学习起来不会少花时间,但同样回报也不小。
当你能够见到一个程序就能够熟悉地解析出它的代码,甚至是对它进行任意增添修改删除的时候,这些付出都是值得的
PS:虽然挺像劝退文,但要学的东西确实不少。共勉。
入门
虽然前面说的很困难,但其实一点一点来,也不算困难
首先熟悉C语言
其次学会工具IDA Pro
就可以入门了(<ゝω·)
以CTF为例
Hello, Re
这题是南邮平台的Re第一题,很适合作为开启逆向的第一眼
首选尝试运行
是不是跟你平常写的程序很相似啊?
我们要对它进行反编译,从而知道程序所想要的flag是什么
打开IDA
在new中选择对应的exe文件
在弹窗的窗口中直接点击OK即可
稍等一小会儿以后听到‘咚’的一声就代表IDA已经分析完了
通常IDA会自动显示main函数的代码块,有时无法识别到main就需