HexRays(基础知识)

本文详细介绍了HexRaysDecompiler的使用方法,包括生成伪代码、修改标识符、转换变量类型以及处理C语言类型。特别关注了如何调整变量类型和在Windows/Linux环境下定位main函数的技巧。
摘要由CSDN通过智能技术生成

HexRays Decompiler(简称HexRays)

1.生成伪代码
生成伪代码所需要的操作,在对应的目标函数,按F5键即可

2.伪代码的构成
HexRays生成的伪代码有一定的结构,每个函数反编译后,第一行都为函数的原型,然后是局部变量的声明区域,最后是函数语句

其中上部位变量的声明区域,可以通过单击“Collapse declaration”将其折叠

注意:每个局部变量后面的注释实际上代表着这个变量的所在的位置

3.修改标识符
在这里插入图片描述

在这里插入图片描述
没有意义的变量名称将严重影响分析效率!

HexRays为用户提供了更改标识符名称的功能:将光标移动到标识符上,然后按N键,弹出更改名称的对话框,在输入一个合法的名称,然后按OK即可

注意:IDA一般允许使用符合C语言语法的标识符,但是将某些前缀作为保留使用,在手动指定名称时,这样的前缀是不能被使用

4.切换数据显示
注意上图我们看到,原来的数据0x66变为十进制数105,'a’和‘A’被转化为其ASCII编码的对应十进制数97和65

HexRay没有强大到可以自动标注这些常量,但是HerxRay提供了将常量显示为各种格式的功能

将光标移动到一个常量上,然后单击右键,在弹出的快捷键菜单中选择对应的格式

  • Hexadecimal:十六进制显示,快捷键H,可以将各种其他显示格式转换回数字
  • Octal:八进制显示
  • Char:将常量转换为形如’A’格式,快捷键为R键盘
  • Enum:将常量为枚举中的一个值,快捷键为M键
  • Invert sign:将常量按照补码解析为负数,快捷键为_键
  • Bitwise negate:将常量按位取反,形如C语言中的~0XF0,快捷键位 ~键

在这里插入图片描述以下是修改后
在这里插入图片描述
5.修改变量类型
伪代码对开头的一些显示格式的转换,这是程序中的字符串中间的部分内容分别以dword、qword形式存储

实际上,原来字符串的赋值操作已经变成了128位浮点赋值+64位qword赋值+32位dword赋值

HexRays因此将字符串数组识别成了3个变量:__m128i类型的v6,_int64的v7和intv8

  • byte-1字节整型,8位,char ,__int8;
  • word-2字节整型,16位,short,__int16;
  • dword-4字节整型,32位,int,__int32;
  • qword-8字节整型,64位,__int64、longlong

HexRays充分利用前面介绍过的IDA的类型分析系统,在修改类型的标识符号上按Y键,即可调出对话框来修改类型

但是我这里IDA,比较高级,反汇编自动搞好了参数识别

在这里插入图片描述
HexRays不只支持局部变量的类型修改,也支持修改参数类型、函数原型、全局变量类型等

实际上,HexRays不仅支持这些简单的类型,还支持结构体、枚举等C语言类型。按Shift+F1组合键,调出窗口Local Types窗口,从中可以操作C的各种类型:按Insert键,或者单机右键,弹出添加类型的对话框
在这里插入图片描述
从中输入符合C语言简单语法的类型后,IDA会解析并存储其中的类型

此外,按Ctrl+F9组合键或选择"File+Load File+Parse Cheaderfile"菜单命令,可以加载C语言的头文件
在这里插入图片描述
HexRays的类型变化一般情况下可以将一个变量的长度强行增加,但是将一个长的变量改短时往往会报警”Sorry,can not change variable type“,所以将变量加长需要谨慎,如果改错,可以删除函数,再定义函数,以重置该函数的各种信息

6.完成分析
在将伪代码调试到适合自己月的的程度后,即可以开始分析

IDA和HexRays

1.如何找到mian
在windows和Linxu下,很多可执行文件都不是从main()函数开始执行的,而是经过CRT(C语言运行时)的初始化,再转到main()

  • mian函数经常在可执行的靠前位置(因为很多链接器是先处理对象文件后处理静态库)
  • VC的入口点(IDA种的start函数)会直接调用main函数,在start函数中被调用的函数有3个参数,并且返回值被传入exit函数的,可以重点查看
  • GCC将mian函数的地址入口传入_libc_start_main来调用main函数,查看调用的参数可以找到main函数的地址

2.手动应用FLIRT签名
IDA中,有一类函数不同:函数列表中的底色为青色,在导航条中的对应区域也会显示为青色,实际上IDA的FLIRT函数签名识别库在起作用

Shift+F5组合键,可以打开Signture列表,其中会先显示已应用的函数签名库
在这里插入图片描述
查看导航条可以发现,VC运行时的代码有很多没有识别

IDA没有自动为这个程序应用其他VC运行时的签名

实际上IDA完全额可以识别后面的大部分函数

  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Back~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值