基于OllyDbg的自解密程序分析

品牌
科技资讯
2019年11月27日 05:37

破解利器Ollydbg使用解析

唐剑飞++任彩霞

摘 要:随着计算机的普及,软件产品的层出不穷,逆向与反逆向技术的对抗就从未停止过,反汇编出的代码虽然生涩难懂但是还具有程序的逻辑性,但是经过了二次加密之后再次展现的代码毫无逻辑性可言,而且结构混乱,有些反调试机制加大了逆向工程师的调试难度,本文立足于一段编译好的具有二次加密的程序,通过OllDbg工具进行分析,最后总结自解密程序的破解流程和编写思路。

关键词:信息安全 加密解密 逆向工程 反调试

中图分类号:TP393.09 文献标识码:A 文章编号:1672-3791(2017)11(b)-0058-02

逆向分析技术是信息安全的重要组成部分,在恶意代码分析,软件破解方面起到至关重要的作用,在对软件进行逆向破解的过程中,程序的编写者会采用一些技术手段对程序的源代码进行二次处理,从而对软件逆向工作增加了不小的难度,对于反汇编代码的定位更是无从下手,程序自解密手段的使用更使得逆向的难度提高。如今我们从自解密程序的特点出发,介绍几种常见的针对自解密程序的破解方法。

本文从一个自解密的一个小程序出发,简要的介绍一下基于OllyDbg的自解密破解方法的运用。

1 自解密程序特点

通常逆向过程中,我们会发现某一块代码区域内出现乱码情况,一般情况下程序走到这里基本上是终止,或者跳转到某个dll中继续执行,然后代码就意外终止。一般解密程序和乱码是放在一起的,这一点是无法避免的因为作为程序的编写者,为了考虑到程序的正常运行,需要程序在执行到乱码区域,很快就能够找到解码方式,然后转变成正常的代码继续执行。所以,在绕过相关的反调试技术之后,下一步就可能会为我们提供解密算法的位置。

2 需要自解密代码的出现位置

为了方便读者直观的阅读,我们可以使用交互式反汇编器专业版(Interactive Disassembler Professional),人们常称其为IDA Pro,下文简称IDA打开我们的目标程序。

如图1所示,在.text的区域中,可以注意到起始的地址401160,结束的地址是4011E0的区域中无法正常反编译成正常的的机器语言,显示的以一堆乱码的情况。

如图2所示,我们又在OllyDbg工具中,下文简称OD打开目标程序。

在OD中我们通过绕过相关检测API,形如(IsDebugPresent)的函数和花指令后,寻找到看到程序中的这样一行,在图片中可以看到指令(cmp edx,38bf1686.004011E0),也就是前面用IDA打开的结束地址:4011E0。

原理分析:在这里我们看到先是把地址为00401160位置装载进入edx,然后开始进行对每个地址单元进行0x88的异或运算,为止条件为地址码为4011E0,正好是我们在IDA中看到的开始到结束的那一段乱码。

3 方法一:INT3断点法

3.1 方法介绍

在图3中,我们针对目标程序自解密的核心代码部分设置INT3断点,在图3所示处按下F2,这样我们就打下一个软件断点。

进行软件断点的设置之后,可以一直按F8,你会经过这个jnz,然后直到在OD寄存器展示栏中遇到下图所示的情况,图4中显示edx=004011E0。

然后按F8动态的跟踪程序,如图5所示。

F2下断点,就行了,然后F7跟进去。

图6所展示的就是自解密程序段的解码后的结果,通过在Windows PE头中中存储的解密代码,通过软件断点的方式,在OD中循环调用,最终把起始的地址为401160到结束的地址为4011E0的部分恢复成程序未加密之前的初始情况。

3.2 原理分析

INT3断点的执行流程,如图7所示。

软件断点是通过监测特定的指令来触发断点的。在某个地址设置软件断点的时候,仿真器会将这个地址的数据/指令替换成一个特殊格式的指令。断点单元通过监测这个特殊格式的指令来触发断点。

调试器在我们下断点的位置,写入xCC,然后把下断点的之前的值保存在断点列表之中。

因为我们当时存进去的位置是乱码的位置,所以OD会出现断点损坏的提示,如图8所示。

在之前如果不打断点,我们就直接越过了,而直接越过原因就是程序访问了没有逻辑的区域,程序没有完成自解密的過程,从而跳转到了未知区域,断点的目的就告诉程序回到所存储断点的位置,让程序不会跑偏。

4 方法二:文件写入法

先把程序文件用二进制格式打开,把00401160到004011E0之间这块位置的内容从IDA中提取出来,然后直接用python写脚本一个个异或0x88就可以了,这种方式是通过分析程序流程得到。不过这种方法只能针对于是片区的大块数据域运算,还要保证程序的正确性。由于操作较为复杂,这里不再赘述。

5 结语

通过对自解密程序的研究,我们了解到找到关键的加密算法就变得尤为关键,自解密程序中也不是所有的代码都进行了加密,在已经找到的关键解密代码的部分我们可以采用INT3 断点调试法,和文件手动写入的方法,进行原始代码的恢复工作,尤其是在相关PE结构的空白区域,可能就提供了相关解密算法的内容。

参考文献

[1] 吉胜军.基于OllyDbg的软件漏洞技术分析[J].科技资讯,2010(17):19.

[2] 赵北庚.软件逆向分析过程中基于OllyDbg的三种汇编代码定位方法[J].网络安全技术与应用,2015(2):50,52.

[3] ]赵北庚.基于OllyDbg的函数栈帧逆向分析研究[J].网络安全技术与应用,2015(1):24,26.endprint

家电之家©部分网站内容来自网络,如有侵权请联系我们,立即删除!
文章 断点 程序
你该读读这些:一周精选导览
更多内容...

TOP

More