加强IDA反汇编工具对程序的解析深度
2023-6-9 14:0:27 Author: 0x00实验室(查看原文) 阅读量:22 收藏

概述

为了增强 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:\AWORKTOOLS\IDA_Pro_7.7\idsutil3>dll2idt.exe kernel32.dll
Convert DLL to IDT file. Copyright 1997 by Yury Haron. Version 1.4
File: kernel32.dll   ... ok

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

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

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

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

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

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

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

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

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

  • 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
.......\flair75\bin\win\user32.lib: skipped 0, total 593
#将pat文件转换成sig文件
sigmake.exe user32.pat user32.sig

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

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

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

使用 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反汇编得结果正确性。


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg5MDY2MTUyMA==&mid=2247490483&idx=1&sn=2b62e36d493fb522c1dd0dfb84ed9ab2&chksm=cfd8644cf8afed5a49db4df35fdd664aa0e7fa41ca19e0a60fcb122cf20ec4cd3377fb3bd841#rd
如有侵权请联系:admin#unsafe.sh