re逆向
##启动函数
我们在编写程序时,如果我们写的是控制台应用程序,那么就少不了main函数,如果我们编写的是Win32应用程序,那么必不可少的是WinMain函数。
但是Windows程序执行并不是从WinMain函数开始的,二十线执行启动函数相关代码,这段代码是编译器生成的。启动代码完成初始化进程,再调用WinMain函数。
##函数
###函数的识别
程序都是由不同功能的函数(又称子程序、过程或者类似概念的东西)组成的,因此逆向分析中将重点放在函数的识别及参数的传递上是明智的,这样可以将注意力集中在某一段代码上。
函数是一个程序模块,用来实现一个特定的功能。一个函数由如下几个部分:函数名、入口参数、返回值、函数功能。
###函数的参数
函数传递参数有三种方式:堆栈方式、寄存器方式以及通过全局变量进行隐含参数的传递。如果参数是通过堆栈传递的,就需要定义参数在堆栈中的顺序,并约定函数被调用后,由谁来平衡堆栈。如果参数是通过寄存器传递的,就要确定参数存放在哪个寄存器中。每种机制都有其优缺点,并且与使用的编译语言有关。
####利用堆栈传递参数
堆栈是一种 后进先出的存储区,栈顶指针ESP指向堆栈中第一个可用的数据项。调用函数时,调用者依次把参数压栈,然后调用函数。函数被调用以后,从堆栈中去的数据并进行计算。函数计算结束后调用者或者函数本身修改堆栈使得堆栈平衡。
需要解决的问题:压栈顺序,平衡堆栈。
因此产生了各种调用约定,规定了参数传递顺序和平衡堆栈者。
##数据结构
##虚函数
##控制语句
##循环语句
##算术运算
##字符串操作
##代码修改技巧