[发明专利]一种二进制反编译中数组数据结构恢复方法及系统有效
申请号: | 201810573717.3 | 申请日: | 2018-06-06 |
公开(公告)号: | CN108958739B | 公开(公告)日: | 2020-11-10 |
发明(设计)人: | 高庆;张世琨;孙永杰;马森 | 申请(专利权)人: | 北京大学;北京北大软件工程股份有限公司 |
主分类号: | G06F8/53 | 分类号: | G06F8/53 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王莹;吴欢燕 |
地址: | 100871*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 二进制 反编译 数组 数据结构 恢复 方法 系统 | ||
本发明提供一种二进制反编译中数组数据结构恢复方法及系统,所述方法包括:S11,对于目标反编译结果中任一非指针变量,若该非指针变量的实际占位大小与该非指针变量的类型对应的占位大小之间的差值大于第一预设阈值,则将该非指针变量作为目标变量;S12,获取目标变量在目标反编译结果中各使用位置对应的第一使用模式,若根据第一使用模式对应的第一权重确定目标变量为数组变量,则对数组变量的数据结构进行恢复。本发明实现了对反编译结果中数组数据结构的自动恢复,且提高了数组数据结构恢复的正确率。
技术领域
本发明属于软件分析技术领域,更具体地,涉及一种二进制反编译中数组数据结构恢复方法及系统。
背景技术
IDA(Interactive Disassembler,交互式反汇编器)工具是一种反汇编工具,用于分析编译生成的二进制文件,生成反汇编代码,从而尽可能呈现接近源代码的类C代码,可用于恶意代码分析、漏洞研究和隐私保护等多个软件分析方向。
目前,IDA工具在自动生成类C代码时,会丢失大量的数组数据结构信息。如下为编译前的样例代码片段:
void f()
{
int s[10];
memset(s,0,sizeof(s));
}
上述样例代码片段中s为数组,memset是为数据分配存储空间的函数。将上述样例代码进行编译生成二进制文件,对二进制文件进行反编译生成的类C代码如下:
unsigned int f()
{int s;
memset(s,0,0x28u);
}
上述类C代码中s为普通常量,反编译后丢失了s的数据结构。由于正确的数组数据结构信息对分析人员理解代码和进一步的软件分析有重要作用,比如辅助理解代码内容等。虽然IDA工具中存在对类C代码进行数组数据结构恢复的插件,但需要手动对每个变量进行标记,效率低,且很容易产生错误。此外,对标记人员的要求也较高。在大型的软件中,变量的数量庞大,从而导致工作量大,需要大量的人力和时间。
综上所述,现有技术中对反编译生成的类C代码进行数组数据结构恢复需要手动操作,需要耗费大量人力和时间,且容易产生错误。
发明内容
为克服上述现有的数组数据结构恢复方法费时费力,且容易产生错误的问题或者至少部分地解决上述问题,本发明提供一种二进制反编译中数组数据结构恢复方法及系统。
根据本发明的第一方面,提供一种二进制反编译中数组数据结构恢复方法,包括:
S11,对于目标反编译结果中任一非指针变量,若该非指针变量的实际占位大小与该非指针变量的类型对应的占位大小之间的差值大于第一预设阈值,则将该非指针变量作为目标变量;
S12,获取所述目标变量在所述目标反编译结果中各使用位置对应的第一使用模式,若根据所述第一使用模式对应的第一权重确定所述目标变量为数组变量,则对所述数组变量的数据结构进行恢复。
具体地,S11之前还包括:
若目标反编译结果中各非指针变量为局部变量,则获取所述非指针变量所属函数的栈结构,根据各所述非指针变量在所述栈结构中的位置获取各所述非指针变量的实际占位大小;
若各所述非指针变量为全局变量,则获取各所述非指针变量的存储区结构,根据各所述非指针变量在所述存储区结构中的位置获取各所述非指针变量的实际占位大小。
具体地,S11之前还包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学;北京北大软件工程股份有限公司,未经北京大学;北京北大软件工程股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810573717.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:PLC控制的梯级代码编译方法及装置
- 下一篇:一种数据处理方法及装置