Android平台融合多特征的APP反调试方法与流程

文档序号:15144955发布日期:2018-08-10 20:20阅读:575来源:国知局

本发明涉及android平台融合多特征的app反调试方法,属于计算机与信息科学技术领域。



背景技术:

应用程序本身并不具备反调试的功能,但是动态调试是动态分析应用逻辑、动态脱壳等攻击方式所采取的必要手段。为了防止攻击者使用调试工具调试应用程序,进而动态分析程序逻辑、实现进程注入、修改寄存器,需要对app加以反调试的保护,为了防止攻击者利用反反调试方法绕过反调试,需要对app加以反调试的自我保护。因此,本发明将提供融合多特征的app反调试方法来实现android平台app加固。

android平台app反调试方法需要解决的基本问题是判断应用是否调试,综观现有的android平台app反调试方法,通常使用方法可归为四类:

1.基于ptrace的反调试

基于ptrace的反调试方法是指通过linux下的ptrace函数跟踪到应用进程,实现应用程序的跟踪。每个应用进程最多被一个进程跟踪,因此可以通过抢占式的实现反调试预先进行进程跟踪。但是基于ptrace的反调试方法只能针对单进程进行反调试。

2.基于暗桩检测的反调试

基于暗桩检测的反调试方法是指通过检测linux内核向系统文件写入进程状态的信息,判断应用是否被调试。但是由于检测函数的返回值存储在寄存器中,可以通过修改寄存器的方式修改返回结果从而绕过反调试检测。

3.基于调试器特征的反调试

基于调试器特征的反调试方法是指通过检测特定的调试器来检测调试攻击,但是只要修改调试进程的名字就可以绕过。

4.基于断点特征的反调试

基于断点特征的反调试有两种方法,一种方法是检测软件断点,遍历so文件可执行段,检测是否包含breakpoint指令,另一种方法通过sigtrap信号来实现反调试。应用自己先注册sigtrap的信号处理函数,函数将中断指令nop。在程序中主动插入一个断点指令,触发中断处理函数。在调试状态下,sigtrap要执行指令恢复和回退pc操作,由于中断不是调试的断点,直接进行回退pc操作,程序会一直停在断点中,从而实现反调试。

综上所述,现有的android平台app反调试方法可以相对有效地抵御反调试攻击,但是针对这些反调试方法,已有相应的反反调试方法,降低了现有的反调试方法的反调试能力。随着调试攻击和反反调试攻击技术的发展,反调试方法所带来的防护效应越来越小。通过简单的多反调试方法的串联,缺乏调试方法间的相互保护,难以达到更高的反调试效果。所以本发明提出android平台融合多特征的app反调试方法。



技术实现要素:

本发明的目的是为提高反调试方法对抗反反调试攻击的能力,进而提高app反调试攻击能力,提出融合多特征的app反调试方法。

本发明的设计原理为:本发明首先创建子进程,实现对主进程的主动跟踪,同时向主进程写入数据,用于动态加载时生成密钥;然后主进程开启线程分别进行暗桩检测、系统文件监控和子进程监控主进程循环检测主进程和子进程状态,当三个模块任意一个发送异常时退出应用程序;同时子进程与主进程保活交互,保证子进程不被挂起,主进程被监控模块监控,当主进程发送异常信号时结束进程。

本发明的技术方案是通过如下步骤实现的:

步骤1,通过fork创建子进程,子进程利用ptrace实现对主进程的主动跟踪,同时向主进程写入数据,用于动态加载时生成密钥;

步骤2,主进程开启线程,分别进行暗桩检测、系统文件监控和子进程监控主进程循环检测主进程和子进程状态,当三个模块任意一个发送异常时退出应用程序。

步骤3,主进程和子进程之间通过管道通信进行状态交互,实现保活功能,当主进程发送异常信号时结束进程。

有益效果

相比于基于ptrace的反调试方法,本发明可以阻止fork函数过滤、ptrace函数攻击。

相比于基于暗桩检测和调试器特征的反调试方法,本发明可以阻止fopen重定向攻击。

相比于断点特征的反调试方法,本发明可以阻止断点检测。

附图说明

图1为本发明融合多特征的app反调试方法的原理图。

图2为主进程和子进程进行反调试的流程图。

图3为主进程开启线程进行暗桩检测的流程图。

具体实施方式

为了更好的说明本发明的目的和优点,下面结合实施例对本发明方法的实施方式做进一步详细说明。

具体流程为:

步骤1,主进程和子进程进行反调试。

步骤1.1,主进程通过调用fork函数,开启一个子进程,通过fork返回值判断结果,当cpid小于0,开启失败,直接通过kill结束进程,大于0时,开启管道读写线程,并进入循环等待状态;

步骤1.2,子进程开启后,通过ptrace(ptrace_attach,getppid(),null,null)跟踪主进程,当跟踪失败时,表示主进程已经被调试,子进程结束自己。跟踪成功,向管道中写入密钥数据,用以在主进程动态加载;

步骤1.3,主进程循环等待读取管道信息,当读取超时,则直接退出应用程序;读取完子进程通信信息之后,完成双进程反调试步骤,并用通信传递的密钥进行dex的动态加载,开启反调试其他的模块。

步骤2,主进程开启线程进行暗桩检测。

步骤2.1,读取主进程tracerpid,判断是否等于cpid,如果等于cpid则读取子进程tracerpid,否则进行异常处理结束进程。

步骤2.2,判断子进程tracerpid是否等于0,如果等于0则重复以上过程,否则进行异常处理结束进程。

步骤3,主进程开启线程进行系统文件监控。

步骤3.1,通过inofity来监控主进程和子进程的maps文件,实现反调试。

步骤4,主进程和子进程之间通过管道通信进行状态交互,实现保活功能。

步骤4.1,子进程与主进程进行保活交互,定期向主进程通过管道通信发送保活信息,以保证子进程不被挂起;同时父进程监控模块监控父进程的信号,当父进程发送异常信号时,立即结束进程。

测试结果:实验对android平台app进行反调试,本发明能够有效地对抗调试攻击和反反调试攻击,提高了app防护能力。

以上所述的具体描述,对发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。



技术特征:

技术总结
本发明涉及Android平台融合多特征的APP反调试方法,属于计算机与信息科学技术领域。本发明首先创建子进程,实现对主进程的主动跟踪,同时向主进程写入数据,用于动态加载时生成密钥;然后主进程开启线程分别进行暗桩检测、系统文件监控和子进程监控主进程循环检测主进程和子进程状态,当三个模块任意一个发送异常时退出应用程序;同时子进程与主进程保活交互,保证子进程不被挂起,主进程被监控模块监控,当主进程发送异常信号时结束进程。本发明能够有效地对抗调试攻击和反反调试攻击,提高了APP防护能力。

技术研发人员:潘丽敏;李蕊;罗森林;尚海;张笈
受保护的技术使用者:北京理工大学
技术研发日:2018.03.21
技术公布日:2018.08.10
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1