[发明专利]针对VMP指令引发目标内存变化的检测方法有效
申请号: | 202010293599.8 | 申请日: | 2020-04-14 |
公开(公告)号: | CN111522699B | 公开(公告)日: | 2023-05-23 |
发明(设计)人: | 张毅斌 | 申请(专利权)人: | 杭州斯凯数据科技集团有限公司 |
主分类号: | G06F11/22 | 分类号: | G06F11/22 |
代理公司: | 杭州融方专利代理事务所(普通合伙) 33266 | 代理人: | 沈相权 |
地址: | 310013 浙江省杭*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 针对 vmp 指令 引发 目标 内存 变化 检测 方法 | ||
本发明公开了针对VMP指令引发目标内存变化的检测方法。涉及VMP指令引发目标内存变化技术领域。利用VMP的低频指令对于目标内存的修改,往往就发生在低频指令的断点处;借助这些低频指令的断点,就能跳过大量的VMP指令序列,从而快速逼近引发内存变化的指令,找到VMP下的内存变化点,使得在VMP下检测内存变化的效率高,可靠性好。
技术领域
本发明涉及VMP指令引发目标内存变化技术领域,尤其涉及针对VMP指令引发目标内存变化的检测方法。
背景技术
出于安全考虑,安卓应用往往把报文加密算法封放在SO(容器)中,加密算法处理完明文后,会把加密结果输出到目标内存,引发目标内存的改变。如果能够找到引发目标内存变化的指令位置,则往往能够在其附近比较容易地找到加密算法。为了检测内存变化,逆向分析者可以借助于ida(交互式反汇编器)对加密函数的多处断点下指令,并在程序运行到断点时检测目标内存的变化,最终可以把变化点定位到某个函数或者某条指令。
但是当前随着VMP(加密壳)加固技术的盛行,上述检测方法日趋困难。因为VMP把受保护的c代码编译转换成新的指令形式,不仅使得ida无法识别,还插入大量的跳转、冗余指令把指令序列规模膨胀成百上千倍。
SO(soServiceObject)是容器管理的一组对象,完成系统中的业务功能。ServiceObject完成的工作可能是一系列对数据库操作,文件系统,内存操作的集合。ServiceObject存在于容器中,部署在应用服务器中,可以被外部程序如web程序,桌面程序,或是命令行程序等调用。ServiceObject由容器进行管理,每个ServiceObject在内存中只有一份实例,在容器启动时创建,容器关闭时销毁。
事实上,加密算法仍然把加密结果写入目标内存,只是对应的c代码被转化为VMP指令,被VMP指令解析器解释执行。只要在VMP指令解析器执行每条VMP指令进行监控,仍然可以发现内存的变化点。
但是问题出现在低效的ida断点机制。因为它是基于进程间通信,每秒最多执行数十次断点。而执行一次加密函数过程中,VMP指令数量可能高达千万。此时如果对每条指令都进行断点检测,则需要耗费数十个小时,时间成本令人无法承受。
MD5即Message-DigestAlgorithm5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。
发明内容
本发明是为了解决现有在VMP下检测内存变化存在效率较低的不足,提供一种在VMP下检测内存变化的效率高的针对VMP指令引发目标内存变化的检测方法。
为了实现上述目的,本发明采用以下技术方案:
针对VMP指令引发目标内存变化的检测方法。检测方法的实现过程如下:
步骤1,设置终点为VMP的出口点;
步骤2,断点到内存基准点,计算目标内存的md5;
步骤3,依断点次序执行完所有的历史增量子序列;
步骤4,对VMP的每条指令子序列的解析出口分别设置一个断点;
步骤5,在执行到下一个断点后,取消该断点;
步骤6,当前断点是否为终点?若当前断点是终点,则执行步骤7;若当前断点不是终点,则执行步骤11;
步骤7,目标内存md5是否改变?若目标内存md5有改变,则执行步骤8;若目标内存md5没有改变,则执行步骤10;
步骤8,增量子序列长度是否为0?若增量子序列长度为0,则执行步骤9;若增量子序列长度不为0,则执行步骤13;
步骤9,找到内存变化点,然后执行步骤16;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州斯凯数据科技集团有限公司,未经杭州斯凯数据科技集团有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010293599.8/2.html,转载请声明来源钻瓜专利网。