1.一种应用程序的反调试方法,其特征在于,该方法包括:
步骤S101,检测当前应用程序是否处于被调试状态;
步骤S102,在应用程序的关键点上,加入检测逻辑;
步骤S103,如果检测到应用程序被调试,则获取执行调试操作的用户信息,并将该用户信息发送到服务器,并执行退出程序。
2.根据权利要求1所述的反调试方法,其特征在于,检测当前应用程序是否处于被调试状态具体包括:
编写功能函数用于检测当前应用程序是否处于被调试状态,该功能函数读取Android系统的状态文件,并判断所读取的状态文件中的TracePid字段,如果TracePid字段的值等于0,则说明该应用程序没有被调试,如果不等于0,则说明该应用程序已经被调试。
3.根据权利要求2所述的反调试方法,其特征在于,加入检测逻辑具体包括:
调用编写的用于检查当前进程是否被调试的功能函数。
4.根据权利要求1或3所述的反调试方法,其特征在于,在应用程序的关键点上,加入检测逻辑具体包括:
在应用程序启动的时候、用户登录成功后或者应用程序加载其他SO文件时,加入检测逻辑。
5.根据权利要求1所述的反调试方法,其特征在于,执行退出程序具体包括:
如果检测到应用程序当前正在被调试,则创建m个线程,并在每个线程中加入程序退出逻辑,然后随机选择一个线程来执行退出逻辑,其中m为大于1的正整数,所述的退出逻辑为通过执行Android系统提供的接口函数System.exit(0)实现退出功能。
6.根据权利要求5所述的反调试方法,其特征在于,随机选择一个线程来执行退出逻辑具体包括:
调用系统函数Rand生成一个取值范围为1到n的随机数,并从该随机数个线程中选择一个线程来执行退出逻辑,其中n为大于1的正整数,取值范围n与所述创建m个线程中的m一致。
7.根据权利要求5至6之一所述的反调试方法,其特征在于,执行退出程序具体包括:
通过删除应用程序执行所需的对象,让程序无法继续执行下去,其中所述应用程序执行所需的对象包括读文件的句柄或者分配的内存空间。
8.根据权利要求1所述的反调试方法,其特征在于,获取执行调试操作的用户信息,并将该用户信息发送到服务器具体包括:
通过网络套接字将当前用户信息发送到服务器,接收到信息后,服务器对该当前用户进行标记,指示该当前用户存在调试应用程序的操作。
9.一种应用程序的反调试系统,该系统包括检测模块、加入模块以及处理模块,其特征在于:
检测模块,用于检测当前应用程序是否处于被调试状态;
加入模块,用于在应用程序的关键点上,加入检测逻辑;
处理模块,用于当如果检测到应用程序被调试,则获取执行调试操作的用户信息,并将该用户信息发送到服务器,并执行退出程序;
检测当前应用程序是否处于被调试状态具体包括:
编写功能函数用于检测当前应用程序是否处于被调试状态,该功能函数读取Android系统的状态文件,并判断所读取的状态文件中的TracePid字段,如果TracePid字段的值等于0,则说明该应用程序没有被调试,如果不等于0,则说明该应用程序已经被调试;
执行退出程序具体包括:
如果检测到应用程序当前正在被调试,则创建m个线程,并在每个线程中加入程序退出逻辑,然后随机选择一个线程来执行退出逻辑,其中m为大于1的正整数,其中,该程序退出逻辑为Android系统提供的接口函数System.exit(0);
在应用程序的关键点上,加入检测逻辑具体包括:
调用编写的用于检查当前进程是否被调试的功能函数;
在应用程序启动的时候、用户登录成功后或者应用程序加载其他SO文件时,加入检测逻辑;
随机选择一个线程来执行退出逻辑具体包括:
调用系统函数Rand生成一个取值范围为1到n的随机数,并从该随机数个线程中选择一个线程来执行退出逻辑,其中取值范围n与所述创建n个线程中的n一致。
10.根据权利要求9所述的反调试系统,其特征在于,执行退出程序具体包括:
通过删除应用程序执行所需的对象,让程序无法继续执行下去,其中所述应用程序执行所需的对象包括读文件的句柄或者分配的内存空间;
获取执行调试操作的用户信息,并将该用户信息发送到服务器具体包括:
通过网络套接字将当前用户信息发送到服务器,接收到信息后,服务器对该当前用户进行标记,指示该当前用户存在调试应用程序的操作。