CN110457209A - 用于调试应用的方法和系统 - Google Patents

用于调试应用的方法和系统 Download PDF

Info

Publication number
CN110457209A
CN110457209A CN201910640566.3A CN201910640566A CN110457209A CN 110457209 A CN110457209 A CN 110457209A CN 201910640566 A CN201910640566 A CN 201910640566A CN 110457209 A CN110457209 A CN 110457209A
Authority
CN
China
Prior art keywords
data
tune
obscuring
variable
class
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
CN201910640566.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.)
Advanced New Technologies Co Ltd
Advantageous New Technologies Co Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201910640566.3A priority Critical patent/CN110457209A/zh
Publication of CN110457209A publication Critical patent/CN110457209A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请涉及一种用于调试应用的方法,所述应用在构建时被执行代码混淆,所述方法包括:经由调试器接收与应用的调试相关联的指令;基于所述指令生成第一调试数据,所述第一调试数据是未经混淆的;执行第一转换以自动将所述第一调试数据转换为经混淆的第一调试数据;将所述经混淆的第一调试数据传送至目标Java虚拟机;以及在所述目标Java虚拟机内基于所述经混淆的第一调试数据对所述应用执行调试。本申请还涉及用于调试应用的系统。本申请能够提高调试经混淆应用的效率。

Description

用于调试应用的方法和系统
技术领域
本说明书的一个或多个实施例涉及用于调试应用的方法和系统。
背景技术
目前,在构建应用(尤其是Android应用)时,经常会执行混淆。执行混淆能够将移动应用的源代码中的类、方法、变量等的名称变换为无意义短名称,从而增加逆向工程的难度,保护源代码。
尤其是,当多个开发者合作开发移动应用时,为了避免其中一个开发者获得移动应用的全部源代码,更加希望在构建移动应用时执行混淆。
然而,执行混淆可能增加调试难度。在调试被混淆过的应用时,难以直接执行单步调试,只能通过打印日志并重新构建应用等复杂的手段来定位问题,从而导致较低的调试效率。因此,需要一种用于调试经混淆应用的自动化方案。
发明内容
为了克服现有技术的缺陷,本说明书的一个或多个实施例提供了用于调试经混淆应用的技术方案。
本说明书的一个或多个实施例通过以下技术方案来实现其上述目的。
在一个方面中,公开了一种用于调试应用的方法,其特征在于,所述应用在构建时被执行代码混淆,所述方法包括:经由调试器接收与应用的调试相关联的指令;基于所述指令生成第一调试数据,所述第一调试数据是未经混淆的;执行第一转换以自动将所述第一调试数据转换为经混淆的第一调试数据;将所述经混淆的第一调试数据传送至目标Java虚拟机;以及在所述目标Java虚拟机内基于所述经混淆的第一调试数据对所述应用执行调试。
优选地,所述方法进一步包括:在对所述应用执行调试期间由所述目标Java虚拟机生成第二调试数据,所述第二调试数据是经混淆的;执行第二转换以自动将所述第二调试数据转换为未经混淆的第二调试数据;以及将所述未经混淆的第二调试数据传送至所述调试器。
优选地,所述调试器位于所述应用的开发者的本地机器内,而所述目标Java虚拟机位于设备和/或模拟器内。
优选地,所述调试是借助adb执行的,且所述第一转换和所述第二转换是通过修改所述adb的源代码实现的。
优选地,所述代码混淆包括将所述应用的源代码中的类、方法和/或变量的名称执行替换。
优选地,所述第一转换和所述第二转换是基于映射文件执行的,所述映射文件指定混淆前后的类、方法和/或变量的映射关系。
优选地,执行所述第一转换包括:自动标识所述第一调试数据中的未经混淆的变量、方法和/或类的名称;自动基于所述映射文件确定与所标识的未经混淆的变量、方法和/或类的名称对应的经混淆的变量、方法和/或类的名称;以及自动将所述未经混淆的变量、方法和/或类的名称转换为所述经混淆的变量、方法和/或类的名称,从而生成所述经混淆的第一调试数据。
优选地,执行所述第二转换包括:自动标识所述第二调试数据中的经混淆的变量、方法和/或类的名称;自动基于所述映射文件确定与所标识的经混淆的变量、方法和/或类的名称对应的未经混淆的变量、方法和/或类的名称;以及自动将所述经混淆的变量、方法和/或类的名称转换为所述未经混淆的变量、方法和/或类的名称,从而生成所述未经混淆的第二调试数据。
优选地,所述映射文件是在构建所述应用时生成的。
优选地,所述应用是由多个开发者合作开发的。
优选地,所述多个开发者中的一个或多个开发者不具有访问所述应用的全部源代码的权限。
优选地,所述映射文件是从执行构建的开发者处获得的。
在另一方面中,公开了一种用于调试应用的系统,其特征在于,所述应用在构建时被执行代码混淆,所述系统包括:调试器,所述调试器用于:接收与应用的调试相关联的指令;以及基于所述指令生成第一调试数据,所述第一调试数据是未经混淆的;混淆调试装置,所述混淆调试装置用于:接收所述第一调试数据;以及执行第一转换以自动将所述第一调试数据转换为经混淆的第一调试数据;以及目标Java虚拟机,所述目标Java虚拟机用于:接收所述经混淆的第一调试数据;将所述经混淆的第一调试数据传送至目标Java虚拟机;以及在所述目标Java虚拟机内基于所述经混淆的第一调试数据对所述应用执行调试。
优选地,所述目标Java虚拟机用于在对所述应用执行调试期间生成第二调试数据,所述第二调试数据是经混淆的;以及所述混淆调试装置用于执行第二转换以自动将所述第二调试数据转换为未经混淆的第二调试数据并将所述未经混淆的第二调试数据传送至所述调试器。
优选地,所述调试器位于所述应用的开发者的本地机器内,而所述目标Java虚拟机位于设备和/或模拟器内。
优选地,所述系统还包括adb,所述调试是借助adb执行的,且所述混淆调试装置是通过修改所述adb的源代码实现的。
优选地,所述adb包括adb客户端、adb服务器和adb守护程序,且所述混淆调试装置位于所述adb客户端、adb服务器和adb守护程序中的一者处。
优选地,所述第一转换和所述第二转换是基于映射文件执行的,所述映射文件指定混淆前后的类、方法和/或变量的映射关系。
优选地,所述混淆调试装置用于:自动标识所述第一调试数据中的未经混淆的变量、方法和/或类的名称;自动基于所述映射文件确定与所标识的未经混淆的变量、方法和/或类的名称对应的经混淆的变量、方法和/或类的名称;以及自动将所述未经混淆的变量、方法和/或类的名称转换为所述经混淆的变量、方法和/或类的名称,从而生成所述经混淆的第一调试数据。
优选地,所述混淆调试装置用于:自动标识所述第二调试数据中的经混淆的变量、方法和/或类的名称;自动基于所述映射文件确定与所标识的经混淆的变量、方法和/或类的名称对应的未经混淆的变量、方法和/或类的名称;以及自动将所述经混淆的变量、方法和/或类的名称转换为所述未经混淆的变量、方法和/或类的名称,从而生成所述未经混淆的第二调试数据
在又一方面中,公开了一种存储指令的计算机可读存储介质,所述指令当被计算机执行时,使所述计算机执行上述方法。
在再一方面中,公开了一种系统,所述系统包括用于执行上述方法的装置。
与现有技术相比,本说明书的一个或多个实施例可提高调试经混淆的应用的效率。
附图说明
以上发明内容以及下面的具体实施方式在结合附图阅读时会得到更好的理解。需要说明的是,附图仅作为所请求保护的发明的示例。在附图中,相同的附图标记代表相同或类似的元素。
图1示出开发工具的界面图。
图2示出用于对应用执行调试的系统的示意图。
图3示出根据本说明书实施例的用于对应用执行调试的系统的示意图。
图4示出根据本说明书另一实施例的用于对应用执行调试的系统的示意图。
图5示出根据本说明书另一实施例的用于对应用执行调试的系统的示意图。
图6示出根据本说明书实施例的用于调试应用的方法的流程图。
具体实施方式
以下具体实施方式的内容足以使任何本领域技术人员了解本说明书的一个或多个实施例的技术内容并据以实施,且根据本说明书所揭露的说明书、权利要求及附图,本领域技术人员可轻易地理解本说明书的一个或多个实施例相关的目的及优点。
在开发应用时,通常将使用开发工具。下面以使用Android Studio开发工具来开发Android应用为例来介绍。Android Studio是由谷歌(Google)公司提供的用于开发Android应用的集成开发环境。但应领会,本说明书实施例不限于任何特定开发工具和任何特定类型的应用。
图1示出了可用于开发和调试应用的开发工具100的界面图。如图1所示,开发工具100可包括用于编辑源代码的代码编辑器102、用于构建应用的构建器(未示出)、以及用于调试应用的调试器104。其他开发工具,例如Eclipse等,也具有类似功能。
其它开发工具可只包括代码编辑器、构建器和调试器中的一者或多者。
开发者可使用开发工具100的代码编辑器102来编辑源代码。在编辑源代码时,开发者会使用到类、方法、变量等。通常,开发者倾向于使用特定命名规则来对类、方法、变量等进行命名,以使得类、方法、变量等的名称有助于开发者理解所述类、方法、变量的含义。
在一些情况下,多个开发者可能合作开发源代码。在此情况下,每个开发者可能只负责编辑源代码的一部分。为了实现避免代码泄露等目标,通常并非所有开发者都有权限访问全部源代码,即其中一个或多个开发者不具有访问全部源代码的权限。例如,可能只有应用的项目管理者才有权限查看该应用的全部源代码,而其他开发者可能只能查看部分源代码,通常是自己负责编辑的代码部分。替代地,可能一个或多个其他开发者也可查看全部源代码。
开发者可使用开发工具100的构建器(未示出)来从源代码构建应用。在多个开发者合作开发应用的情况下,可能并非所有开发者都可构建应用。例如,可能只有应用的项目管理者才能够构建应用。替代地,可能一个或多个其他开发者也可构建应用。
在构建应用时,开发者可选择对源代码执行混淆(obfuscation)。在软件开发领域中,混淆是有意地将源代码转换为功能上等价但难以阅读和理解的形式的行为。具体而言,混淆可将代码中的各种元素(如类、方法、变量等)的名称修改为无意义的名称。在一种常见示例中,类、方法、变量等的名称可被转换为单个字母。在另一种示例中,类、方法、变量等的名称可被转换为简短的无意义字母组合。在又一种示例中,类、方法、变量等的名称可被转换为符号(例如“_”等)或符合组合。
代码混淆的示例如下:
其中“->”符号前的元素被转换为该符号后的元素。可以看出,这样的转换使得查看源代码的人难以根据名称猜测其含义,从而降低了源代码的可读性。
从上面的示例也可以看出,并非所有类、方法、变量都被混淆(例如上面的示例中的androidx.appcompat.app.AlertController),而是可由开发者定制。例如,开发者可修改配置文件来自定义混淆规则。
执行混淆可以加大对应用执行逆向工程的难度,从而能够保护源代码。特别是,在多个开发者共同开发应用的情况下,混淆可避免一个开发者获得可读性良好的全部源代码。因此,在多个开发者共同开发应用,且希望尽可能地保护应用的源代码的情况下,通常在构建应用时将对源代码执行混淆。
混淆还具有一些其它优点,例如可减小应用的大小,因为较长的名称被较短的名称取代。
在Android Studio中,提供了ProGuard工具,该工具可被用来执行代码混淆。上面的代码混淆示例就是用ProGuard工具执行混淆的示例。使用ProGuard工具执行混淆可通过编辑配置文件和源代码等来实现。如上所述,通过配置,开发者还可自定义混淆规则。例如,可指定不混淆某个类、不混淆某个类的特定方法等等,在此不再赘述。本领域人员知晓如何使用ProGuard工具来执行混淆,其具体细节在此不再详述。
在执行混淆时,可生成映射文件。映射文件可指定混淆前后的类、方法、变量的映射关系,例如在上面的示例中示出的转换关系。在Android Studio的示例中,该映射文件的名称通常为mapping.txt。例如,mapping.txt可在相应应用目录下的/build/outputs/proguard/release/目录或/build/outputs/mapping/release/目录中找到。通常,只有执行构建的开发者才能够访问映射文件。在一些示例中,能够访问映射文件的开发者可选择与其他开发者共享映射文件。
除了混淆之外,ProGuard工具还可执行其它操作,例如压缩(Shrink)、优化(Optimize)和预检(Preverify)。其中压缩操作可检测并移除代码中无用的类、方法、变量、和特性(Attribute)。优化操作可分析并优化字节码。预检操作可对处理后的代码进行预检。这些操作的具体细节在此也不再详述。
此外,本领域技术人员还知晓在使用其它开发工具时如何执行混淆,在此不再详述。
开发者可使用开发工具100的调试器104来执行调试。
在调试开始时,开发者可选择要在其上执行应用调试的设备或模拟器。在开发者想要在设备上执行应用调试的情况下,开发者可经由USB接口将设备连接到开发机器上。在开发者想要在模拟器上执行应用调试的情况下,开发者可通过创建新虚拟设备来使用模拟器。
在选择了要在其上执行应用调试的设备或模拟器后,开发工具将构建应用的APK(Android应用包),用调试密钥来签署该APK,并经由该APK将应用安装在所选的设备或模拟器上,以便执行随后的调试。
在对Android应用执行调试时,通常会使用到adb(Android debug bridge)。参见图2,其示出了用于对应用执行调试的系统200的示意图。系统200可包括调试器204。开发者可经由调试器204输入调试指令,以及经由调试器204来查看相应的调试数据,例如应用的状态数据。调试器204可位于开发者的本地机器104中。调试器204例如可以是如图1中所示的调试器104,其可与开发工具相连接或被集成到开发工具中。
系统200还可包括目标Java虚拟机214,待调试的应用可在目标Java虚拟机214中执行调试运行,执行调试指令并返回相应的调试数据。通常,目标Java虚拟机214可在该设备和/或模拟器210上运行。
调试可借助adb来执行。adb是一种允许开发者(调试器)与设备和/或模拟器(目标Java虚拟机)通信的工具。使用adb可在设备上执行各种操作,例如可通过adb来安装应用,也可通过adb来调试应用。开发者或其他用户可使用adb来在设备(或模拟器)上执行各种命令。adb通常具有客户端-服务器架构,其可包括以下三个组件:
adb客户端206,其运行在开发者的本地机器202上。Adb客户端206可与调试器204连接或实现在调试器204内。调试器204可从开发者接收调试操作指令,生成第一调试数据,并经由adb客户端206将第一调试数据传送到adb服务器208。本说明书中所称的调试数据,是指与调试操作相关联的数据。第一调试数据是由调试器传送至目标Java虚拟机的调试数据。通常,Adb客户端206可以被集成在开发工具的调试器204内。
adb服务器208,其通常作为后台进程运行在开发者的本地机器202上。adb服务器208可接收来自adb客户端206的第一调试数据,并将第一调试数据传送至adb守护程序212。adb服务器208还可选择用于在其上执行调试的设备和/或模拟器。例如,可存在多个设备和/或模拟器210,开发者可经由adb服务器208来选择在哪一个或多个设备和/或模拟器210上执行调试。
adb守护程序(adbd)212,其通常作为后台进程运行在设备和/或模拟器210(例如以调试该设备或模拟器上的应用)上。adb守护程序212可接收来自adb服务器的第一调试数据,并将其传送至设备和/或模拟器210上运行的目标Java虚拟机214,由该目标Java虚拟机214基于该第一调试数据在设备和/或模拟器212上执行调试。在应用的调试运行过程中,生成第二调试数据。第二调试数据是由目标Java虚拟机传送至调试器的调试数据。第二调试数据将经由adb守护程序212、adb服务器208和adb客户端206被传送至调试器204,以供开发者查看。
adb守护程序212与adb服务器208之间的交互可以用TCP连接或者USB连接来实现。当调试设备上的应用时,adb守护程序运行在设备上,此时通常可使用USB接口来在开发者的本地机器上的adb服务器和设备上的adb守护程序之间建立连接。当调试模拟器上的应用时,adb守护程序运行在模拟器上,此时通常可使用TCP协议来在开发者的本地机器上的adb服务器和模拟器上的adb守护程序之间建立连接。
开发者在使用adb调试Java应用时,可使用JDWP协议。JDWP是Java Debug WireProtocol的缩写,其定义了调试器(debugger)和被调试的目标Java虚拟机(target JVM)之间的通信协议。目标Java虚拟机中运行着想要调试的应用,调试器和目标Java虚拟机分别在各自的进程中运行,它们之间采用JDWP协议进行通信。关于通过adb使用JDWP协议来调试Java虚拟机中运行的应用的更多细节,在此不再赘述。
JDWP有两种基本的包(packet)类型:命令包(command packet)和回复包(replypacket)。
调试器和目标Java虚拟机都有可能发送命令包。调试器通过发送命令包获取目标Java虚拟机的信息以及控制程序的执行。目标Java虚拟机通过发送命令包通知调试器特定事件的发生,如到达断点或是产生异常。也就是说,从调试器传送到目标Java虚拟机的第一调试数据和从目标Java虚拟机传送到调试器的第二调试数据都可包括命令包。
回复包是用来回复命令包该命令是否执行成功,如果成功,则回复包还有可能包含命令包请求的数据,比如当前的线程信息或者变量的值。从目标Java虚拟机发送的事件消息通常是不需要回复的,因此通常不存在从调试器传送到目标Java虚拟机的回复包。命令包和回复包中均可包括应用的源代码中的变量、方法和/或类。
可以看出,从调试器传送到目标Java虚拟机的第一调试数据通常仅包括命令包,所述命令包中通常包括对应用执行调试的调试指令,例如请求一个对象成员变量值的指令等;从目标Java虚拟机传送到调试器的第二调试数据可包括命令包和回复包两者,所述回复包中例如可包含所请求的成员变量的值。
在执行调试过程中,开发者可通过命令行或开发工具的编辑器来发出调试指令,例如设置断点、取消断点、查看变量、设置变量、暂停执行、继续执行等等。调试指令可对应于JDWP协议中的调试码。JDWP协议中定义了上百个调试码。基于这些调试指令,可生成从调试器传送到目标Java虚拟机的第一调试数据,以便指导目标Java虚拟机执行相应的调试操作。
第一调试数据可经由adb客户端和adb服务器传送至设备中的adb守护程序。adb守护程序在接收到第一调试数据之后可与目标Java虚拟机交互以传递第一调试数据。
在想要调试的应用没有经过混淆的情况下,目标Java虚拟机上运行的应用中的变量、方法和/或类是未经混淆的。在此情况下,由于目标Java虚拟机接收到第一调试数据中的变量、方法和/或类也是未经混淆的,所以目标Java虚拟机可正确地解读第一调试数据。基于该第一调试数据,目标Java虚拟机可执行调试运行,生成第二调试数据并将第二调试数据经由adb传送至调试器。通常,第二调试数据也可包括类、方法和变量。在许多情况下,所述第二调试数据可指示当前应用的状态,例如变量的值。在想要调试的应用没有经过混淆的情况下,所生成的第二调试数据中的类、方法和变量也是未经混淆的。调试器在接收到第二调试数据之后可显示未经调试的类、方法和变量的名称以供开发者查看。因此,在此情况下,调试可正常进行。
在想要调试的应用经过混淆的情况下,目标Java虚拟机上运行的应用中的变量、方法和/或类是经混淆的。在此情况下,由于目标Java虚拟机接收到第一调试数据中的变量、方法和/或类也是未经混淆的,所以目标Java虚拟机无法正确地解读第一调试数据,从而无法正常地执行调试。
为了解决上述问题,本说明书的实施例提供了用于调试应用的系统和方法。
在本说明书的实施例中,对adb进行了修改,添加了混淆调试装置。
参见图3,其示出了根据本说明书实施例的用于对应用执行调试的系统300的示意图。
系统300与系统200大致相同,其区别在于,系统300还可包括混淆调试装置316。在图3的示例中,混淆调试装置316可位于adb服务器308内。例如,混淆调试装置316可以是通过修改adb服务器308实现的。混淆调试装置316可允许对在构建时经混淆的应用执行调试。
由于adb的代码是开源的,因此可以通过修改adb代码来添加或定制功能。例如,通过修改adb服务器中与adb守护程序通信的接口,可以拦截adb服务器308和adb守护程序212之间交换的调试数据并对该调试数据进行转换。实际上,可修改adb服务器中的任何部分(而无需是接口),以便拦截调试数据并进行转换。
混淆调试装置316可获得与该经代码混淆的应用相对应的映射文件,例如上文所述的mapping.txt。对于执行构建的开发者,可从该应用的目录中直接读取该映射文件。例如,执行构建的开发者可从相应应用目录下的/build/outputs/proguard/release/目录或/build/outputs/mapping/release/目录中找到mapping.txt文件。所获得的混淆文件可被读取到内存中,或可被保存到存储器中。
在多个开发者合作开发应用的情况下,可能并非所有开发者都能访问映射文件。例如,没有执行构建或者没有权限执行构建的开发者可能在其本地机器上没有映射文件。此时,没有映射文件的开发者可从执行构建的开发者处获得映射文件,以便执行后续的调试操作。
在一些优选示例中,可指定哪些开发者有权限获得映射文件。例如,可为不同身份的开发者指定不同的权限,只有具有映射文件访问权限的开发者才能够获得映射文件。通过这种方式,能够进一步增加应用的全部源代码的安全性。
混淆调试装置316可以接收来自调试器的第一调试数据。该第一调试数据可以是基于开发者执行的调试操作生成的。例如,如上所述,开发者可通过开发工具的代码编辑器在源代码中设置一个或多个断点。通常,该第一调试数据是未经混淆的。
在接收到第一调试数据后,混淆调试装置316可基于映射文件来对第一调试数据执行第一转换以生成经混淆第一调试数据。
具体而言,混淆调试装置316可自动标识第一调试数据中的未经混淆的变量、方法和/或类的名称。例如,假设在第一调试数据中标识出mContext、mListItemLayout等变量名。
随后,混淆调试装置316可自动基于映射文件确定与所标识的未经混淆的变量、方法和/或类的名称对应的经混淆的变量、方法和/或类的名称。例如,这可通过以下方式实现:混淆调试装置316可在映射文件中检索所标识的未经混淆的变量、方法和/或类的名称,随后可确定映射文件中该未经混淆的变量、方法和/或类的名称所映射到的经混淆的变量、方法和/或类的名称。例如,可确定第一调试数据中的mContext对应于a,mListItemLayout对应于O,等等。
接着,混淆调试装置316可执行第一转换以自动将该未经混淆的变量、方法和/或类的名称转换为该经混淆的变量、方法和/或类的名称,从而生成经混淆第一调试数据。可以理解,经混淆第一调试数据中包括经混淆的变量、方法和/或类的名称。例如,可将第一调试数据中的mContext替换为a,将mListItemLayout替换为O,等等。
对于未包括在映射文件中的未经混淆的变量、方法和/或类的名称,可能是由开发者指定不对其执行混淆的变量、方法和/或类,可不对其进行上述第一转换。例如,上文中的androidx.appcompat.app.AlertController可不被替换。
在经执行第一转换之后,混淆调试装置316可将经混淆第一调试数据传送至设备或模拟器210上的adb守护程序212。
Adb守护程序212在接收到经混淆第一调试数据之后,可正确解读所述第一调试数据,并指示目标Java虚拟机执行该经混淆第一调试数据中指示的调试指令。可以领会,在在构建应用时执行了混淆的情况下,由于此时adb守护程序212接收到的是经混淆第一调试数据,即该经混淆第一调试数据中的变量、方法和/或类的名称为经混淆的变量、方法和/或类的名称,因此adb守护程序可正确地解读该经混淆第一调试数据中的调试指令并指导目标Java虚拟机执行调试指令。例如,由于经混淆第一调试数据中的断点位置也是经混淆的,所以adb守护程序可正确地确定经混淆代码中的断点的位置。
在对应用执行调试运行的过程中,可生成第二调试数据。该第二调试数据可包括如上所述的命令包或回复包。例如,当安装在设备或模拟器210上的应用在执行到断点处时,可暂停执行并将应用状态数据作为第二调试数据传送给混淆调试装置316。可以领会,在构建应用时执行了混淆的情况下,该应用所生成的应用状态数据中包括的变量、方法和/或类的名称为经混淆的变量、方法和/或类的名称。
在接收到应用状态数据后,混淆调试装置316可自动基于映射文件来对第二调试数据执行第二转换以生成未经混淆的第二调试数据。
具体而言,混淆调试装置316可自动标识第二调试数据中的经混淆的变量、方法和/或类的名称。例如,假设在第二调试数据中标识出a、O等变量名。
随后,混淆调试装置316可自动基于映射文件确定与所标识的经混淆的变量、方法和/或类的名称对应的未经混淆的变量、方法和/或类的名称。例如,这可通过以下方式实现:混淆调试装置316可在映射文件中检索所标识的经混淆的变量、方法和/或类的名称,随后可确定映射文件中该经混淆的变量、方法和/或类的名称所映射到的未经混淆的变量、方法和/或类的名称。例如,可确定第二调试数据中的a对应于mContext,O对应于mListItemLayout,等等。
接着,混淆调试装置316可自动执行第二转换以将该经混淆的变量、方法和/或类的名称转换为该未经混淆的变量、方法和/或类的名称,从而生成未经混淆第二调试数据。例如,可将第二调试数据中的变量a替换为mContext,将变量O替换为mListItemLayout,等等。
在执行第二转换之后,混淆调试装置316可自动将该未经混淆的第二调试数据传送至adb服务器。随后,adb服务器可将该未经混淆的第二调试数据传送至adb客户端,从而可在开发工具的调试窗口中显示该未经混淆的第二调试数据。
通过以上方式,能够自动实现对经混淆的应用的调试,由此提高了调试效率。
尽管在图3中示出混淆调试装置是在adb服务器处实现的。然而,替换地,混淆调试装置可在链路的其它部分实现。
具体而言,参见图4,其示出了根据本说明书另一实施例的用于对应用执行调试的系统400的示意图。在图4的示例中,混淆调试装置416被实现在adb客户端406处而不是adb服务器208处。例如,可对adb客户端406中与调试器204进行数据交互的接口做出修改,或者可对adb客户端406中与adb服务器208进行数据交互的接口做出修改,以实现调试数据的拦截和转换。
参见图5,其示出了根据本说明书另一实施例的用于对应用执行调试的系统500的示意图。在图5的示例中,混淆调试装置516被实现在adb守护程序512处而不是adb服务器208处。例如,可对adb守护程序512中与目标Java虚拟机214进行数据交互的接口做出修改,或者可对adb守护程序512中与adb服务器208进行数据交互的接口做出修改,以实现调试数据的拦截和转换。混淆调试装置416和混淆调试装置516的具体实现可参考混淆调试装置316。
实际上,可修改调试器到目标Java虚拟机的链路上的任何一处来实现调试数据的拦截和转换。也就是说,本说明书的混淆调试装置316可实现在调试器204到目标Java虚拟机214的链路上的任何一处,而不限于任何特定位置。
参见图6,其示出了根据本说明书实施例的用于调试应用的方法600的流程图。所述应用在构建时被执行代码混淆。所述代码混淆包括将所述应用的源代码中的类、方法和/或变量的名称执行替换。在一些示例中,所述应用是由多个开发者合作开发的。优选地,所述多个开发者中的一个或多个开发者不具有访问所述应用的全部源代码的权限。
方法600可包括:在步骤602,可经由调试器接收与应用的调试相关联的指令。所述调试器可位于所述应用的开发者的本地机器内。所述指令可以是从开发者接收的。
方法600还可包括:在步骤604,基于所述指令生成第一调试数据,所述第一调试数据是未经混淆的。
方法600还可包括:在步骤606,执行第一转换以自动将所述第一调试数据转换为经混淆的第一调试数据。所述第一转换可以是基于映射文件执行的,所述映射文件指定混淆前后的类、方法和/或变量的映射关系。所述映射文件可以是在构建所述应用时生成的。优选地,所述映射文件是从执行构建的开发者处获得的。
具体而言,执行所述第一转换可包括:自动标识所述第一调试数据中的未经混淆的变量、方法和/或类的名称;自动基于所述映射文件确定与所标识的未经混淆的变量、方法和/或类的名称对应的经混淆的变量、方法和/或类的名称;以及自动将所述未经混淆的变量、方法和/或类的名称转换为所述经混淆的变量、方法和/或类的名称,从而生成所述经混淆的第一调试数据。
方法600还可包括:在步骤608,可将所述经混淆的第一调试数据传送至目标Java虚拟机。所述目标Java虚拟机可位于设备和/或模拟器内。所述应用可在所述目标Java虚拟机内执行调试运行。
方法600还可包括:在步骤610,可在所述目标Java虚拟机内基于所述经混淆的第一调试数据对所述应用执行调试。
上述步骤涉及如何向目标Java虚拟机传送经混淆的调试数据以便对经混淆的应用执行调试,且可独立构成方案。
方法600还可包括:可选地,在步骤612,可在对所述应用执行调试期间由所述目标Java虚拟机生成第二调试数据,所述第二调试数据是经混淆的。
方法600还可包括:可选地,在步骤614,可执行第二转换以自动将所述第二调试数据转换为未经混淆的第二调试数据。所述第二转换也可以是基于映射文件执行的。
具体而言,执行所述第二转换可包括:自动标识所述第二调试数据中的经混淆的变量、方法和/或类的名称;基于所述映射文件确定与所标识的经混淆的变量、方法和/或类的名称对应的未经混淆的变量、方法和/或类的名称;以及将所述经混淆的变量、方法和/或类的名称转换为所述未经混淆的变量、方法和/或类的名称,从而生成所述未经混淆的第二调试数据。
方法600还可包括:可选地,在步骤616,可将所述未经混淆的第二调试数据传送至所述调试器。
上述步骤涉及如何从目标Java虚拟机接收未经混淆的调试数据以便开发者查看。
而且,本申请还公开了一种包括存储于其上的计算机可执行指令的计算机可读存储介质,所述计算机可执行指令在被处理器执行时使得所述处理器执行本文所述的各实施例的方法。
此外,本申请还公开了一种系统,该系统包括用于实现本文所述的各实施例的方法的装置。
可以理解,根据本说明书的一个或多个实施例的方法可以用软件、固件或其组合来实现。
应该理解,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置和系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
应该理解,上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
应该理解,本文用单数形式描述或者在附图中仅显示一个的元件并不代表将该元件的数量限于一个。此外,本文中被描述或示出为分开的模块或元件可被组合为单个模块或元件,且本文中被描述或示出为单个的模块或元件可被拆分为多个模块或元件。
还应理解,本文采用的术语和表述方式只是用于描述,本说明书的一个或多个实施例并不应局限于这些术语和表述。使用这些术语和表述并不意味着排除任何示意和描述(或其中部分)的等效特征,应认识到可能存在的各种修改也应包含在权利要求范围内。其他修改、变化和替换也可能存在。相应的,权利要求应视为覆盖所有这些等效物。
同样,需要指出的是,虽然已参照当前的具体实施例来描述,但是本技术领域中的普通技术人员应当认识到,以上的实施例仅是用来说明本说明书的一个或多个实施例,在没有脱离本发明精神的情况下还可做出各种等效的变化或替换,因此,只要在本发明的实质精神范围内对上述实施例的变化、变型都将落在本申请的权利要求书的范围内。

Claims (22)

1.一种用于调试应用的方法,其特征在于,所述应用在构建时被执行代码混淆,所述方法包括:
经由调试器接收与应用的调试相关联的指令;
基于所述指令生成第一调试数据,所述第一调试数据是未经混淆的;
执行第一转换以自动将所述第一调试数据转换为经混淆的第一调试数据;
将所述经混淆的第一调试数据传送至目标Java虚拟机;以及
在所述目标Java虚拟机内基于所述经混淆的第一调试数据对所述应用执行调试。
2.如权利要求1所述的方法,其特征在于,进一步包括:
在对所述应用执行调试期间由所述目标Java虚拟机生成第二调试数据,所述第二调试数据是经混淆的;
执行第二转换以自动将所述第二调试数据转换为未经混淆的第二调试数据;以及
将所述未经混淆的第二调试数据传送至所述调试器。
3.如权利要求1所述的方法,其特征在于,所述调试器位于所述应用的开发者的本地机器内,而所述目标Java虚拟机位于设备和/或模拟器内。
4.如权利要求2所述的方法,其特征在于,所述调试是借助adb执行的,且所述第一转换和所述第二转换是通过修改所述adb的源代码实现的。
5.如权利要求1所述的方法,其特征在于,所述代码混淆包括将所述应用的源代码中的类、方法和/或变量的名称执行替换。
6.如权利要求2所述的方法,其特征在于,所述第一转换和所述第二转换是基于映射文件执行的,所述映射文件指定混淆前后的类、方法和/或变量的映射关系。
7.如权利要求6所述的方法,其特征在于,执行所述第一转换包括:
自动标识所述第一调试数据中的未经混淆的变量、方法和/或类的名称;
自动基于所述映射文件确定与所标识的未经混淆的变量、方法和/或类的名称对应的经混淆的变量、方法和/或类的名称;以及
自动将所述未经混淆的变量、方法和/或类的名称转换为所述经混淆的变量、方法和/或类的名称,从而生成所述经混淆的第一调试数据。
8.如权利要求6所述的方法,其特征在于,执行所述第二转换包括:
自动标识所述第二调试数据中的经混淆的变量、方法和/或类的名称;
自动基于所述映射文件确定与所标识的经混淆的变量、方法和/或类的名称对应的未经混淆的变量、方法和/或类的名称;以及
自动将所述经混淆的变量、方法和/或类的名称转换为所述未经混淆的变量、方法和/或类的名称,从而生成所述未经混淆的第二调试数据。
9.如权利要求6所述的方法,其特征在于,所述映射文件是在构建所述应用时生成的。
10.如权利要求1所述的方法,其特征在于,所述应用是由多个开发者合作开发的。
11.如权利要求10所述的方法,其特征在于,所述多个开发者中的一个或多个开发者不具有访问所述应用的全部源代码的权限。
12.如权利要求6所述的方法,其特征在于,所述映射文件是从执行构建的开发者处获得的。
13.一种用于调试应用的系统,其特征在于,所述应用在构建时被执行代码混淆,所述系统包括:
调试器,所述调试器用于:
接收与应用的调试相关联的指令;以及
基于所述指令生成第一调试数据,所述第一调试数据是未经混淆的;
混淆调试装置,所述混淆调试装置用于:
接收所述第一调试数据;以及
执行第一转换以自动将所述第一调试数据转换为经混淆的第一调试数据;以及
目标Java虚拟机,所述目标Java虚拟机用于:
接收所述经混淆的第一调试数据;
将所述经混淆的第一调试数据传送至目标Java虚拟机;以及
在所述目标Java虚拟机内基于所述经混淆的第一调试数据对所述应用执行调试。
14.如权利要求13所述的系统,其特征在于:
所述目标Java虚拟机用于在对所述应用执行调试期间生成第二调试数据,所述第二调试数据是经混淆的;以及
所述混淆调试装置用于执行第二转换以自动将所述第二调试数据转换为未经混淆的第二调试数据并将所述未经混淆的第二调试数据传送至所述调试器。
15.如权利要求13所述的系统,其特征在于,所述调试器位于所述应用的开发者的本地机器内,而所述目标Java虚拟机位于设备和/或模拟器内。
16.如权利要求13所述的系统,其特征在于,所述系统还包括adb,所述调试是借助adb执行的,且所述混淆调试装置是通过修改所述adb的源代码实现的。
17.如权利要求16所述的系统,其特征在于,所述adb包括adb客户端、adb服务器和adb守护程序,且所述混淆调试装置位于所述adb客户端、adb服务器和adb守护程序中的一者处。
18.如权利要求14所述的系统,其特征在于,所述第一转换和所述第二转换是基于映射文件执行的,所述映射文件指定混淆前后的类、方法和/或变量的映射关系。
19.如权利要求18所述的系统,其特征在于,所述混淆调试装置用于:
自动标识所述第一调试数据中的未经混淆的变量、方法和/或类的名称;
自动基于所述映射文件确定与所标识的未经混淆的变量、方法和/或类的名称对应的经混淆的变量、方法和/或类的名称;以及
自动将所述未经混淆的变量、方法和/或类的名称转换为所述经混淆的变量、方法和/或类的名称,从而生成所述经混淆的第一调试数据。
20.如权利要求18所述的系统,其特征在于,所述混淆调试装置用于:
自动标识所述第二调试数据中的经混淆的变量、方法和/或类的名称;
自动基于所述映射文件确定与所标识的经混淆的变量、方法和/或类的名称对应的未经混淆的变量、方法和/或类的名称;以及
自动将所述经混淆的变量、方法和/或类的名称转换为所述未经混淆的变量、方法和/或类的名称,从而生成所述未经混淆的第二调试数据。
21.一种存储指令的计算机可读存储介质,所述指令当被计算机执行时,使所述计算机执行如权利要求1-12中任一项所述的方法。
22.一种系统,包括用于执行如权利要求1-12中任一项所述的方法的装置。
CN201910640566.3A 2019-07-16 2019-07-16 用于调试应用的方法和系统 Pending CN110457209A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910640566.3A CN110457209A (zh) 2019-07-16 2019-07-16 用于调试应用的方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910640566.3A CN110457209A (zh) 2019-07-16 2019-07-16 用于调试应用的方法和系统

Publications (1)

Publication Number Publication Date
CN110457209A true CN110457209A (zh) 2019-11-15

Family

ID=68481334

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910640566.3A Pending CN110457209A (zh) 2019-07-16 2019-07-16 用于调试应用的方法和系统

Country Status (1)

Country Link
CN (1) CN110457209A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113010857A (zh) * 2021-03-02 2021-06-22 北京顶象技术有限公司 一种可自定义规则的JavaScript代码混淆方法和系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104756086A (zh) * 2012-10-30 2015-07-01 甲骨文国际公司 用于调试依领域而定的语言的系统和方法
US20160170862A1 (en) * 2014-12-15 2016-06-16 Dell Products L.P. Obfuscating debugging filenames
CN105808399A (zh) * 2016-03-14 2016-07-27 百度在线网络技术(北京)有限公司 一种远程调试的方法和装置
CN108664389A (zh) * 2017-03-31 2018-10-16 腾讯科技(深圳)有限公司 一种测试方法、装置及终端

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104756086A (zh) * 2012-10-30 2015-07-01 甲骨文国际公司 用于调试依领域而定的语言的系统和方法
US20160170862A1 (en) * 2014-12-15 2016-06-16 Dell Products L.P. Obfuscating debugging filenames
CN105808399A (zh) * 2016-03-14 2016-07-27 百度在线网络技术(北京)有限公司 一种远程调试的方法和装置
CN108664389A (zh) * 2017-03-31 2018-10-16 腾讯科技(深圳)有限公司 一种测试方法、装置及终端

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113010857A (zh) * 2021-03-02 2021-06-22 北京顶象技术有限公司 一种可自定义规则的JavaScript代码混淆方法和系统

Similar Documents

Publication Publication Date Title
US7437715B2 (en) System and method for generating a set of robot commands based on user entry events in a user interface
CN105912473B (zh) 基于bdd的移动app自动测试平台和测试方法
US10338907B2 (en) Cloud service framework for toolkit deployment
US7426717B1 (en) System and method for debugging files in a runtime environment
US9792198B2 (en) Debugger with method restart capability
CN100492387C (zh) 基于Keil C51的软件保护开发的方法和系统
Gao et al. Android testing via synthetic symbolic execution
CA2307546A1 (en) Method and product for debugging a target java virtual machine having no debug information therein
CN110362490B (zh) 融合iOS与Android移动应用的自动化测试方法及系统
US6785884B1 (en) Symbolic debug interface for register transfer simulator debugger
Kejstová et al. From model checking to runtime verification and back
KR101886203B1 (ko) 프로그램 분석 장치 및 방법
US6799320B1 (en) Providing binding options for component interfaces
CN110457209A (zh) 用于调试应用的方法和系统
CN103176903B (zh) MapReduce分布式系统程序的测试方法及设备
CN111258802A (zh) 捕获应用程序崩溃信息的方法及相关设备
CN108304230B (zh) 调整应用属性的实现方法、装置及可读存储介质
McCrickard et al. Assessing the impact of changes at the architectural level: A case study on graphical debuggers
CN109947407B (zh) 一种数据获取方法及装置
CN111984543A (zh) 指令测试方法、装置及系统
Jeon et al. SP-Fuzz: Fuzzing Soft PLC with Semi-automated Harness Synthesis
KR100490899B1 (ko) 자바 카드 개발 환경을 위한 암호 알고리즘 패키지 추가 기능 구현 방법
Whittaker et al. Black Box Debugging: It’s all about what takes place at the boundary of an application.
Rauter et al. Towards an automated generation of application confinement policies with binary analysis
Xu A dynamic taint forensic analysis tool for Android apps

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right

Effective date of registration: 20200924

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman, British Islands

Applicant after: Innovative advanced technology Co.,Ltd.

Address before: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman, British Islands

Applicant before: Advanced innovation technology Co.,Ltd.

Effective date of registration: 20200924

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman, British Islands

Applicant after: Advanced innovation technology Co.,Ltd.

Address before: A four-storey 847 mailbox in Grand Cayman Capital Building, British Cayman Islands

Applicant before: Alibaba Group Holding Ltd.

TA01 Transfer of patent application right
RJ01 Rejection of invention patent application after publication

Application publication date: 20191115

RJ01 Rejection of invention patent application after publication