System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本实专利技术涉及单体固件漏洞挖掘与利用领域,具体涉及到一种基于动态修补的单体固件调试方法。
技术介绍
1、单体固件是一种不依赖于操作系统的集成固件设计,其中所有功能和模块都被紧密地集成在同一个固件映像中。这种设计方式常常用于资源受限的嵌入式系统,能够简化管理、减少开销并提高性能。单体固件常见于stm32和arm嵌入式系统,广泛应用于简单的控制器和设备中,特别是空管领域中的大量设备均采用单体固件设计。
2、在单体固件漏洞挖掘与利用领域,很多应用场景都需要对单体固件的执行过程进行监控和调试。传统方案需要jatg接口、swd接口等硬件调试接口的支持,然而厂商出厂的设备成品一般会屏蔽这些硬件调试接口。另一种传统方案是对固件进行仿真模拟,然而仿真模拟的环境配置复杂,并且很难反应固件设备的真实执行情况。
3、传统静态修补方案是直接对监控地址进行静态方式修补,该方案容易造成固件设备损坏。若需要调试的位置过多,则损坏的概率更大。
4、因此,开发一种无需硬件支持、能够在固件执行层面提供动态修补和调试功能的技术解决方案,对于提高固件安全性、加快安全研究的进程具有重要意义。
5、为此,提出一种基于动态修补的单体固件调试方法,以解决上述问题。
技术实现思路
1、本专利技术的目的在于提供一种基于动态修补的单体固件调试方法,采用的技术方案为:
2、一种基于动态修补的单体固件调试方法,包括以下步骤:
3、s1、寻找前端上传逻辑对应的固件代码
4、s2、分析固件校验算法;
5、s3、编译调试载荷,并将编译后的可执行文件转换成无格式二进制调试载荷;
6、s4、根据所述步骤s2得到的固件校验算法,重新计算无格式二进制调试载荷的校验值;
7、s5、将无格式二进制调试载荷嵌入至所述步骤s1获取到的前端上传逻辑对应的固件代码位置;
8、s6、运行固件设备,对固件设备的目标内存地址进行动态修补,并调试固件设备;具体包括以下步骤:
9、s61、确定预输入的目标内存地址和回调函数地址;
10、s62、在调试载荷预留的slot/stub空间中寻找一个空项,在该空项中开辟变量槽slot和存根stub;存根stub存储固定代码数据;
11、s63、将回调函数地址和目标内存地址写入变量槽slot中的对应地址;
12、s64、读取目标内存地址处的原始指令,并将原始指令写入变量槽slot中的对应地址;
13、s65、根据目标内存地址的下一地址,生成跳转指令,并将跳转指令写入变量槽slot中的对应地址;
14、s66、当固件程序运行至目标内存地址时,根据slot/stub空间中的存根stub地址,生成新的跳转指令newbytes,并将新的跳转指令newbytes写入目标内存地址;
15、s67、刷新指令缓存;
16、s68、执行新的跳转指令newbytes,程序跳转至slot/stub空间中的存根stub;
17、存根stub执行流程包括以下步骤:
18、s681、保存固件指令序列当前执行环境下的上下文信息;
19、s682、读取变量槽slot中保存的回调函数地址,通过回调函数地址调用回调函数,执行回调函数中用户自定义的功能代码,调试固件设备;
20、s683、恢复固件指令序列原始执行环境下的上下文信息;
21、s684、读取变量槽slot中保存的原始指令,执行原始指令;
22、s685、读取变量槽slot中的跳转指令,执行跳转指令,程序跳转至目标内存地址的下一地址;
23、s69、按照原始执行流执行固件程序。
24、本专利技术与现有技术相比,具有如下优点和有益效果:
25、1、本专利技术通过将目标内存地址处的原始指令替换为存根,在固件运行至目标内存地址时插入用户自定义的回调函数,进而实现了对特定内存地址访问事件的调试或自定义处理,解决了传统的固件调试方式下,需要硬件接口支持、难以反映固件真实执行情况的缺点。
26、2、本专利技术对目标内存地址的修补操作在程序的动态运行阶段完成,而非对目标内存地址直接进行静态修补,显著降低了设备损坏的风险,大幅提升了作业效率,降低了投入成本。
本文档来自技高网...【技术保护点】
1.一种基于动态修补的单体固件调试方法,其特征在于,包括以下步骤:
【技术特征摘要】
1.一种基于动态修补的单体固件调试...
【专利技术属性】
技术研发人员:方智阳,陈愉鑫,王俊峰,白小波,陈浩廷,耿嘉炫,
申请(专利权)人:四川大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。