信息安全技术第三讲 逆向技术及其应用

上传人:f****u 文档编号:110572639 上传时间:2019-10-30 格式:PDF 页数:40 大小:1.58MB
返回 下载 相关 举报
信息安全技术第三讲 逆向技术及其应用_第1页
第1页 / 共40页
信息安全技术第三讲 逆向技术及其应用_第2页
第2页 / 共40页
信息安全技术第三讲 逆向技术及其应用_第3页
第3页 / 共40页
信息安全技术第三讲 逆向技术及其应用_第4页
第4页 / 共40页
信息安全技术第三讲 逆向技术及其应用_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《信息安全技术第三讲 逆向技术及其应用》由会员分享,可在线阅读,更多相关《信息安全技术第三讲 逆向技术及其应用(40页珍藏版)》请在金锄头文库上搜索。

1、软件逆向技术及其应用 2015年9月 孙钦东 2006, ZTE Corporation. All rights reserved.萤火虫安全组 软件逆向概述 软件逆向工具 逆向技术方法 逆向实例介绍 逆向学习资料 2006, ZTE Corporation. All rights reserved.萤火虫安全组 什么是软件逆向?什么是软件逆向? 可执行文 件 反汇编 汇编代码 人工分析 高级语言 代码 二次开发 软件逆向就是对已有的软件进行软件逆向就是对已有的软件进行”解剖解剖”,分析其设计和技术实 现细节,然后利用所分析的结果开发出更好的软件产品 ,分析其设计和技术实 现细节,然后利用所分

2、析的结果开发出更好的软件产品 2006, ZTE Corporation. All rights reserved.萤火虫安全组 软件逆向有什么用?软件逆向有什么用? 软件破解 恶意软件 程序审核 软件 安全开发竞争 软件 实现软件 互操作 软件质量 评估 软件 开发 2006, ZTE Corporation. All rights reserved.萤火虫安全组 软件逆向概述 软件逆向工具 逆向技术方法 逆向实例介绍 逆向学习资料 2006, ZTE Corporation. All rights reserved.萤火虫安全组 静态反汇编工具静态反汇编工具 常用的反汇编工具有常用的反汇编

3、工具有W32Dasm、C32asm、IDA Pro等,不 过 等,不 过W32Dasm、C32asm已经不升级,且不支持已经不升级,且不支持64位程序位程序 IDA Pro(Interactive DisAssembler)是一个可编程的交互式 反汇编器和调试器,属于商业软件,不过有免费版 是一个可编程的交互式 反汇编器和调试器,属于商业软件,不过有免费版 IDA支持多种处理器指令,如支持多种处理器指令,如X8086、ARM、MIPS等等 IDA支持多种文件类型,包括支持多种文件类型,包括Windows、DOS、UNIX、Mac、 Java、.NET等平台下的文件格式等平台下的文件格式 200

4、6, ZTE Corporation. All rights reserved.萤火虫安全组 静态反汇编工具静态反汇编工具 静态反汇编工具静态反汇编工具IDA的工作界面的工作界面 2006, ZTE Corporation. All rights reserved.萤火虫安全组 静态反汇编工具静态反汇编工具 IDA将整个程序分成不同的指令块,并以图形的方式显示程序 或函数的整体结构 将整个程序分成不同的指令块,并以图形的方式显示程序 或函数的整体结构 IDA可以对汇编代码中所用到的变量、函数等进行重命名,也 可以很方便地添加代码注释,以增强可读性 可以对汇编代码中所用到的变量、函数等进行重命名

5、,也 可以很方便地添加代码注释,以增强可读性 IDA能够自动识别系统中常用的数据结构,也支持用户自定义 数据结构,便于逆向分析 能够自动识别系统中常用的数据结构,也支持用户自定义 数据结构,便于逆向分析 在分析过程中,对以数组形式出现的数据,也可以让在分析过程中,对以数组形式出现的数据,也可以让IDA以数 组形式替换偏移量显示形式 以数 组形式替换偏移量显示形式 2006, ZTE Corporation. All rights reserved.萤火虫安全组 动态调试工具动态调试工具 进行动态调试可选择的调试器有很多,例如:进行动态调试可选择的调试器有很多,例如:IDA Pro自身的 调试器

6、,微软的 自身的 调试器,微软的WinDbg,Compuware公司的公司的SoftICE及免费 的 及免费 的OllyDbg等,不同的调试器都有自己的优缺点,选取调试器主 要取决于自己的喜好 等,不同的调试器都有自己的优缺点,选取调试器主 要取决于自己的喜好 OllyDbg是一个是一个Win32用户模式下的调试器,容易上手,可以 识别大部分被 用户模式下的调试器,容易上手,可以 识别大部分被C和和Windows频繁使用的函数,另外由于可以插 件形式扩充,及许多爱好者的扩充,使其功能越来越强大,并 且有大量的逆向分析、寻找漏洞和软件破解方面的教程 频繁使用的函数,另外由于可以插 件形式扩充,及

7、许多爱好者的扩充,使其功能越来越强大,并 且有大量的逆向分析、寻找漏洞和软件破解方面的教程 2006, ZTE Corporation. All rights reserved.萤火虫安全组 动态调试工具动态调试工具 动态调试工具动态调试工具OllyDbg的工作界面的工作界面 2006, ZTE Corporation. All rights reserved.萤火虫安全组 动态调试工具动态调试工具 和使用和使用Visual Studio编写程序时进行调试一样,编写程序时进行调试一样,OllyDbg的 动态跟踪包括单步步进、单步跳过、跳出当前函数等跟踪功能 的 动态跟踪包括单步步进、单步跳过、

8、跳出当前函数等跟踪功能 在设置断点时,在设置断点时,OllyDbg可以选择可以选择INT 3断点、硬件断点、内 存断点、消息断点和条件断点等 断点、硬件断点、内 存断点、消息断点和条件断点等 OllyDbg可以使用可以使用Run trace将被调试程序所执行过的指令保 存下来,它可以将地址、寄存器内容、消息等记录到 将被调试程序所执行过的指令保 存下来,它可以将地址、寄存器内容、消息等记录到Run trace 缓冲区中,以了解程序执行过程所发生的事件缓冲区中,以了解程序执行过程所发生的事件 有关有关IDA和和OllyDbg的详细使用,在看雪论坛上有多篇入门教 程,有兴趣的同学可以查看 的详细使

9、用,在看雪论坛上有多篇入门教 程,有兴趣的同学可以查看 2006, ZTE Corporation. All rights reserved.萤火虫安全组 PE文件编辑工具PE文件编辑工具 PE文件是文件是Windows下可执行文件的格式,如下可执行文件的格式,如exe、dll、sys、 scr等,等,PE文件编辑的工具相对于上述两个工具的数量则更多, 常用的有 文件编辑的工具相对于上述两个工具的数量则更多, 常用的有LoadPE、PEiD等等 在软件安全编程中,对在软件安全编程中,对PE文件 进行操作是常见的事,因此熟练 掌握对 文件 进行操作是常见的事,因此熟练 掌握对PE文件的格式非常重

10、要文件的格式非常重要 有兴趣的同学可以自己开发一 个 有兴趣的同学可以自己开发一 个PE编辑工具,有助于对编辑工具,有助于对PE格 式的认识 格 式的认识 2006, ZTE Corporation. All rights reserved.萤火虫安全组 十六进制编辑工具十六进制编辑工具 WinHex以以16进制编 辑器为核心,可用作计 算机取证、数据恢复、 低级数据处理、检查和 修复各种文件、恢复删 除文件和硬盘损坏等, 功能比较全面 进制编 辑器为核心,可用作计 算机取证、数据恢复、 低级数据处理、检查和 修复各种文件、恢复删 除文件和硬盘损坏等, 功能比较全面 16进制编辑器主要是对进制

11、编辑器主要是对PE文件进行最底层的修改,常用的文件进行最底层的修改,常用的 16进制编辑器有进制编辑器有WinHex、UltraEdit等等 2006, ZTE Corporation. All rights reserved.萤火虫安全组 软件逆向概述 软件逆向工具 逆向技术方法 逆向实例介绍 逆向学习资料 2006, ZTE Corporation. All rights reserved.萤火虫安全组 大多数情况下,编译器分别使用CALL与RET指令来调 用函数和返回调用位置 CALL指令与跳转指令功能类似,所不同的是,CALL在 调用的时候会将紧接其后的地址压栈,在遇到RET指令 时返

12、回到这个地址处 因此,对于函数的识别可以通过CALL与RET来标识 函数的识别函数的识别 2006, ZTE Corporation. All rights reserved.萤火虫安全组 函数的调用过程函数的调用过程 1 CPU将CALL指令下一条指令压栈,调用者将所 传递的参数压栈,然后进入子程序执行 2 子程序使用堆栈为局部变量分配存储空间,使 用”ebp(esp)+偏移量”对堆栈中的参数进行寻址 3 子程序执行结束,使用ret或retn指令返回,此时, CPU将堆栈中保存的地址载入EIP继续执行 2006, ZTE Corporation. All rights reserved.萤火

13、虫安全组 约定类型cdecl(C规范规范)PASCALstdcallfastcall 参数传递 顺序 从右到左从左到右从右到左使用寄存器 和堆栈 从右到左从左到右从右到左使用寄存器 和堆栈 平衡堆栈 者 调用者子程序子程序调用者子程序子程序 (调用者调用者) 子程序子程序 允许使用 VARARG 是否是是否是 函数的调用约定函数的调用约定 对函数进行逆向,必须熟悉函数的调用约定,知道传递的 传递方式、顺序,如果使用了堆栈,堆栈由谁来平衡等 2006, ZTE Corporation. All rights reserved.萤火虫安全组 函数的返回值函数的返回值 函数执行完之后将向调用者返回一

14、个或多个执行结果 C语言中最常见的是通过return返回,这种情况下,通 常将返回值放在eax寄存器中返回,如果结果超出eax 的容量,则高32位放到edx寄存器中 调用者通过引用或全局变量方式获取返回值时,在子 程序执行过程,通过参数地址,修改相应参数在内存 单元中的值来实现 2006, ZTE Corporation. All rights reserved.萤火虫安全组 例子例子 堆栈传参 调用fun1 堆栈传参 调用fun1 fun1 函数 fun1 函数 fun2 函数 fun2 函数 2006, ZTE Corporation. All rights reserved.萤火虫安全组

15、 if-else语句编译后,其汇编代码形式一般如下: cmp a,b jz(jnz) XXXX 许多情况下编译器都用test或or之类的短指令来 替换cmp指令,即 test eax,eax jz(jnz) XXXX 控制语句控制语句 2006, ZTE Corporation. All rights reserved.萤火虫安全组 例:如下源码,通过VC6.0编译,优化选项设置为 Maximize Speed,其汇编代码如下: 控制语句控制语句 00401000 push ecx;为局部变量分配内存 00401001 lea eax,dword ptr esp ;eax局部变量地址 0040

16、1005 push eax 00401006 push 00407030 ;指向字符串%d 0040100B call 00401030 ;scanf函数 00401010 mov eax,dword ptresp+8 ;传出输出字符 00401014 add esp,00000008 ; 平衡堆栈 00401017 test eax,eax;若eax为0,则ZF置1 00401019 jne 00401020 ;跳转 0040101B mov eax,00000008 00401020 add eax,0000000A 00401023 pop ecx 00401024 ret #include int main(void) int a, b=0xa; scanf(“%d”, if(a=0) a=8; return a+b; 2006, ZTE Corpor

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号