软件逆向涉及的知识领域较广,特别是对分析师的编程基础要求较高,而且多存在于软件破解、病毒分析等领域。
因此软件逆向对多种编程语言的阅读和编写能力要求较高,而且对汇编、C/C++尤其如此,同时对操作系统原理、内核以及Win32 API均有了解和掌握。
软件逆向一般以OllyDbg和IDA两种软件为工具,且OllyDbg侧重动态分析,IDA侧重静态分析(因此多用于病毒分析)。下面将以OllyDbg学习过程为主介绍逆向。
下面为逆向中常用技巧:
OllyDbg红色标记表示修改的部分,可以撤销;
OllyDbg中比较有用的指令便是Assemble,用于修改程序代码;
内存中以小尾方式存储数据,一般右侧为高地址,而数据一般为左侧高地址,因此常出现倒置的数据,如内存中 0x00401000开始的一段数据 00 EF 3E 67,读入后应解释为0x673EEF00,八位(一个字节)为一个单位;
汇编知识:
MOVSX “带符号扩展的传送指令 ”和 MOVZX “带0扩展的传送指令” 均为由低位(如16位)向高位(如32位)寄存器存数据时的命令,如MOVSX EAX,CX
XCHG “交换 寄存器/内存单元 和 寄存器”,操作数可为寄存器或内存单元
LEA “取地址指令” 第一个操作数是一个通用寄存器,第二个操作数是一个内存单元。当计算的时候要依赖于之前的结果的话,那么这个指令就非常有用。
OllyDbg红色标记修改的部分
堆栈向低地址增长
一个数据左侧为高