[发明专利]一种二进制反编译中数组数据结构恢复方法及系统有效
申请号: | 201810573717.3 | 申请日: | 2018-06-06 |
公开(公告)号: | CN108958739B | 公开(公告)日: | 2020-11-10 |
发明(设计)人: | 高庆;张世琨;孙永杰;马森 | 申请(专利权)人: | 北京大学;北京北大软件工程股份有限公司 |
主分类号: | G06F8/53 | 分类号: | G06F8/53 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王莹;吴欢燕 |
地址: | 100871*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 二进制 反编译 数组 数据结构 恢复 方法 系统 | ||
1.一种二进制反编译中数组数据结构恢复方法,其特征在于,包括:
S11,对于目标反编译结果中任一非指针变量,若该非指针变量的实际占位大小与该非指针变量的类型对应的占位大小之间的差值大于第一预设阈值,则将该非指针变量作为目标变量;
S12,获取所述目标变量在所述目标反编译结果中各使用位置对应的第一使用模式,若根据所述第一使用模式对应的第一权重确定所述目标变量为数组变量,则对所述数组变量的数据结构进行恢复;
其中,S12具体包括:
S121,根据所述目标反编译结果的抽象语法树,获取所述目标变量在所述目标反编译结果中各使用位置和各所述使用位置对应的第一使用模式;
S122,根据各所述第一使用模式对应的第一权重,将所述目标变量在所述目标反编译结果中各使用位置对应的第一权重相加;
S123,若相加结果大于第二预设阈值,则获知所述目标变量为数组变量,对所述数组变量的数据结构进行恢复;
其中,S12中对数组变量的数据结构进行恢复的步骤具体包括:
根据所述数组变量的实际占位大小和所述数组变量的类型,计算所述数组变量中元素的个数;
根据所述数组变量中元素的个数,对各所述使用位置的目标变量增加数据结构。
2.根据权利要求1所述的方法,其特征在于,步骤S11之前还包括:
若目标反编译结果中各非指针变量为局部变量,则获取所述非指针变量所属函数的栈结构,根据各所述非指针变量在所述栈结构中的位置获取各所述非指针变量的实际占位大小;
若各所述非指针变量为全局变量,则获取各所述非指针变量的存储区结构,根据各所述非指针变量在所述存储区结构中的位置获取各所述非指针变量的实际占位大小。
3.根据权利要求1所述的方法,其特征在于,S11之前还包括:
根据各非指针变量在目标反编译结果中的各使用位置,从各所述使用位置对应函数的参数中获取各所述非指针变量的实际占位大小。
4.根据权利要求1所述的方法,其特征在于,S11之前还包括:
构建目标反编译结果的抽象语法树,根据所述抽象语法树获取所述目标反编译结果中各非指针变量的类型。
5.根据权利要求1所述的方法,其特征在于,所述第一使用模式对应的第一权重为所述第一使用模式所属的使用类别对应的第一权重;
其中,所述使用类别包括数组类使用、通用使用和非数组类使用。
6.根据权利要求1所述的方法,其特征在于,S123还包括:
若所述相加结果小于或等于所述第二预设阈值,且大于第三预设阈值,则获知所述目标变量为第一疑似数组变量;其中,所述第三预设阈值小于所述第二预设阈值;
根据用户输入的第四预设阈值,确定是否对所述第一疑似数组变量的数据结构进行恢复;其中,所述第四预设阈值小于或等于所述第二预设阈值,且大于所述第三预设阈值。
7.根据权利要求1-6任一所述的方法,其特征在于,S11还包括:
对于任一所述非指针变量,若该非指针变量的实际占位大小与该非指针变量的类型对应的占位大小之间的差值小于或等于所述第一预设阈值,则将该非指针变量作为疑似目标变量;
相应地,S12还包括:
获取所述疑似目标变量在所述目标反编译结果中各使用位置对应的第二使用模式,若根据所述第二使用模式对应的第二权重确定所述疑似目标变量为第二疑似数组变量,则根据用户输入的第五预设阈值确定是否对所述第二疑似数组变量的数据结构进行恢复。
8.一种二进制反编译中数组数据结构恢复系统,其特征在于,包括:
比较模块,用于对于目标反编译结果中任一非指针变量,若该非指针变量的实际占位大小与该非指针变量的类型对应的占位大小之间的差值大于第一预设阈值,则将该非指针变量作为目标变量;
恢复模块,用于获取所述目标变量在所述目标反编译结果中各使用位置对应的第一使用模式,若根据所述第一使用模式对应的第一权重确定所述目标变量为数组变量,则对所述数组变量的数据结构进行恢复;
其中,恢复模块具体用于:
根据目标反编译结果的抽象语法树,获取目标变量在目标反编译结果中的各使用位置和各使用位置对应的第一使用模式;
根据各第一使用模式对应的第一权重,将目标变量在目标反编译结果中各使用位置对应的第一权重相加;
若相加结果大于第二预设阈值,则获知目标变量为数组变量,对数组变量的数据结构进行恢复;
其中,恢复模块具体用于:
根据数组变量的实际占位大小和数组变量的类型,计算数组变量中元素的个数;
根据数组变量中元素的个数,对各使用位置的目标变量增加数据结构。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学;北京北大软件工程股份有限公司,未经北京大学;北京北大软件工程股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810573717.3/1.html,转载请声明来源钻瓜专利网。
- 上一篇:PLC控制的梯级代码编译方法及装置
- 下一篇:一种数据处理方法及装置