逆向分析 期末复习

逆向分析期末复习

第二章 逆向初探

汇编语言

汇编语言是用于电子计算机,微处理器,微控制器或者其他可编程器件的低级语言,也成为符号语言。汇编可以理解是机器语言的助记版本。在不同的设备中,汇编语言根据不同的机器语言指令集通过汇编解释成不同的机器指令。由于不同设备对一些指令支持不同,设备规格也有差距,因此汇编语言在不同规格的设备上一般没有可移植性。

寄存器一般用途

在这里插入图片描述

一些汇编指令解释

div指令:div指令是无符号除法指令,他将eax或者edx寄存器作为被除数,将一个寄存器或者是一个立即数作为除数,运算结果中商放在eax中,余数放在edx中。例如指令 div 0x10 ,该指令的解释为:eax=eax/0x10 (整数除法);edx=eax%0x10。

call指令:call指令执行的动作有两个,将下一条指令压栈并跳转到操作数表明的地址处;一般用于函数调用,在汇编中也有其他应用(如恶意代码获取当前基址),后面pe文件会说明。

ret指令: ret指令是将当前栈顶的指令放入eip(指令寄存器)然后继续执行。染的作用是将处理器和堆栈状态回复到执行call指令前的状态。(同样作用指令有retn指令,这个指令可以在pop eip后执行一个“add esp 操作数 ”的指令,个人猜想这个指令是用于堆栈传参后的堆栈还原。

函数调用简介

对于一次函数调用,程序要依次完成以下动作:

1.给被调用者传入参数,可以使用寄存器,或者是压栈方法,或者两者都使用(一般是较多参数的情况下);
2.将函数调用后的下一条指令压栈,并将被调用者的第一条指令放入eip中,继续执行(call指令)
3,保存调用者当前执行环境,即保存变量的寄存器,以压栈的形式保存;
4.执行rip到被调用者,被调用者首先保存旧的ebp,然后将ebp移到esp处,指令一般为:push ebp;
mov ebp,esp;
5.被调用者为自己的局部变量申请空间,sub esp ,0xXX;(栈地址由大到小增长)
6.被调用者完成功能,释放局部空间,add esp ,0xXX;
7.恢复旧的ebp,pop ebp;
8.恢复调用者环境
9.将返回地址弹出到eip,完成函数调用: ret 或者是retn(回收参数空间);

我们可以清楚地看到函数调用中程序上下文是依赖栈的进行维护的,这种先进后出的数据结构保证了程序的层级结构的执行。

第三章 逆向分析工具

逆向工具可以分为动态和静态工具两种,其代表分别是onlydbg和IDA pro,其分别对应着逆向分析中动态分析和静态分析;

动态分析

在动态分析中,我们可以逐步执行指令并随时查看当前寄存器,堆栈状态,可以清晰的看到每条指令的运行结果,以及程序的动态执行结果,对于小范围的程序逻辑还原有很大帮助(循环,递归等)。

静态分析

在静态分析中,我们不关注于每条汇编指令的运行结构,而是关注于程序的模块组成和各个模块之间的调用,这对我们把握程序整体结构有很大帮助。但是应当注意的是,不管是IDA pro还是其他静态分析工具,对于由高级语言(如c++)编译而来的汇编,都能很好的划分结构,而对于直接由汇编语言实现的软件,结构划分则并不明显。

总的来说静态与动态分析方法是由于分析工具侧重点不同而划分的,在实际逆向分析中,首先使用静态分析把握程序结构,找到自己希望了解的代码区域,然后使用动态分析进行详细研究。

第七章 演示版保护技术

在很多时候(试用版软件,管理软件),程序并不希望为用户提供它所有已实现的逻辑,这时则需要一些保护技术来阻止用户使用这些未授权的逻辑。

序列号保护

软件公司首先设计一个序列号生成算法,内嵌进软件内,然后根据用户信息,运用算法生成对应序列号然后与用户输入做对比,只有用户从软件公司获取序列号后,才能通过检测而使用完全版软件。

序列号保护方法的安全性一是取决于本身软件防逆向的能力,二则是用户名与序列号的映射关系复杂性(与注册机难度成正比)

时间限制

对于采用计时限制的软件而言,它主要采用两种逻辑实现:
1.借用计时器,直接将工作交给系统调用,相关调用有:

SetTimer

settimer函数

timeSetEvent
在这里插入图片描述
2.自己获取运行时间并完成判断,结束进程等工作
相关函数有:
GetTickCount()函数以及timeGettime()函数
在这里插入图片描述

keyfile保护

在这种保护下,程序通过验证一个文件的合法性来判断程序权限。
对于采取这种方法验证的程序,首先我们需要借助程序行为检测软件(process monitor等)来确定他是采取keyfile验证的软件,顺便可以观察到它对文件操作的系统调用,然后在动态分析软件中设置断点,观察程序对文件操作,最后确定正确keyfile的内容。 可参考的文件相关调用有:
在这里插入图片描述

软件加壳与脱壳

壳的概念

壳可以理解为是在程序本体先执行的一段代码,它的功能包含还原程序代码(解压缩或者是解密)并将控制权归还给程序本体。

壳的应用环境有很多,在程序保护中,它可以起到阻止软件被反编译和非法修改,也可以起到压缩作用,而在病毒中则常常被用来隐藏恶意代码,躲过特征检测。

应该注意的是,壳的概念并不是单单指这些压缩或者是解密的代码,而是一种对软件进行压缩解密的一种技术,一个鲜明的例子就是虚拟机保护技术,程序的代码被转译成虚拟机指令再执行,要理解原始程序指令就需要理解虚拟机引擎,极大的增大了破解和逆向的难度和时间。

常见的压缩壳

ASpack;UPX; PECompact

常见的加密壳

ASProtect;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值