加强IDA反汇编工具对程序的解析深度

admin 2023年6月9日19:11:05评论137 views字数 2691阅读8分58秒阅读模式

概述

为了增强 IDA 的函数、结构体等信息的识别能力。设置了几类帮助解析识别的辅助操作文件,如:ids、sig、til等。

目录和对应文件介绍

  • cfg:ida 工具的配置文件。

    • ida.cfg:ida 通用配置文件。

    • idagui.cfg:ida 可视化界面的配置文件,常用的就是。

  • idc:ida 工具的脚本存放目录。ida启动时,默认加载 ida.idc 脚本文件完成程序的初始化操作。

  • ids:包含一些符号文件(IDA语法中的IDS文件),这些文件用于描述可被加载到IDA的二进制文件引用的共享库的内容。这些IDS文件包含摘要信息,其中列出了由某一指定库导出的所有项目。

    • 描述某个函数所需的参数类型。

    • 参数数量的信息。

    • 函数的返回值类型(如果有)。

    • 函数的调用约定有关的信息。

  • loaders:目录包含在文件加载过程中用于识别和解析PE或ELF等已知格式的IDA扩展。

  • plugins:放置 ida 插件。

  • procs:包含已安装的IDA版本所支持的处理器模块。处理器模块为IDA提供机器语言--汇编语言转换功能,并负责生成在IDA用户界面中显示的汇编语言。

  • sig:包含IDA在各种模式匹配操作中利用的现有代码的签名。通过模式匹配,IDA能够将代码序列确定为已知的代码块代码,从而节省大量时间。

    • 使用静态库生成对应的签名文件。

    • 根据签名文件比对修改当前程序中的函数名称。

  • themes:放置 ida 的主题。

  • til:包含一些类型库信息,IDA通过这些信息记录特定于各种编译器库的数据结构的布局。

    • 需要使用源码才能生成对应的til文件。

    • tilib工具可以尝试解析c/c++头文件,用以生成til文件。

    • 针对头文件

ids文件(增强对共享库文件的识别能力)

该文件是为了增强ida对共享文件信息的解析能力。共享文件都会对外开放导出接口,该文件记录导出函数的序列号、名称、待清除字节(函数调用结束时平衡堆栈的字节数)、函数注释。如果 ida 在解析程序过程中,加载到了对应的共享库,就会尝试将ids文件夹下的对应名称的ids文件加载到当前ida数据库中。如果没有自动加载,可以在file -> Load file -> IDS/IDT file...加载指定文件。

使用 ida 的 idsutil 工具包来制作ids文件。

#使用dll2idt.exe制作idt文件
C:AWORKTOOLSIDA_Pro_7.7idsutil3>dll2idt.exe kernel32.dll
Convert DLL to IDT file. Copyright 1997 by Yury Haron. Version 1.4
File: kernel32.dll   ... ok

加强IDA反汇编工具对程序的解析深度

其中可以看见一个通用的关键字Name,如果想要为idt文件中的函数添加其他信息,可以手动添加 Pascal 和 Comment 关键字。

加强IDA反汇编工具对程序的解析深度

在处理结束后,使用 zipids.exe 工具将idt文件封装成ids文件。

#将idt封装成二进制文件
C:AWORKTOOLSIDA_Pro_7.7idsutil3>zipids.exe KERNEL32.idt
File: KERNEL32.idt   ... {1359 entries [0/0/0]}         packed

加强IDA反汇编工具对程序的解析深度

sig文件(增强对静态库文件的识别能力)

在程序进行静态编译后,编译器会将共享库直接写到程序的二进制文件中,主要目的是增强程序的可移植性。相对的程序大小也会随之增大,程序分析的难度也会根据程序大小成正比例增长。如果我们能够识别程序中已知的静态库文件,那么将会减少一部分分析工作。

一般可以使用静态分析程序中包含的字符串信息,尝试寻找库文件的特征相关内容,寻找到特征信息后,定位静态库的库名以及版本信息。

  • 库名:寻找对应的静态库,制作专项的签名文件。

  • 版本:库的版本不同,其中函数的实现可能也会不同,如果不能找到正确的静态库版本,可能会影响识别的效果。

使用 ida 的 flair 工具包制作签名文件。

加强IDA反汇编工具对程序的解析深度

  • plb.exe/plb。 OMF 库的解析器( Borland 编译器常用)。

  • pcf.exe/pcf。 COFF 库的解析器(微软编译器常用)。

  • pelf.exe/pelf。 ELF 库的解析器(许多 Unix 系统常用)。

  • ppsx.exe/ppsx。 Sony PlayStation PSX 库的解析器。

  • ptmobj.exe/ptmobj。 TriMedia 库的解析器。

  • pomf166.exe/pomf166。 Kiel OMF 166 对象文件的解析器。

开始制作签名文件。

#制作pat文件
pcf.exe user32.lib user32.pat
.......flair75binwinuser32.lib: skipped 0, total 593
#将pat文件转换成sig文件
sigmake.exe user32.pat user32.sig

将制作好的签名文件放置到sig文件夹中即可,在所需时进行加载,增强对未知二进制内容的解析。更多的数字签名的工具指令可以参考工具的详细说明。

til文件(增强源文件的结构解析)

该文件通过解析头文件,获取对应的 til 结构文件。ida 导入指定的 til文件,将对应的数据偏移赋予更直观更有意义的标识。

加强IDA反汇编工具对程序的解析深度

使用 tilib.exe 工具制作til文件。 ida 加载 til文件,使用其中预定义好的结构体类型。

tilib -c -Cc1 -hstdio.h stdio.til

三类程序说明文件的联合映射

在 ids 目录下有一个 idsnames 文件。该文件中对三个文件的加载进行了相互映射。

<IDADIR>/ida/idsnames 的 IDS 配置文件

  • 将共享库的名称与它对应的.ids文件名映射起来。如果共享库的名称不能万千转化成呢还给你一个MS-DOS 8.3形式的文件名,这样做可以帮助IDA定位到正确的.IDA文件。如果程序加载libc.so.5动态库,就会自动映射加载libc.ids文件。

libc.so.5       libc.ids +
  • 将.ids与.til文件映射起来。这样,只要IDA加载指定的.ids文件,他会自动加载指定的.til文件。使用下面的命令,一旦IDA加载SSLEAY32.ids,openssl.til文件将会自动加载。

SSLEAY32.ids SSLEAY32.ids + openssl.til
  • 将.sig文件与对应的.ids文件映射起来。这样,只要反汇编代码清单应用指定的.sig文件,IDA将加载指定的.ids文件。

libssl.sig SSLEAY32.ids

总结

在程序开始分析之前,将已知的程序解析环境准备好。能减少很多待分析的程序代码段,增强ida反汇编得结果正确性。

原文始发于微信公众号(0x00实验室):加强IDA反汇编工具对程序的解析深度

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月9日19:11:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   加强IDA反汇编工具对程序的解析深度http://cn-sec.com/archives/1791139.html

发表评论

匿名网友 填写信息