[发明专利]一种基于链表和逆向遍历的汇编代码中if结构识别方法在审
| 申请号: | 202211670829.3 | 申请日: | 2022-12-23 |
| 公开(公告)号: | CN115857953A | 公开(公告)日: | 2023-03-28 |
| 发明(设计)人: | 李根;吴瑾;郭向英;于婷婷;高栋栋;王博祥;刘璟炜;盛庄 | 申请(专利权)人: | 北京轩宇信息技术有限公司 |
| 主分类号: | G06F8/53 | 分类号: | G06F8/53 |
| 代理公司: | 暂无信息 | 代理人: | 暂无信息 |
| 地址: | 101300 北京市顺义*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 逆向 遍历 汇编 代码 if 结构 识别 方法 | ||
本发明公开了一种基于链表和逆向遍历的汇编代码中if结构识别方法,包括以下步骤:步骤一,创建链表和以地址为索引图的图;步骤二,汇编指令汇总与存储;步骤三,反优化操作;步骤四,逆向遍历链表;步骤五,无条件跳转指令的识别与归纳;步骤六,条件跳转指令的识别与归纳;本发明采用被跨越、被交叉的原则,实现了对编译器对跳转优化的反优化;本发明通过总结的识别策略实现了对if‑then、if‑else核结构的自动识别;本发明采用逆向遍历的方式,实现对if嵌套、布尔表达式复杂结构的识别,与正向识别方式相比,该方法仅需要一次遍历就能够确定每个if‑then、if‑else核心结构,减少了二次遍历的运算量。
技术领域
本发明涉及软件逆向工程技术领域,具体为一种基于链表和逆向遍历的汇编代码中if结构识别方法。
背景技术
目前能够实现汇编逆向工程的商业软件仅有IDA PRO软件,该软件是封闭的,不允许第三方程序对其逆向插件进行调用,另外其输出结果为直接的高级语言源代码(如C语言),若需要获取语法树依然要自己对输出结果进行语法分析,这将会进步一增加工作量。
对于被编译器进行优化的直接跳转指令(归属于非条件跳转指令,与之对应的另一种非条件跳转为“间接跳转”),由于跳转目标地址发生的改变,原本的跳转结构将会被打乱,无法实现源代码及汇编码的细致对应关系,这也同步增加了反演程序结构的难度。注:间接跳转通常以用于多分支结构,如switch,在编译原理中,生成if结构的汇编指令与间接跳转无关。
专利申请人北京大学申请的CN101063944A号专利公开了识别一种复合条件分支结构的方法,其采用可执行文件反推的中间代码和控制流作为基础输入,输入的级别要高于汇编级别,即仍需要对汇编代码进行进一步逆向至IR层级,这将严重依赖于第三方软件,也需要人工对数据进行搬运。另外,其识别过程为由低地址汇编语句到高地址语句的顺序,其推导方式为正向推导方式,对于存在编译器优化的情况没有考虑,对于由if、if-else嵌套场景生成的汇编代码如何逆向其结构也未给出描述。
发明内容
本发明的目的在于提供一种基于链表和逆向遍历的汇编代码中if结构识别方法,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:一种基于链表和逆向遍历的汇编代码中if结构识别方法,包括以下步骤:步骤一,创建链表和以地址为索引图的图;步骤二,汇编指令汇总与存储;步骤三,反优化操作;步骤四,逆向遍历链表;步骤五,无条件跳转指令的识别与归纳;步骤六,条件跳转指令的识别与归纳;
其中在上述步骤一中,创建一个存放地址单元指针的链表和以地址为索引图的图,用于顺序式存储和索引地址单元使用;
其中在上述步骤二中,汇编指令的汇总:获取原始汇编代码后,遍历汇编指令,将其中的所有跳转指令的起始地址和目标地址进行提取,将所有跳转指令与其起始地址配对、将所有的跳转指令与其跳转目标地址配对,以此得到地址和跳转指令的配对,以相同地址作为条件进行汇总,对地址去重,相同地址只保留一个单例;汇编指令的存储:创建地址单元将起始地址和跳转地址及指令存入对应变量中,将地址单元的指针存入步骤一中所创建的链表和图,如果图中已存在某键值,则不需创建地址单元,而是将指令及其输入放入已有该地址的地址单元中;
其中在上述步骤三中,利用反优化方法,对跳转合并的地址进行还原,变更被优化跳转目标地址的指令的值;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京轩宇信息技术有限公司,未经北京轩宇信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202211670829.3/2.html,转载请声明来源钻瓜专利网。





