[发明专利]一种基于二进制分析的动态库裁剪方法有效
申请号: | 202111285971.1 | 申请日: | 2021-11-02 |
公开(公告)号: | CN113721928B | 公开(公告)日: | 2022-01-18 |
发明(设计)人: | 甘志峰;张瑞冬;童永鳌;朱鹏 | 申请(专利权)人: | 成都无糖信息技术有限公司 |
主分类号: | G06F8/52 | 分类号: | G06F8/52;G06F8/72 |
代理公司: | 成都为知盾专利代理事务所(特殊普通合伙) 51267 | 代理人: | 李汉强 |
地址: | 610000 四川省成都市高新*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 二进制 分析 动态 裁剪 方法 | ||
1.一种基于二进制分析的动态库裁剪方法,其特征在于,包括:
步骤1:进行目标动态库模块解析,分析目标动态库模块的文件格式,然后进行分离数据段和代码段操作,获取符号信息和重定位信息;
步骤2:通过数据流分析对所述数据段和所述代码段进行分析,还原控制流图,用于恢复控制流信息;所述步骤2具体为:
步骤2.1:初始化分析环境;
步骤2.2:反汇编所述代码段并将其提升为中间表示;
步骤2.3:分析所述中间表示,对跳转类语句和非跳转类语句进行处理,以位置与边的形式构成抽象状态的约束系统;
步骤2.4:基于约束系统,使用数据流分析计算每个位置的状态以实例化间接调用具体地址,形成可达状态集;
步骤2.5:根据可达状态集还原控制流图;
步骤3:恢复函数调用图,并根据用户需求函数集与步骤1中的重定位信息和符号信息,过滤出无用函数信息,并用空白指令填充无用函数信息,形成修改的动态库;
步骤4:使用二进制重写技术将步骤3中修改的动态库进行反汇编成为可汇编的代码,并恢复链接信息,然后在文本层面消除空白指令,并使用汇编器和链接器对消除空白指令后的代码进行重构,生成重构动态库。
2.根据权利要求1所述的一种基于二进制分析的动态库裁剪方法,其特征在于,所述步骤1具体为:
步骤1.1:对目标动态库模块进行文件格式识别,判断目标动态库模块的目标系统架构;
步骤1.2:根据目标动态库模块对应的文件格式对其进行标准解析,保存数据段、符号信息和重定位信息,所述数据段包括程序加载基质、入口点和依赖库;
步骤1.3:截取代码段,所述代码段用于后续静态分析。
3.根据权利要求1所述的一种基于二进制分析的动态库裁剪方法,其特征在于,所述步骤2.1具体为:初始化分析环境时使用抽象内存模型来描述内存,以不同区域划分不同的内存位置类型。
4.根据权利要求1所述的一种基于二进制分析的动态库裁剪方法,其特征在于,所述步骤2.2具体为:
步骤2.2.1:根据代码段各部分的当前状态反汇编对应位置的机器码;
步骤2.2.2:加载中间表示的描述文件,用于描述汇编指令与中间表示的映射关系;
步骤2.2.3:根据对应的规则将当前汇编指令提升为中间表示的语句序列。
5.根据权利要求1所述的一种基于二进制分析的动态库裁剪方法,其特征在于,所述步骤2.3中对于跳转类语句和非跳转类语句的处理方式具体为:
对于跳转语句,生成具有假设语义的边,其后继控制流则根据前一结点的抽象状态来决定;
对于非跳转类语句,直接以当前语句位置与下一条邻接语句的状态为节点,以语句语义构成边。
6.根据权利要求1所述的一种基于二进制分析的动态库裁剪方法,其特征在于,所述步骤2.4具体为:通过worklist算法来进行数据流分析,将每条边接收一个状态输入,并以一个后继状态作为输出,所有边的输出状态的集合就是可达状态集;当一个状态输入遇到具有假设语义的边时,会根据自身具体数值是否符合语义来判断能否经过这条边,若一条边没有状态输出,则说明这部分代码不可达。
7.根据权利要求6所述的一种基于二进制分析的动态库裁剪方法,其特征在于,所述步骤2.5具体为:
步骤2.5.1:分析所述可达状态集,获取所有具有假定语义的边;
步骤2.5.2:将具有假定语义的边的一个端点作为基本块开头,另一个端点作为基本块结尾,并将两个相邻的基础块进行连接;
步骤2.5.3:对所有基本块划分函数边界,断开跨函数基本块之间的边。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于成都无糖信息技术有限公司,未经成都无糖信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111285971.1/1.html,转载请声明来源钻瓜专利网。