逆向分析之核心代码的分析
博客 个人感觉分析正常的(没有花指令)反汇编代码最大的挑战就是难以分清反汇编出的代码是用户的代码还是库的代码,还是编译器插入的代码。克服这一关需要丰富的经验。因此,逆向的入门大多数是难倒在这一关上。 1、识别一个函数 程序都是以函数为一个单位。函数内的多条代码使函数完成了特定的功能,在分析当中也是以一个函数作为一个分析单位。在分析时,应当尽可能多的分析出这个函数所完成的具体功能。 反汇编中的函数一般都有如下格式: 1.1 第一种函数格式 push ebp mov esp,ebp .... pop ebp ret 1.2 第二种函数格式 这种函数没有特定的格式,但可以肯定是在函数的末尾肯定有ret语句。 2、识别函数的返回值,形参,局部变量 函数一般是使用eax寄存器来保存返回值。但是一些编译器可能用其他的方式来传递返回值,因此,在分析程序的前期,需要确定该程序是用什么编译器进行编译的(通过PEId可以产看),才能确定其返回值是用什么方式进行传递的。 函数的形参个数可以通过函数平衡多少字节的栈空间来推理出。因为存在着许多的传参方式,所以这种方法并不是绝对正确的,因此要先观察出一个函数的传参方式是何种方式。 和函数的传参方式息息相关的函数调用方式: 不同的调用方式平衡堆栈的方式是不同的。C方式调用时,是调用者进行堆栈平衡。传参时