安全比赛逆向题基础一


在这里插入图片描述

分析及步骤

判断文件类型

题目一般是二进制可执行文件

  1. 大部分为windows平台下的PE文件或者linux平台下的ELF文件
  2. 忽略扩展名,还是要检查文件头,记事本打开。(有的题扩展名是exe文件,实质也是ELF文件)

开头看见MZ字样,则这是一个windows系统下的可执行文件

开头看到ELF字样,基本断定这是一个运行于Linux系统下的可执行文件

查壳与脱壳

在静态分析之前,进行查壳是非常有必要的,常用的工具如PEID
进行查壳后,如果是简单且常见的壳如UPX等,那么直接可以使用工具完成脱壳,如果一时半会找不到可用的工具,也可以尝试手工脱壳,例如ASPack就能够采用ESP定律来脱除。
如果是侧重考察脱壳的题,一般程序本身就比较简单了,可以这样说,这类题如果能成功脱壳,基本上也算是做出来了。当然,脱壳并不能解决所有问题,之前有CTF比赛中甚至出现了VMP的题目,对于这种情况,还是建议使用调试器去动态调试,毕竟在逆向工程中太依赖IDA的F5功能也是不行的,还是应该锻炼自己的汇编指令阅读能力。如果是VMP比较新的版本,可能还需要使用Sharp OD等插件来隐藏调试行为。

静态分析

一般是直接将二进制文件拖入IDA进行分析。

  1. 在这个过程中,可以关注一下是否有符号库路径的提示出现,如果有这种情况,说明程序在编译阶段并没有清除相应的符号信息,我们或许能够从符号库路径的命名中得知一些关于本题的重要信息。
  2. 大多数时候,静态分析完成后,我们会直接来到程序start处,直接F5,向下找即可来到main函数,直接查看反编译出来的C伪码
  3. 然而有时候IDA会出现识别不了函数的情况,比如说分析到某一段代码,视图就从C伪码变为汇编指令视图了,这时候可以尝试手工地在这段汇编指令中识别出函数,并且使用IDA的创建函数功能,这样一来就能够继续查看C伪码,提高我们的做题效率
如何从一段汇编代码中把函数找出来?

首先得找到函数头部,很多函数的头部看起来会如下所示:

push ebp

mov ebp, esp

先将调用者的堆栈的基址(ebp)入栈,以保存之前任务的信息。

然后将调用者的栈顶指针(esp)的值赋给ebp,作为新的基址(即被调用者的栈底)。

然后我们继续寻找函数尾部

pop ebp

ret

需要注意的是,如果函数不只有一条路径返回值,我们还得确保函数尾部下方的跳转全都朝下,上方的跳转全部朝上

要是在IDA中遇到Sp analysis failed怎么办?

这种情况,有时候是由于某些指令的干扰导致IDA分析出来的栈平衡被破坏所致,会导致IDA生成C伪码失败
在这里插入图片描述
我们需要手动地调整栈平衡,在IDA中依次点击Options-General,勾选Stack pointer

函数刚开始的指令看起来如下图所示:
在这里插入图片描述
函数结束前的指令如下图:
在这里插入图片描述
可以看到每一条指令的前面增加了一个数字,这个数字即指示栈顶指针(SP),在调用带参数的Call后,push和pop或者进行抬栈、清栈后栈顶指针才会改变,上图的mov esp,ebp后SP值显然不合理,应该使用Alt+K快捷键进行调整,调整后如下图所示:
在这里插入图片描述
再使用F5,IDA已经能够生成正确的C伪码了

关于逆向的那些工具

PEtools查壳:逆向题,先查壳在说

Upx脱壳:脱了壳才算开始

IDA pro静态反汇编:静态分析神器

OllyDbg动态调试:动态分析神器,通过各种断点调试进入到调试,改变函数流程等。

逆向签到题:通过对二进制文件扫描一下,linux下通过 strings demo | grep flag windows通过hex

IDA使用教程—静态调试工具

在这里插入图片描述
1:对不同代码块使用不同的颜色进行区分,直接点击相应的颜色块即可定位到相应的部分。
蓝色:表示代码段
棕色:表示数据段
红色:表示内核
2:是该程序的函数表(双击后可查看详细信息)
3:对应的是整个程序或者某个函数的图标概述形式,查看这部分可以大体把握功能和结构的走向,对整体的脱壳逆向有很大帮助。
4:显示以下六部分信息
①. IDA View-A; 表示某个函数的图标架构,可查看程序的逻辑树形图,把程序的结构更人性化的显示出来,方便分析
②. Hex View-1; 可查看16进制代码,方便定位代码后使用其他工具修改。
在这里插入图片描述

③. Structures; structures中可查看程序的结构体
④. Enums; Enums中查看枚举信息
⑤. Imports; 查看到输入函数,导入表即程序中调用到的外面的函数
⑥. Exports; 查看到输出函数

IDA的九个菜单模块

1.File 是用来打开,新建,装载一个应用程序。

2.Edit 是用来编辑反汇编代码的,可以复制,筛选什么的。

3.Jump 是用来跳转的,可以有很多种类型的跳转,比如跳转到上一个位置或者下一个位置,跳转到某个指定的地址。还可以根据名字,函数来进行跳转,跳转到一个新的窗口,跳转某一个偏移量等等(※)

4.Serach 是用来搜索的。

5.View 是用来选择显示方式的,或者显示某一特定模块信息的。比如以树形逻辑图显示,或者16进制形式显示。还可以单独显示某一特定信息,比如输入或者输出表等。

6.Debugger ,调试器被集成在IDA中,首先我们使用IDA装入文件,来生成数据库,用户可以使用反汇编功能,查看所有反汇编信息,这些均可以在调试器中进行和使用。

7.Options ,在这里可以进行一下常规性的设置。

8.Windows,

9.Help,使用IDA的一些帮助文档,检查更新等等。

使用IDA的大体步骤
  1. 装入文件或程序

  2. 指令断点

  3. 程序运行

  4. 分析堆栈

  5. 添加监视

  6. 进行地址分析

  7. 单步跟踪

  8. 找到bug

  9. 使用硬件断点进行bug确认

小记

ida将逆向题的文件翻译成c语言伪代码
思路:shift+f12找字符串
找flag

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值