CN106055983A - 一种基于IDA通信的Android应用反调试方法 - Google Patents

一种基于IDA通信的Android应用反调试方法 Download PDF

Info

Publication number
CN106055983A
CN106055983A CN201610603109.3A CN201610603109A CN106055983A CN 106055983 A CN106055983 A CN 106055983A CN 201610603109 A CN201610603109 A CN 201610603109A CN 106055983 A CN106055983 A CN 106055983A
Authority
CN
China
Prior art keywords
ida
android
debugging
communication
detection
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201610603109.3A
Other languages
English (en)
Inventor
文伟平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Devsource Technology Co Ltd
Original Assignee
Beijing Devsource Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Devsource Technology Co Ltd filed Critical Beijing Devsource Technology Co Ltd
Priority to CN201610603109.3A priority Critical patent/CN106055983A/zh
Publication of CN106055983A publication Critical patent/CN106055983A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公布了一种基于IDA通信的Android应用反调试方法,将反调试程序写在Android应用程序中,通过JNI_OnLoad实现加载,在Android应用程序运行时首先运行反调试程序;反调试方法包括一般反调试检测、IDA通信检测和跟踪检测;在一般反调试检测时,检测硬件信息,当检测到模拟器或调试器信息时,退出该应用;再检测时间差,当没有被单步调试执行的进程时,退出应用;检测IDA通信端口和进程,当状态为建立连接时,往下运行;否则退出;检测通信模式,当存在IDA调试时,退出应用;检测IDA进程跟踪,当存在被调试的IDA程序时,退出应用;否则,继续正常运行该Android应用。利用本发明方法,可有效地对Android应用程序进行版权保护,防止其被调试。

Description

一种基于IDA通信的Android应用反调试方法
技术领域
本发明涉及IDA通信检测和应用软件反调试技术,尤其涉及一种基于IDA通信(Interactive DisAssembler,交互式反汇编器)的Android应用反调试方法。
背景技术
随着计算机技术应用日益普及,Android智能终端的快速发展,Android软件产业得以飞速发展,与此同时,攻击者利用Android软件逆向技术对软件的各种攻击和未授权使用以及盗版复制等行为也越来越多。Android逆向分析技术可以被用来在不知道应用程序源代码的情况下分析应用程序的功能流程、篡改应用程序的数据代码等,逆向分析技术如果被不加限制的恶意使用,利用者可以分析获取应用程序的核心技术,也可以篡改应用程序的签名和作者信息,还可以将恶意代码注入到已有的应用程序中并通过二次打包进行伪装,这些行为都极大的危害了应用程序开发者的利益,严重损害了广大用户的隐私安全。在Android软件逆向技术中,Android调试技术是一个非常重要的组成部分。通过进行Android应用的调试,可以得到Android应用的运行流程,推断出Android应用的基本原理,通常可以非常顺利且快速地绕过一些登陆限制或功能限制,获取到一些用户私密信息,具有较大的危害。
IDA Pro名称为交互式反汇编器专业版(Interactive DisassemblerProfessional),人们常称其为IDA Pro,或简称为IDA,是Hex-Rayd公司的一款产品。就其本质而言,IDA是一种递归下降反汇编器。除反汇编过程本身外,IDA在区分数据与代码的同时,还设法确定这些数据的类型。虽然在IDA中看到的是汇编语言形式的代码,但IDA的主要目标之一在于,呈现尽可能接近源代码的代码。此外,IDA不仅使用数据类型信息,而且通过派生的变量和函数名称来尽其所能地注释生成的反汇编代码。这些注释将原始十六进制代码的数量减到最少,并显著增加了向用户提供的符号化信息的数量。IDA在版本4.5中引入了一个调试器,从而巩固了IDA作为一种常用逆向工程工具的地位。在随后的版本中,IDA的调试功能不断扩展。IDA的最新版本能够在各种不同的平台上进行本地和远程调试,并支持许多不同的处理器。近年来,随着IDA Pro功能的不断完善,IDA Pro作为调试器的功能也越来越突出。
IDA调试器可以进行本地调试和远程调试。对本地调试而言,只能调试可在你的平台上运行的二进制文件。对于在其他平台或CPU上运行的二进制文件,没有模拟层允许它们在IDA的本地调试器中运行。至于远程调试,IDA自带了许多调试服务器,包括用于Windows32/64、Windows CE/ARM、Mac OS X 32/64、Linux 32/64/ARM和Android的服务器。调试服务器旨在与要调试的二进制文件并行执行。运行远程调试服务器后,IDA将能够与该服务器通信,在远程计算机上启动目标进程,或依附到该进程。因此IDA对于Android应用的调试主要是采用远程调试技术。
IDA调试Android应用的一般流程如下:1、要开始调试,首先需要在进行进程调试的计算机上启动相应的调试服务器组件。如果要将Windows版本的IDA作为调试客户端,并且希望远程调试Android应用程序,则除了要调试的二进制文件外,只需复制android_server文件并赋予其相关的权限在Android系统上执行该文件,android_server进程启动后默认会监听23946端口。2、通过adb(Android Debug Bridge,Android调试桥)进行tcp端口转发,默认端口为23946,例如“adb forward tcp:23946tcp:23946”。3、调试模式启动程序adb shell am start-D-n包名/类名。Android应用会弹出”Waitting for debugger”对话。4、启动IDA,点击”Debugger->Attach->Remote ArmLinux/Android debugger”进行基本的设置。然后选中要调试的进程,将调试程序attach到该进程上去。5、然后可以执行要进行的调试操作。从IDA调试Android应用的一般流程中可以看出IDA调试Android应用的基本原理,IDA在调试Android应用时通过与调试服务器进行通信,建立TCP连接,监测并控制Android应用进程的运行情况,实现调试Android应用的功能。
反调试是指通过多种检测方法来判断是否有调试器存在或者有调试程序的进程存在,从而阻止Android应用被调试。目前针对Android应用的反调试技术主要通过检测时间差来检测是否中间有被单步调试执行;检测是否加载了com.android.reverse,检测到则直接退出;检测手机上的一些硬件信息,判断是否在模拟器或调试器中;基于ptrace系统调用的反调试技术等方法。
综上,目前虽然提出了一些反调试方法,但多数是通用方法,并没有专门针对IDA进行反调试的技术。
发明内容
为了克服上述现有技术的不足,本发明提供一种基于IDA通信(InteractiveDisAssembler,交互式反汇编器)的Android应用反调试方法,涉及到一般反调试检测,IDA通信检测,IDA进程跟踪检测等方法,使得IDA不能对Android应用进行调试;另外,需保证加入反调试代码的Android应用可以正常执行;从而达到保护版权,防止他人剽窃软件中的智力成果或对软件进行有目的的篡改的目的。
本发明的原理是:一个Android应用在打包成APK文件之后,APK中会包含dex文件、so文件、资源文件和框架文件。本发明提供的基于IDA通信的Android应用反调试方法,其前提是在Android应用运行时,要在程序运行时首先运行反调试程序,实现方法是将反调试程序写在so文件中,通过JNI_OnLoad实现加载。Java Native Interface(JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI是本地编程接口,它使得在Java虚拟机(VM)内部运行的Java代码能够与用其它编程语言(如C、C++和汇编语言)编写的应用程序和库进行交互操作。当Android的VM(Virtual Machine)执行到System.loadLibrary()函数时,首先会去执行C组件里的JNI_OnLoad()函数。反调试方法的整体的流程是首先进行一般反调试检测,使用通用的检测方法将明显的调试检测出来。然后进行IDA通信检测,针对IDA调试进行检测,判断是否存在IDA调试。最后进行IDA进程跟踪检测,判断是否存在IDA跟踪进程。整个过程在Android应用运行时同时循环执行,确保实现反调试功能,阻止IDA Pro软件进行Android应用调试。
本发明提供的技术方案是:
一种基于IDA通信的Android应用反调试方法,将反调试程序写在Android应用程序中,通过JNI_OnLoad实现加载,在Android应用程序运行时首先运行所述反调试程序;所述反调试方法包括一般反调试检测、IDA通信检测和跟踪检测;具体包括如下步骤,
A.在一般反调试检测时,执行如下操作:
A1.检测硬件信息,判断Android应用程序是否在模拟器或调试器中,当检测到模拟器或调试器信息时,强制退出该Android应用,不让该Android应用被调试;反之,则不做操作,继续执行;
A2.通过检测时间差,判断是否有被单步调试执行的进程;当有被单步调试执行的进程时,往下运行;否则退出程序强制将该Android应用退出,不让该应用被调试;
B.在进行IDA通信检测时,执行如下操作:
B1.检测IDA通信中所使用的端口,读取通信连接进程文件,当状态为建立连接时,往下运行;否则退出应用程序,停止调试;
B2.通过检测通信模式是否符合IDA通信模式,判断是否存在IDA调试;当存在IDA调试时,退出应用程序,停止调试;否则继续运行;
C.在IDA进程跟踪检测时,读取Android应用的进程信息,根据进程信息判断是否存在IDA跟踪进程;当存在被调试的IDA程序时,将该Android应用退出;否则,该Android应用程序继续正常运行。
针对上述基于IDA通信的Android应用反调试方法,进一步地,A1所述硬件信息具体包括:“/dev/socket/qemud”通道、“/dev/qemu_pipe”通道、已知QEmu的驱动程序的列表、模拟器上特有文件信息、设备IDS信息、手机硬件信息、手机运营商家信息。
针对上述基于IDA通信的Android应用反调试方法,进一步地,A2通过检测时间差来检测是否中间有被单步调试执行并处理,具体是:设置时间阈值,通过检测进程的运行时间与设置的时间阈值的时间差来判断是否有被单步调试执行的进程,进行如下处理:通过检测进程的运行时间,与设置的阈值进行比较,判断时间差是否符合要求。如果符合,则往下运行,否则退出程序强制将该Android应用退出,不让该应用被调试。
针对上述基于IDA通信的Android应用反调试方法,进一步地,B1所述检测IDA通信中所使用的端口为默认端口23946;所述通信连接为tcp连接,tcp连接信息包括本地地址端口local_address()、远程地址端口rem_address和连接状态st。
B2所述通过检测通信模式是否符合IDA通信模式,判断是否存在IDA调试;具体包括如下过程:首先读取proc/[pid]/net/tcp文件,获取该文件中下存放进程的tcp连接的信息;再通过tcp文件连接的状态信息判断是否存在IDA通信模式的TCP连接,进一步获得Android应用是否被IDA调试。
针对上述基于IDA通信的Android应用反调试方法,进一步地,C所述IDA进程跟踪检测,具体地,首先对/proc/[pid]/status文件进行分析,获得status文件的tracerpid属性的值;再根据tracerpid属性的值,得到IDA程序是否被调试。
与现有技术相比,本发明的有益效果是:
本发明提供一种基于IDA通信的Android应用反调试方法,将反调试程序写在Android应用程序中,通过JNI_OnLoad实现加载,在Android应用程序运行时首先运行所述反调试程序;所述反调试方法包括一般反调试检测、IDA通信检测和跟踪检测。利用本发明提供的技术方案,可以有效地对Android应用程序进行版权保护,防止其被调试。
附图说明
图1本发明提供的基于IDA通信的Android应用反调试方法的整体流程框图。
图2本发明提供方法中的一般反调试检测过程的流程框图。
图3本发明提供方法中的IDA通信检测过程的流程框图。
图4本发明提供方法中的IDA进程跟踪检测过程的流程框图。
具体实施方式
下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
本发明提供的基于IDA通信的Android应用反调试方法,其前提是在Android应用运行时,要在程序运行时首先运行反调试程序,实现方法是将反调试程序写在so文件中,通过JNI_OnLoad实现加载。
Java Native Interface(JNI)标准是java平台的一部分。由于Android的应用层的类都是以Java写的,这些Java类编译为Dex型式的Bytecode之后,必须靠Dalvik虚拟机(VM:Virtual Machine)来执行。VM在Android平台里,扮演很重要的角色。此外,在执行Java类的过程中,如果Java类需要与C组件沟通时,VM就会去载入C组件,然后让Java的函数顺利地调用到C组件的函数。此时,VM扮演着桥梁的角色,让Java与C组件能通过标准的JNI介面而相互沟通。应用层的Java类是在虚拟机(VM:Vitual Machine)上执行的,而C件不是在VM上执行,那么Java程式又如何要求VM去载入(Load)所指定的C组件呢?可使用下述指令:
System.loadLibrary(*.so的档案名);
当Android的VM(Virtual Machine)执行到System.loadLibrary()函数时,首先会去执行C组件里的JNI_OnLoad()函数。它的用途有二:(一)是告诉VM此C组件使用那一个JNI版本。如果你的*.so档没有提供JNI_OnLoad()函数,VM会默认该*.so档是使用最老的JNI1.1版本。由于新版的JNI做了许多扩充,如果需要使用JNI的新版功能,例如JNI 1.4的java.nio.ByteBuffer,就必须藉由JNI_OnLoad()函数来告知VM。(二)是由于VM执行到System.loadLibrary()函数时,就会立即先呼叫JNI_OnLoad(),所以C组件的开发者可以藉由JNI_OnLoad()来进行C组件内的初期值之设定(Initialization)。
反调试方法的整体的流程是首先进行一般反调试检测,如图1所示,程序运行后的第一步就是进行一般反调试检测,使用通用的检测方法将明显的调试检测出来,检查是否存在模拟器或者时间差。然后如图1所示进行IDA通信检测,针对IDA调试进行检测,判断是否存在IDA调试。最后如图1所示进行IDA进程跟踪检测,判断是否存在IDA跟踪进程。整个过程在Android应用运行时同时循环执行,确保实现反调试功能。本发明提供的基于IDA通信的Android应用反调试方法的流程如图1所示,包括一般反调试检测、IDA通信检测和跟踪检测;具体包括如下步骤,
A.在一般反调试检测时,执行如下操作,具体流程如图2所示:
A1.检测硬件信息,判断Android应用程序是否在模拟器或调试器中,并处理:如果检测到模拟器或调试器信息,则强制将该Android应用退出,不让该应用被调试;反之,则不做操作;
硬件信息具体包括:“/dev/socket/qemud”,“/dev/qemu_pipe”这两个通道;已知QEmu的驱动程序的列表、模拟器上特有文件、设备IDS、手机硬件信息、手机运营商家等;模拟器是指主要透过软件模拟硬件处理器的功能和指令系统的程序使计算机或者其他多媒体平台(掌上电脑,手机)能够运行其他平台上的软件。模拟器是为了开发测试时在PC电脑上对于手机环境进行模拟的一种软件程序。一般地,调试器通过将Android应用放在模拟器中运行来进行调试,也可以在真机中进行调试。一般认为一个开发完成的Android应用是不需要在模拟器中运行的,如果检测到有模拟器,则认为该Android应用可能被调试。
本步骤可以通过检测“/dev/socket/qemud”,“/dev/qemu_pipe”这两个模拟器上特有的文件;检测驱动文件内容、读取文件内容,然后检查已知QEmu的驱动程序的列表;检测设备IDS是不是“000000000000000”;检测手机上的一些硬件信息;检测手机运营商家等信息监测程序是否在真机上运行。如果为真机,则往下运行,否则退出程序,强制将该Android应用退出,不让该应用被调试。
A2.通过检测时间差来检测是否中间有被单步调试执行并处理。
具体通过检测进程的运行时间与设置的时间阈值的时间差来判断是否有被单步调试执行的进程,进行如下处理:通过检测进程的运行时间,与设置的阈值进行比较,判断时间差是否小于设置的阈值,如果小于设置的阈值,则说明不存在被单步调试执行的进程,否则,说明存在被单步调试执行的进程。因此,如果检测到的进程运行时间小于设置的阈值,则往下运行,否则退出程序强制将该Android应用退出,不让该应用被调试。
时间阈值设置与具体的进程有关,不同的进程有不同的运行时间,时间阈值的设置一般要大于1000ms。时间阈值的具体设定要先测量具体进程的正常运行时间,然后根据测量的时间设置阈值,具体的阈值可根据测量的时间凭经验设置,一般可以乘以20倍。
B.在进行IDA通信检测时,执行如下操作,具体流程如图3所示:
B1.检测IDA通信中所使用的默认端口;
具体地,检测IDA通信中所使用的默认端口;读取proc/[pid]/net/tcp文件,tcp文件是一个进程文件,其中[pid]代表该进程的进程号,tcp是文件名,在该文件中存放Android应用程序所有tcp连接的信息,最主要的信息包括local_address(本地地址:端口)、rem_address(远程地址:端口)、st(连接状态)。对该文件进行分析,查看是否存在TCP连接为默认端口(即23946)且状态为“01”即TCP_ESTABLISHED(建立连接状态)。如果没有建立TCP连接,则往下运行,否则退出程序,即强制将该Android应用退出,不让该应用被调试。
B2.检测是否存在符合IDA通信模式的通信模式,判断是否存在IDA调试;
具体地,读取proc/[pid]/net/tcp文件,在该文件中下存放进程的tcp连接的信息,对该文件进行分析,检测该文件的内容,判断是否存在IDA通信模式的TCP连接,根据IDA通信的原理,如果该文件中存在一对已经建立的tcp连接,状态为“01”(建立连接),并且还存在一个端口号与这对连接相同且状态为“0A”(正在监听)的TCP状态行,说明该Android应用正在被IDA进行调试。如果存在,则退出程序,否则继续运行。
C.在IDA进程跟踪检测时,执行如下操作,具体流程如图4所示:
读取Android应用进程信息,根据进程信息进行判断是否存在IDA跟踪进程并处理。
具体地,通过对/proc/[pid]/status文件进行分析。该文件存放进程的状态信息;tracerpid是status文件中的一个属性,其含义为是否有跟踪进程,如果有则显示跟踪进程的进程号,如果没有,则显示0。使用C语言的fopen函数,fopen打开文件来检测自己的进程是否被attach(即是否被跟踪),判断/proc/[pid]/status文件中的tracerpid的值是否为0,如果为0说明没有别的进程在调试这个进程,如果不为0说明有IDA程序正在被调试。如果被调试,则退出程序,强制将该Android应用退出,不让该应用被调试;否则,说明以上的检测方法都没有检测到调试器,则认为该Android应用程序没有被调试,则不用做任何操作,让该Android应用程序继续正常运行。
下面通过实例对本发明做进一步说明。
本实施例对某个Android应用进行反调试检测,在该Android应用中使用了本发明提供的反调试方法。首先将反调试程序写在so文件中,通过JNI_OnLoad实现加载。
本实施例采用C语言编写反调试程序,然后编译成so文件,命名为AntiDebug.so。在Android应用中Android程序启动处添加
static{
System.loadLibrary("AntiDebug");
}
即可将本发明的方法运用到Android应用中。
经检测,加入该反调试程序后对于该应用的功能没有影响。在不进行IDA调试时,该程序正常运行。然后按照IDA调试Android应用的流程,对于该Android应用进行调试。该实施例主要对该反调试方法的核心功能IDA通信检测进行测试。
首先需要在进行进程调试的计算机上启动相应的调试服务器组件。将Windows版本的IDA作为调试客户端(除了IDA作为调试器之外,还可用gdb等其他工具),将真机作为调试服务器,远程调试该Android应用程序,复制android_server文件并赋予其相关的权限到Android系统上执行该文件,android_server进程启动后会监听23946端口。
此操作在PC端实施,IDA调试客户端是运行在PC电脑上的一个具有图形界面的程序。通过pc端的命令,即使用cmd将IDA中提供的android_server文件导入到模拟器或真机中(模拟器或真机就是Android系统,也就是调试服务器),然后通过PC端的命令启动android_server,让其运行。
赋予相关的权限具体是:
adb shell chmod 755/data/data/android_server
即权限为755,也就是rwxr-xr-x;
即第一位7等于4+2+1,rwx,所有者具有读取、写入、执行权限,第二位5等于4+0+1,r–x,同组用户有读取、执行权限、第三位4,也是r–x,其他用户有读取、执行权限。
然后在adb模式下进行tcp端口转发,例如“adb forward tcp:23946tcp:23946”。再然后调试模式启动程序adb shell am start-D-n包名/类名。Android应用会弹出”Waitting for debugger”对话。启动IDA,点击“Debugger->Attach->Remote ArmLinux/Android debugger”进行基本的设置。然后选中要调试的进程,将调试程序attach(即是否被附着、被跟踪)到该进程上去。可以观察到该Android应用退出。说明使用本发明的反调试方法的该Android应用检测到被调试,该反调试方法有效。
对于该调试流程进行分析,对于整体流程中的A步骤:一般反调试检测部分,由于是在真机中进行检测,所以在一般反调试检测部分没有检测到处于IDA调试状态。在一般反调试检测部分,首先检测“/dev/socket/qemud”,“/dev/qemu_pipe”这两个特有的文件;检测驱动文件内容、读取文件内容,然后检查已知QEmu的驱动程序的列表检测设备IDS(即设备默认id)是不是“000000000000000”,如果是,则说明该Android应用程序运行在模拟器中,如果不是,说明该设备在真机中运行;检测手机上的一些硬件信息,如android.os.Build.BOARD主板、android.os.Build.BRAND android系统定制商、android.os.Build.DEVICE设备参数、android.os.Build.MODEL版本、android.os.Build.PRODUCT手机制造商等信息;在本实例中这些信息全部符合正常的运行情况,如android.os.Build.BOARD主板信息不等于"unknown"。同时检测时间差时没有发现时间差超过阈值,因此程序会继续运行。
当进入到核心功能B步骤:进行IDA通信检测时,会检测到存在TCP端口为IDA默认端口23946且状态为“O1”,因此会退出程序。如果在调试过程中改变IDA调试的设置,将端口号随意设置(端口号可不使用默认端口,可设置为其他的端口号),进行调试时,该方法在步骤A时不会变化,当到达步骤B,首先没有检测到TCP端口为默认端口,会继续运行。然后,该程序会检测proc/[pid]/net/tcp文件,发现存在符合IDA通信模式的TCP连接,该程序会退出。
对于步骤C:IDA进程跟踪检测,由于在进行IDA调试时,运行到步骤B就会退出,因此,先将步骤B删除进行测试。本实施例采用删除步骤B(即不执行步骤B)对步骤C进行测试,按照IDA调试流程,步骤A相同,在步骤C中对/proc/[pid]/status这个文件进行分析。用fopen打开文件来检测自己的进程是否被attach,判断/proc/[pid]/status这个文件中的tracerpid的值是否为0,可以发现tracerpid的值不为0,因此检测到有IDA进行调试,程序退出。
需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

Claims (8)

1.一种基于IDA通信的Android应用反调试方法,将反调试程序写在Android应用程序中,通过JNI_OnLoad实现加载,在Android应用程序运行时首先运行所述反调试程序;所述反调试方法包括一般反调试检测、IDA通信检测和进程跟踪检测;具体包括如下步骤,
A.在一般反调试检测时,执行如下操作:
A1.检测硬件信息,判断Android应用程序是否在模拟器或调试器中,当检测到模拟器或调试器信息时,强制退出该Android应用,不让该Android应用被调试;反之,则不做操作,继续执行;
A2.通过检测时间差,判断是否有被单步调试执行的进程;当有被单步调试执行的进程时,往下运行;否则退出程序强制将该Android应用退出,不让该应用被调试;
B.在进行IDA通信检测时,执行如下操作:
B1.检测IDA通信中所使用的端口,读取通信连接进程文件,当状态为建立连接时,往下运行;否则退出应用程序,停止调试;
B2.通过检测通信模式是否符合IDA通信模式,判断是否存在IDA调试;当存在IDA调试时,退出应用程序,停止调试;否则继续运行;
C.在IDA进程跟踪检测时,读取Android应用的进程信息,根据进程信息判断是否存在IDA跟踪进程;当存在被调试的IDA程序时,将该Android应用退出;否则,该Android应用程序继续正常运行。
2.如权利要求1所述基于IDA通信的Android应用反调试方法,其特征是,A1所述硬件信息具体包括:“/dev/socket/qemud”通道、“/dev/qemu_pipe”通道、已知QEmu的驱动程序的列表、模拟器上文件信息、设备IDS信息、手机硬件信息和手机运营商家信息。
3.如权利要求1所述基于IDA通信的Android应用反调试方法,其特征是,A2通过检测时间差来检测是否中间有被单步调试执行并处理,具体是:设置时间阈值,通过检测进程的运行时间与设置的时间阈值的时间差来判断是否有被单步调试执行的进程,当检测到不存在被单步调试执行的进程,继续运行所述Android应用;否则退出程序。
4.如权利要求3所述基于IDA通信的Android应用反调试方法,其特征是,当检测到进程运行时间小于所述设置的时间阈值时,不存在被单步调试执行的进程。
5.如权利要求3所述基于IDA通信的Android应用反调试方法,其特征是,所述时间阈值设置为大于1000ms。
6.如权利要求1所述基于IDA通信的Android应用反调试方法,其特征是,B1所述检测IDA通信中所使用的端口为默认端口23946;所述通信连接为tcp连接,tcp连接信息包括本地地址端口local_address()、远程地址端口rem_address和连接状态st。
7.如权利要求6所述基于IDA通信的Android应用反调试方法,其特征是,B2所述通过检测通信模式是否符合IDA通信模式,判断是否存在IDA调试;具体包括如下过程:
读取proc/[pid]/net/tcp文件,获取该文件中下存放进程的tcp连接的信息;
通过tcp文件连接的状态信息判断是否存在IDA通信模式的TCP连接,进一步获得Android应用是否被IDA调试。
8.如权利要求1所述基于IDA通信的Android应用反调试方法,其特征是,C所述IDA进程跟踪检测,具体地,首先对/proc/[pid]/status文件进行分析,获得status文件的tracerpid属性的值;再根据tracerpid属性的值,得到IDA程序是否被调试。
CN201610603109.3A 2016-07-27 2016-07-27 一种基于IDA通信的Android应用反调试方法 Pending CN106055983A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610603109.3A CN106055983A (zh) 2016-07-27 2016-07-27 一种基于IDA通信的Android应用反调试方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610603109.3A CN106055983A (zh) 2016-07-27 2016-07-27 一种基于IDA通信的Android应用反调试方法

Publications (1)

Publication Number Publication Date
CN106055983A true CN106055983A (zh) 2016-10-26

Family

ID=57417074

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610603109.3A Pending CN106055983A (zh) 2016-07-27 2016-07-27 一种基于IDA通信的Android应用反调试方法

Country Status (1)

Country Link
CN (1) CN106055983A (zh)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106506445A (zh) * 2016-09-21 2017-03-15 深圳市新国都支付技术有限公司 一种apk权限管理方法、装置和系统
CN106778104A (zh) * 2017-01-20 2017-05-31 武汉斗鱼网络科技有限公司 一种应用程序的反调试方法和系统
CN107092828A (zh) * 2017-04-13 2017-08-25 深圳海云安网络安全技术有限公司 一种Android动态调试检测方法
CN107133503A (zh) * 2017-04-26 2017-09-05 北京洋浦伟业科技发展有限公司 一种基于进程状态检测的反调试方法和装置
CN107463836A (zh) * 2017-08-17 2017-12-12 郑州云海信息技术有限公司 一种Windows系统下的综合反调试方法及系统
CN109977633A (zh) * 2019-03-28 2019-07-05 武汉斗鱼鱼乐网络科技有限公司 一种程序保护方法及相关装置
CN109981580A (zh) * 2019-02-25 2019-07-05 浪潮软件集团有限公司 一种防止cmsp被动态跟踪的安全方法和系统
CN110046479A (zh) * 2019-03-21 2019-07-23 腾讯科技(深圳)有限公司 一种基于安卓操作系统的链接库文件反调试方法及装置
CN111062061A (zh) * 2019-12-10 2020-04-24 厦门市美亚柏科信息股份有限公司 一种用于ios系统的安全防护方法和系统
CN111382416A (zh) * 2018-12-27 2020-07-07 北京右划网络科技有限公司 应用程序的运行识别方法、装置,终端设备及存储介质
CN112199642A (zh) * 2019-07-08 2021-01-08 北京智游网安科技有限公司 一种安卓系统反调试的检测方法、移动终端及存储介质
CN112199298A (zh) * 2020-11-02 2021-01-08 杭州安恒信息技术股份有限公司 一种单步调试的检测方法、装置和计算机可读存储介质
US11409635B2 (en) 2019-08-23 2022-08-09 Raytheon Company Hacker-resistant anti-debug system

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
JLTXGCY: "Android native反调试方式及使用IDA绕过反调试", 《CSDN,HTTPS://BLOG.CSDN.NET/JLTXGCY/ARTICLE/DETAILS/50598670》 *
TRAP0D: "一个android反调试的学习", 《CSDN,HTTPS://BLOG.CSDN.NET/TRAP0D/ARTICLE/DETAILS/45697607》 *
太尼玛菜了: "Android Native一处反调试", 《CNBLOGS,URL:HTTPS://WWW.CNBLOGS.COM/DACAINIAO/P/5139880.HTML》 *
渔村安全: "Android应用方法隐藏及反调试技术浅析", 《FREEBUF互联网安全新媒体平台,URL:HTTP://WWW.FREEBUF.COM/ARTICLES/TERMINAL/80996.HTML》 *

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106506445A (zh) * 2016-09-21 2017-03-15 深圳市新国都支付技术有限公司 一种apk权限管理方法、装置和系统
CN106778104B (zh) * 2017-01-20 2019-10-25 武汉斗鱼网络科技有限公司 一种应用程序的反调试方法和系统
CN106778104A (zh) * 2017-01-20 2017-05-31 武汉斗鱼网络科技有限公司 一种应用程序的反调试方法和系统
CN107092828A (zh) * 2017-04-13 2017-08-25 深圳海云安网络安全技术有限公司 一种Android动态调试检测方法
CN107133503A (zh) * 2017-04-26 2017-09-05 北京洋浦伟业科技发展有限公司 一种基于进程状态检测的反调试方法和装置
CN107463836A (zh) * 2017-08-17 2017-12-12 郑州云海信息技术有限公司 一种Windows系统下的综合反调试方法及系统
CN111382416A (zh) * 2018-12-27 2020-07-07 北京右划网络科技有限公司 应用程序的运行识别方法、装置,终端设备及存储介质
CN109981580A (zh) * 2019-02-25 2019-07-05 浪潮软件集团有限公司 一种防止cmsp被动态跟踪的安全方法和系统
CN110046479A (zh) * 2019-03-21 2019-07-23 腾讯科技(深圳)有限公司 一种基于安卓操作系统的链接库文件反调试方法及装置
CN109977633A (zh) * 2019-03-28 2019-07-05 武汉斗鱼鱼乐网络科技有限公司 一种程序保护方法及相关装置
CN112199642A (zh) * 2019-07-08 2021-01-08 北京智游网安科技有限公司 一种安卓系统反调试的检测方法、移动终端及存储介质
US11409635B2 (en) 2019-08-23 2022-08-09 Raytheon Company Hacker-resistant anti-debug system
CN111062061A (zh) * 2019-12-10 2020-04-24 厦门市美亚柏科信息股份有限公司 一种用于ios系统的安全防护方法和系统
CN111062061B (zh) * 2019-12-10 2023-01-24 厦门市美亚柏科信息股份有限公司 一种用于ios系统的安全防护方法和系统
CN112199298A (zh) * 2020-11-02 2021-01-08 杭州安恒信息技术股份有限公司 一种单步调试的检测方法、装置和计算机可读存储介质
CN112199298B (zh) * 2020-11-02 2022-05-13 杭州安恒信息技术股份有限公司 一种单步调试的检测方法、装置和计算机可读存储介质

Similar Documents

Publication Publication Date Title
CN106055983A (zh) 一种基于IDA通信的Android应用反调试方法
Kong et al. Automated testing of android apps: A systematic literature review
Ravindranath et al. Automatic and scalable fault detection for mobile applications
Wei et al. Taming android fragmentation: Characterizing and detecting compatibility issues for android apps
Zaddach et al. AVATAR: A Framework to Support Dynamic Security Analysis of Embedded Systems' Firmwares.
CN103729595B (zh) 一种Android应用程序隐私数据泄露离线检测方法
US20070079288A1 (en) System and method for capturing filtered execution history of executable program code
JP2008547070A (ja) アプリケーションを修理するための方法及びシステム
Johansson et al. Error propagation profiling of operating systems
KR101290565B1 (ko) 안드로이드 앱의 행위정보 동적분석 에뮬레이터 및 이를 포함하는 행위정보 동적분석 시스템, 그리고 안드로이드 앱의 행위정보 동적분석 프로그램이 기록된 컴퓨터 판독 가능한 기록매체
CN107102885A (zh) 利用adb方式检测安卓模拟器的方法及装置
Zhu et al. Detecting virtualization specific vulnerabilities in cloud computing environment
Jeong et al. Fifa: A kernel-level fault injection framework for arm-based embedded linux system
Patrick-Evans et al. {POTUS}: Probing {Off-The-Shelf}{USB} Drivers with Symbolic Fault Injection
Tang et al. Towards dynamically monitoring android applications on non-rooted devices in the wild
Yu et al. SimRacer: An automated framework to support testing for process-level races
Eisele et al. Fuzzing Embedded Systems Using Debug Interfaces
Zaidenberg et al. Detecting kernel vulnerabilities during the development phase
Griebe et al. Towards automated UI-tests for sensor-based mobile applications
Chyłek et al. QEMU-based fault injection framework
Weng et al. Argus: Debugging performance issues in modern desktop applications with annotated causal tracing
Yu et al. An automated framework to support testing for process‐level race conditions
Yeh et al. Covdroid: A black-box testing coverage system for android
Zhang et al. Firmware fuzzing: The state of the art
Wang et al. Detecting data races in interrupt-driven programs based on static analysis and dynamic simulation

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20161026