CN104615933B - 防软件反编译的方法、防反编译软件启动的方法和装置 - Google Patents

防软件反编译的方法、防反编译软件启动的方法和装置 Download PDF

Info

Publication number
CN104615933B
CN104615933B CN201510041209.7A CN201510041209A CN104615933B CN 104615933 B CN104615933 B CN 104615933B CN 201510041209 A CN201510041209 A CN 201510041209A CN 104615933 B CN104615933 B CN 104615933B
Authority
CN
China
Prior art keywords
application
nativeactivity
signing messages
main interface
file
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.)
Active
Application number
CN201510041209.7A
Other languages
English (en)
Other versions
CN104615933A (zh
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 Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing 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 Qihoo Technology Co Ltd, Qizhi Software Beijing Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201510041209.7A priority Critical patent/CN104615933B/zh
Publication of CN104615933A publication Critical patent/CN104615933A/zh
Priority to PCT/CN2015/098978 priority patent/WO2016119548A1/zh
Application granted granted Critical
Publication of CN104615933B publication Critical patent/CN104615933B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)

Abstract

本发明公开了一种防软件反编译的方法、防反编译软件启动的方法和装置,涉及计算机技术领域。所述防软件反编译的方法包括:针对安卓系统的应用的配置文件,将所述配置文件中的入口activity声明为nativeActivity;通过JAVA本地调用接口构建针对所述nativeActivity的执行文件;其中,针对所述nativeActivity的执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。本发明取得了可避免应用更改在应用中添加其他逻辑,避免了未经验证的信息对用户的干扰,保护的应用开发者的权益的有益效果。

Description

防软件反编译的方法、防反编译软件启动的方法和装置
技术领域
本发明涉及计算机技术领域,具体涉及一种防软件反编译的方法、一种防软件反编译的装置、一种防反编译软件启动的方法和一种防反编译软件启动的装置。
背景技术
安卓平台发展迅速,已经逐渐成为了移动终端的最普及的操作系统,与其他终端操作系统相比,开放式的安卓系统为应用开发者提供了更多的功能接口,这些功能接口提高了系统的可扩展性。
目前安卓系统的应用的构建都采用java,而java编译得到的文件很容易被反编译。因此存在应用更改者通过非法拷贝、逆向工程、反编译等手段来添加其自己的逻辑,比如在应用中加入自己广告等内容,对于用户来说多了很多无用的功能,存在不小危害,并且对于应用的开发者来说,该种方式损害了开发者的权益。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种防软件反编译的装置和相应的一种防软件反编译的方法。
依据本发明的一个方面,提供了本发明公开了一种防软件反编译的方法,包括:
针对安卓系统的应用的配置文件,将所述配置文件中的入口activity声明为nativeActivity;
通过JAVA本地调用接口构建针对所述nativeActivity的执行文件;其中,针对所述nativeActivity的执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
优选地,所述执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:
在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验。
优选地,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:
在主界面函数中,调用natve方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
优选地,所述第一签名信息为应用初始状态下的第一MD5值,所述第二签名信息为应用启动时的第二MD5值。
优选地,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
优选地,所述通过JAVA本地调用接口构建针对所述nativeActivity的执行文件包括:
构建针对所述nativeActivity的SO文件;所述SO文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
依据本发明的另外一个发明,本发明还公开了一种防反编译软件启动的方法,包括:
在安卓系统的应用启动时,读取所述应用的配置文件中声明的nativeActivity;
通过所述配置文件中声明的nativeActivity,调用JAVA本地调用接口,加载针对所述nativeActivity的执行文件;
在加载针对所述nativeActivity的执行文件后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
优选地,加载针对所述nativeActivity的执行文件后,在所述应用的主界面启动完成之前对所述应用进行签名校验包括:
在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验。
优选地,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验包括:
在主界面函数中,调用natve方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
优选地,所述第一签名信息为应用初始状态下的第一MD5值,所述第二签名信息为应用启动时的第二MD5值。
优选地,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
优选地,所述调用JAVA本地调用接口,加载针对所述nativeActivity的执行文件包括:
调用本地调用接口,加载针对所述nativeActivity的SO文件;所述SO文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
依据本发明的另外一个方面,本发明还公开了一种防软件反编译的装置,包括:
入口声明模块,适于针对安卓系统的应用的配置文件,将所述配置文件中的入口activity声明为nativeActivity;
主界面验证构建模块,适于通过JAVA本地调用接口构建针对所述nativeActivity的执行文件;其中,针对所述nativeActivity的执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
优选地,所述执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:
在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验。
优选地,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:
在主界面函数中,调用natve方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
优选地,所述第一签名信息为应用初始状态下的第一MD5值,所述第二签名信息为应用启动时的第二MD5值。
优选地,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
优选地,所述通过JAVA本地调用接口构建针对所述nativeActivity的执行文件包括:
构建针对所述nativeActivity的SO文件;所述SO文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
依据本发明的另外一个方面,本发明还公开了一种防反编译软件启动的装置,包括:
配置文件读取模块,适于在安卓系统的应用启动时,读取所述应用的配置文件中声明的nativeActivity;
主界面加载模块,适于通过所述配置文件中声明的nativeActivity,调用JAVA本地调用接口,加载针对所述nativeActivity的执行文件;
主界面签名验证模块,适于在加载针对所述nativeActivity的执行文件后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
优选地,所述主界面签名验证模块包括:
主界面函数执行模块,适于在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验。
优选地,所述主界面函数执行模块包括:
签名信息存放模块,适于针对所述nativeActivity的执行文件在加载后,通过natve方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
签名信息验证模块,适于获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
优选地,所述第一签名信息为应用初始状态下的MD5值,所述第二签名信息为应用启动时的MD5值。
优选地,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
优选地,所述主界面加载模块包括:
SO文件加载模块,适于调用本地调用接口,加载针对所述nativeActivity的SO文件;所述SO文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
根据本发明的一种防软件反编译的方法可以在安卓系统的应用的,在所述应用的配置文件Manifest文件中,将所述配置文件中的入口activity声明为nativeActivity,然后通过JNI(Java Native Interface,JAVA本地调用接口)构建针对所述nativeActivity的执行文件;其中,针对所述nativeActivity的执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。由于通过JNI(Java NativeInterface,JAVA本地调用接口)构建针对所述nativeActivity的执行文件,其可以通过采用C++实现进行构建android_main函数中的上述逻辑,那么对被反编译的应用,由于签名不能通过,可以使应用无法启动,由此解决了由安卓系统的应用由于采用java构建应用的各种逻辑而导致应用容易被反编译,导致对于用户来说多了很多无用的功能,存在不小危害,并且对于应用的开发者来说,该种方式损害了开发者的权益问题,取得了可避免应用更改在应用中添加其他逻辑,避免了未经验证的信息对用户的干扰,保护的应用开发者的权益的有益效果。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其Manifest文件中目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的一种防软件反编译的方法的流程示意图;
图1A示出了根据本发明一个实施例的app整体启动逻辑;
图2示出了根据本发明一个实施例的一种防反编译软件启动的方法的流程示意图;
图2A示出了根据本发明一个实施例具体的一种防反编译软件启动的方法的流程示意图;
图3示出了根据本发明一个实施例的一种防反编译软件启动的装置的结构示意图;
图4示出了根据本发明一个实施例的一种防反编译软件启动的装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一
参照图1,其示出了本发明的一种防软件反编译的方法的流程示意图,具体可以包括:
步骤110,针对安卓系统的应用的配置文件,将所述配置文件中的入口activity声明为nativeActivity;
在安卓(Android)系统的APP(APPlication,应用)启动时,必然首先加载其配置文件Manifest文件。因为每个安卓应用程序必须有一个Manifest文件配置文件,在其根目录res下。Manifest文件在简单的Android系统的应用提出了重要的信息,信息系统必须具备之前,Manifest文件中可以运行任何应用程序的代码。除其他事项外,清单中执行下列操作:(1)Manifest文件命名为应用程序的Java包。包的名称作为一个应用程序的唯一标识符;(2)Manifest文件中声明了应用程序的组件的活动、服务、广播接收机、内容提供商、应用程序组成。Manifest文件中命名的类,实现每个组件。这些声明让Android系统知道的组件是什么和在什么条件下,他们可以启用。(3)Manifest文件中决定哪些进程将主机应用程序组件。(4)Manifest文件中声明,应用程序必须有权限才能访问受保护的API(APPlication Program Interface,应用程序编程接口)部分,并与其他应用程序进行交互。(5)Manifest文件中还声明,其他进程需要以与应用程序的组件交互的权限。(6)Manifest文件中宣布的Android API的应用程序需要的最低水平。等等一系列功能。
在上述一系列功能中,有一个声明为入口activity,即声明应用主界面启动的类。在本发明实施例中,Manifest文件中的入口activity声明为nativeActivity。
步骤120,通过JAVA本地调用接口构建针对所述nativeActivity的执行文件;其中,针对所述nativeActivity的执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
然后通过jni实现nativeActivity的逻辑,即通过JNI口构建针对所述nativeActivity的执行文件。JNI是Java Native Interface,java本地接口,也就是java本地接口,它提供了若干的API实现了和Java和其他语言(C&C++)的通信。
当然所述执行文件还用于绘制主界面相关的逻辑,以及校验通过后,启动相应功能的逻辑。
优选地,所述执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:
子步骤121,在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验。
在本发明实施例中应用的主界面的启动的整体逻辑如图1A:
A11,加载Manifest文件中的nativeActivity。
A12,调用Android Jni接口;
安卓系统中任何一个APP启动时,都会去加载Manifest文件,然后其中的入口activity,以绘制主界面。但是在本发明实施例中加载Manifest文件,从中读取nativeActivity声明,从而可以通过JNI接口去调用本地方法,加载通过JNI接口加载本地应用主函数android_main的执行文件。
A13,执行应用主函数android_main;
在本发明实施例中执行android_main。
A14,执行主界面初始化函数engine_init_display;
然后会根据上述执行文件调用engine_init_display对绘制主界面需要的资源进行初始化。
A15,执行框架绘制函数engine_draw_frame;
然后执行engine_draw_frame绘制主界面的框架。
A16,在frame中执行UI条目绘制函数engine_term_display。
然后执行engine_term_display绘制框架中的具体UI界面。
本发明将上述的步骤A14-A16统一以JNI规定构建一个执行文件,比如so文件,那么应用读取到Manifest文件中的nativeActivity后,需要首先读取与nativeActivity对应的本地so文件去绘制主界面的activity。那么本发明则可在步骤A13执行安卓主界面函数android_main之后,主界面绘制之前,加入应用主界面的签名校验逻辑,由android_main控制所述签名校验逻辑。
优选地,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:
子步骤1211,在主界面函数中,调用natve方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
子步骤1212,获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
前述签名校验逻辑中,在android_main控制的逻辑中加入natve方法,由natve方法执行在在系统内存中指定位置申请一块内存,存放预置的第一签名信息。那么果反编译过APP,重新打包后,其可能在指定位置申请的内存中存放的签名信息被更改。
那么在android_main控制后续验证逻辑时,首先获取当前启动的应用的第二签名信息,与开发者开发完成时构建的存在指定位置的内存块中第一签名信息进行匹配。如果所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过,退出绘制主界面,从而不能进入APP。如果所述第一签名信息与第二签名信息匹配,则确定所述应用的签名校验通过,可以绘制主界面,从能进入APP。
当然在本发明实施例中,经过反编译的APP,其还可能根本就不在指定位置申请内存块,本发明实施例android_main控制后续验证逻辑时,则从指定位置的内存块读取签名信息,如果没有从指定位置读取到任何签名信息,也认为校验没有通过。
优选地,所述第一签名信息为应用初始状态下的第一MD5值,所述第二签名信息为应用启动时的第二MD5值。
在本发明实施例中,第一签名信息为开发者把APP开发完成后,对APP的某个文件A计算MD5值(Message-Digest Algorithm 5,信息摘要算法5),,该MD5值为第一MD5值。当客户端从某个途径,比如第三方平台下载所述APP,进行安装后,启动时则会计算当前启动时的APP的文件A计算MD5值,该启动时计算的MD5值为第二MD5值。那么如果APP被反编译后,文件A的内容不同,其MD5值也不同。
优选地,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
在本发明实施例中,第一签名信息为开发者把APP开发完成后,对APP的下发的一个文件内容的证书文件,该证书文件为第一证书文件。当客户端从某个途径,比如第三方平台下载所述APP,进行安装后,启动时则会获取当前启动时的APP的数字证书,该启动时的该证书文件为第二证书文件。那么如果APP被反编译后,APP的文件内容不同,其证书文件值也不同。
那么如此对APP的启动逻辑进行了修改,即使该APP被反编译之后,由于是通过JNI接口调用的本地方法,而本地方法可以通过C++构建为SO文件,反编译难度巨大,基本上无法被反编译,那么即使有修改者对整个APP的大致逻辑进行了反编译,也会改变APP的签名,那么对于被反编译之后的APP,如果启动,其不能通过上述nativeActivity的执行文件中的校验逻辑,则无法启动APP的主界面,也就无法使用APP,对用户和开发者来说均不会由于APP内容改变而受到危害。
优选地,所述通过JAVA本地调用接口构建针对所述nativeActivity的执行文件包括:
子步骤122,构建针对所述nativeActivity的SO文件;。
本发明的构建的执行文件可为so文件。so文件可以理解为动态链接库,可以由C++编译出来。所述所述SO文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。即通过所述so文件,在绘制主界面的逻辑中,加入对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用,结束主界面的绘制,如果所述应用的签名校验通过,则绘制主界面。
本发明实施例在所述应用的配置文件Manifest文件中,将所述配置文件中的入口activity声明为nativeActivity,然后通过JNI(Java Native Interface,JAVA本地调用接口)构建针对所述nativeActivity的执行文件;其中,针对所述nativeActivity的执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。由于通过JNI(Java Native Interface,JAVA本地调用接口)构建针对所述nativeActivity的执行文件,其可以通过采用C++实现android_main函数中的上述逻辑,那么对被反编译的应用,由于签名不能通过,可以使应用无法启动,由此解决了由安卓系统的应用由于采用java构建应用的各种逻辑而导致应用容易被反编译,导致对于用户来说多了很多无用的功能,存在不小危害,并且对于应用的开发者来说,该种方式损害了开发者的权益问题,取得了可避免应用更改在应用中添加其他逻辑,避免了未经验证的信息对用户的干扰,保护的应用开发者的权益的有益效果。
实施例二
相对实施例一的APP构建过程,下面在实施例二对应介绍APP的启动过程。
参照图2,其示出了本发明的一种防反编译软件启动的方法的流程示意图,具体可以包括:
步骤210,在安卓系统的应用启动时,读取所述应用的配置文件中声明的nativeActivity;
在安卓(Android)系统的APP(APPlication,应用)启动时,必然首先加载其配置文件Manifest文件。因为每个安卓应用程序必须有一个Manifest文件配置文件,在其根目录res下。Manifest文件在简单的Android系统的应用提出了重要的信息,信息系统必须具备之前,Manifest文件中可以运行任何应用程序的代码。除其他事项外,清单中执行下列操作:(1)Manifest文件命名为应用程序的Java包。包的名称作为一个应用程序的唯一标识符;(2)Manifest文件中声明了应用程序的组件的活动、服务、广播接收机、内容提供商、应用程序组成。Manifest文件中命名的类,实现每个组件。这些声明让Android系统知道的组件是什么和在什么条件下,他们可以启用。(3)Manifest文件中决定哪些进程将主机应用程序组件。(4)Manifest文件中声明,应用程序必须有权限才能访问受保护的API(APPlication Program Interface,应用程序编程接口)部分,并与其他应用程序进行交互。(5)Manifest文件中还声明,其他进程需要以与应用程序的组件交互的权限。(6)Manifest文件中宣布的Android API的应用程序需要的最低水平。等等一系列功能。
在上述一系列功能中,有一个声明为入口activity,本发明实施例将该入口activity声明为nativeActivity。那么本发明实施例步骤210后,需要读取前述Manifest文件中的这个nativeActivity声明。
步骤220,通过所述配置文件中声明的nativeActivity,调用JAVA本地调用接口,加载针对所述nativeActivity的执行文件;
在本发明实施例中,首先会构建针对所述nativeActivity的执行文件,该执行文件的逻辑包括在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用;如果所述应用的签名校验通过,则启动主界面,进入APP。
然后即通过nativeActivity声明可知道其调用的为本地方法,那么则调用JNI接口,去加载针对所述nativeActivity的执行文件。
步骤230,在加载针对所述nativeActivity的执行文件后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
然后则可执行app签名校验逻辑,即在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用,如果所述应用的签名校验通过,则绘制主界面,进入app。
优选地,加载针对所述nativeActivity的执行文件后,在所述应用的主界面启动完成之前对所述应用进行签名校验包括:
子步骤231,在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验。
在本发明实施例中应用的主界面的启动的整体逻辑如图1A:
A11,加载Manifest文件中的nativeActivity。
A12,调用Android Jni接口;
安卓系统中任何一个APP启动时,都会去加载Manifest文件,然后其中的入口activity,以绘制主界面。但是在本发明实施例中加载Manifest文件,从中读取nativeActivity声明,从而可以通过JNI接口去调用本地方法,加载通过JNI接口加载本地应用主函数android_main的执行文件。
A13,执行应用主函数android_main;
在本发明实施例中执行android_main。
A14,执行主界面初始化函数engine_init_display;
然后会根据上述执行文件调用engine_init_display对绘制主界面需要的资源进行初始化。
A15,执行框架绘制函数engine_draw_frame;
然后执行engine_draw_frame绘制主界面的框架。
A16,在frame中执行UI条目绘制函数engine_term_display。
然后执行engine_term_display绘制框架中的具体UI界面。
本发明将上述的步骤A14-A16统一以JNI规定构建一个执行文件,比如so文件,那么应用读取到Manifest文件中的nativeActivity后,需要首先读取与nativeActivity对应的本地so文件去绘制主界面的activity。那么本发明则可在步骤A13执行安卓主界面函数android_main之后,主界面绘制之前,加入应用主界面的签名校验逻辑,由android_main控制所述签名校验逻辑。
优选地,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:
子步骤2211,在主界面函数中,调用natve方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
子步骤2212,获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
前述签名校验逻辑中,在android_main控制的逻辑中加入natve方法,由natve方法执行在在系统内存中指定位置申请一块内存,存放预置的第一签名信息。那么果反编译过APP,重新打包后,其可能在指定位置申请的内存中存放的签名信息被更改。
那么在android_main控制后续验证逻辑时,首先获取当前启动的应用的第二签名信息,与开发者开发完成时构建的存在指定位置的内存块中第一签名信息进行匹配。如果所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过,退出绘制主界面,从而不能进入APP。如果所述第一签名信息与第二签名信息匹配,则确定所述应用的签名校验通过,可以绘制主界面,从能进入APP。
当然在本发明实施例中,经过反编译的APP,其还可能根本就不在指定位置申请内存块,本发明实施例android_main控制后续验证逻辑时,则从指定位置的内存块读取签名信息,如果没有从指定位置读取到任何签名信息,也认为校验没有通过。
优选地,所述第一签名信息为应用初始状态下的第一MD5值,所述第二签名信息为应用启动时的第二MD5值。
在本发明实施例中,第一签名信息为开发者把APP开发完成后,对APP的某个文件A计算MD5值(Message-Digest Algorithm 5,信息摘要算法5),,该MD5值为第一MD5值。当客户端从某个途径,比如第三方平台下载所述APP,进行安装后,启动时则会计算当前启动时的APP的文件A计算MD5值,该启动时计算的MD5值为第二MD5值。那么如果APP被反编译后,文件A的内容不同,其MD5值也不同。
优选地,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
在本发明实施例中,第一签名信息为开发者把APP开发完成后,对APP的下发的一个文件内容的证书文件,该证书文件为第一证书文件。当客户端从某个途径,比如第三方平台下载所述APP,进行安装后,启动时则会获取当前启动时的APP的数字证书,该启动时的该证书文件为第二证书文件。那么如果APP被反编译后,APP的文件内容不同,其证书文件值也不同。
那么如此对APP的启动逻辑进行了修改,即使该APP被反编译之后,由于是通过JNI接口调用的本地方法,而本地方法可以通过C++构建为SO文件,反编译难度巨大,基本上无法被反编译,那么即使有修改者对整个APP的大致逻辑进行了反编译,也会改变APP的签名,那么对于被反编译之后的APP,如果启动,其不能通过上述nativeActivity的执行文件中的校验逻辑,则无法启动APP的主界面,也就无法使用APP,对用户和开发者来说均不会由于APP内容改变而受到危害。
优选地,所述通过JAVA本地调用接口构建针对所述nativeActivity的执行文件包括:
子步骤232,构建针对所述nativeActivity的SO文件;。
本发明的构建的执行文件可为so文件。so文件可以理解为动态链接库,可以由C++编译出来。在所述执行文件中,在绘制主界面的逻辑中,加入对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用,结束主界面的绘制,如果所述应用的签名校验通过,则绘制主界面。
参照图2A,其示出了本发明实施例三的一种app启动的具体示例。
步骤S210,读取Manifest文件的nativeActivity;
步骤S220,通过nativeActivity,以调用JNI接口加载SO文件;
步骤S230,执行android_main;
步骤S240,在指定内存块中保存第一签名信息;
步骤S250,获取当前启动应用的第二签名信息;
步骤S260,将第一签名信息与第二签名信息进行匹配;如果第一签名信息与第二签名信息匹配,则进入步骤270;如果第一签名信息与第二签名信息不匹配,则进入步骤280;
步骤270,启动应用。
步骤280,退出应用,结束启动过程。
本发明实施例在安卓系统的应用启动时,从其配置文件中读取nativeActivity声明,以调用JAVA本地调用接口,加载针对所述nativeActivity的执行文件;从而在加载针对所述nativeActivity的执行文件后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。由于通过JNI(Java NativeInterface,JAVA本地调用接口)构建针对所述nativeActivity的执行文件,其可以通过采用C++实现进行构建android_main函数中的上述逻辑,那么对被反编译的应用,由于签名不能通过,可以使应用无法启动,由此解决了由安卓系统的应用由于采用java构建应用的各种逻辑而导致应用容易被反编译,导致对于用户来说多了很多无用的功能,存在不小危害,并且对于应用的开发者来说,该种方式损害了开发者的权益问题,取得了可避免应用更改在应用中添加其他逻辑,避免了未经验证的信息对用户的干扰,保护的应用开发者的权益的有益效果。
实施例三
参照图3,其示出了本发明一种防软件反编译的装置的结构示意图,具体可以包括:
入口声明模块310,适于针对安卓系统的应用的配置文件,将所述配置文件中的入口activity声明为nativeActivity;
主界面验证构建模块320,适于通过JAVA本地调用接口构建针对所述nativeActivity的执行文件;其中,针对所述nativeActivity的执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
优选地,所述执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:
在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验。
优选地,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:
在主界面函数中,调用natve方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
优选地,所述第一签名信息为应用初始状态下的第一MD5值,所述第二签名信息为应用启动时的第二MD5值。
优选地,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
优选地,所述通过JAVA本地调用接口构建针对所述nativeActivity的执行文件包括:
构建针对所述nativeActivity的SO文件;。
实施例四
参照图4,其示出了本发明一种防软件反编译的装置的结构示意图,具体可以包括:
配置文件读取模块410,适于在安卓系统的应用启动时,读取所述应用的配置文件中声明的nativeActivity;
主界面加载模块420,适于通过所述配置文件中声明的nativeActivity,调用JAVA本地调用接口,加载针对所述nativeActivity的执行文件;
主界面签名验证模块430,适于在加载针对所述nativeActivity的执行文件后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
优选地,所述主界面签名验证模块包括:
主界面函数执行模块,适于在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验。
优选地,所述主界面函数执行模块包括:
签名信息存放模块,适于针对所述nativeActivity的执行文件在加载后,通过natve方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
签名信息验证模块,适于获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
优选地,所述第一签名信息为应用初始状态下的MD5值,所述第二签名信息为应用启动时的MD5值。
优选地,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
优选地,所述主界面加载模块包括:
SO文件加载模块,适于调用本地调用接口,加载针对所述nativeActivity的SO文件。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其Manifest文件中设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把Manifest文件中们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把Manifest文件中们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其Manifest文件中实施例中所包括的某些特征而不是其Manifest文件中特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以Manifest文件中们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的防软件反编译设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了A1、一种防软件反编译的方法,包括:
针对安卓系统的应用的配置文件,将所述配置文件中的入口activity声明为nativeActivity;
通过JAVA本地调用接口构建针对所述nativeActivity的执行文件;其中,针对所述nativeActivity的执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
A2、如A1所述的方法,所述执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:
在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验。
A3、如A1所述的方法,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:
在主界面函数中,调用natve方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
A4、如A3所述的方法,所述第一签名信息为应用初始状态下的第一MD5值,所述第二签名信息为应用启动时的第二MD5值。
A5、如A3所述的方法,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
A6、如A1所述的方法,所述通过JAVA本地调用接口构建针对所述nativeActivity的执行文件包括:
构建针对所述nativeActivity的SO文件;所述SO文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
本发明还公开了B7、一种防反编译软件启动的方法,包括:
在安卓系统的应用启动时,读取所述应用的配置文件中声明的nativeActivity;
通过所述配置文件中声明的nativeActivity,调用JAVA本地调用接口,加载针对所述nativeActivity的执行文件;
在加载针对所述nativeActivity的执行文件后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
B8、如B7所述的方法,加载针对所述nativeActivity的执行文件后,在所述应用的主界面启动完成之前对所述应用进行签名校验包括:
在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验。
B9、如B8所述的方法,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验包括:
在主界面函数中,调用natve方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
B10、如B9所述的方法,所述第一签名信息为应用初始状态下的第一MD5值,所述第二签名信息为应用启动时的第二MD5值。
B11、如B9所述的方法,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
B12、如B7所述的方法,所述调用JAVA本地调用接口,加载针对所述nativeActivity的执行文件包括:
调用本地调用接口,加载针对所述nativeActivity的SO文件;所述SO文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
本发明还公开了,C13一种防软件反编译的装置,包括:
入口声明模块,适于针对安卓系统的应用的配置文件,将所述配置文件中的入口activity声明为nativeActivity;
主界面验证构建模块,适于通过JAVA本地调用接口构建针对所述nativeActivity的执行文件;其中,针对所述nativeActivity的执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
C14、如C13所述的装置,所述执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:
在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验。
C15、如C14所述的装置,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:
在主界面函数中,调用natve方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
C16、如C15所述的装置,所述第一签名信息为应用初始状态下的第一MD5值,所述第二签名信息为应用启动时的第二MD5值。
C17、如C15所述的装置,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
C18、如C13所述的装置,所述通过JAVA本地调用接口构建针对所述nativeActivity的执行文件包括:
构建针对所述nativeActivity的SO文件;所述SO文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
本发明还公开了D19、一种防反编译软件启动的装置,包括:
配置文件读取模块,适于在安卓系统的应用启动时,读取所述应用的配置文件中声明的nativeActivity;
主界面加载模块,适于通过所述配置文件中声明的nativeActivity,调用JAVA本地调用接口,加载针对所述nativeActivity的执行文件;
主界面签名验证模块,适于在加载针对所述nativeActivity的执行文件后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
D20、如D19所述的装置,所述主界面签名验证模块包括:
主界面函数执行模块,适于在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验。
D21、如D20所述的装置,所述主界面函数执行模块包括:
签名信息存放模块,适于针对所述nativeActivity的执行文件在加载后,通过natve方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
签名信息验证模块,适于获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
D22、如D21所述的装置,所述第一签名信息为应用初始状态下的MD5值,所述第二签名信息为应用启动时的MD5值。
D23、如D21所述的装置,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
D24、如D19所述的装置,所述主界面加载模块包括:
SO文件加载模块,适于调用本地调用接口,加载针对所述nativeActivity的SO文件;所述SO文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。

Claims (20)

1.一种防软件反编译的方法,包括:
针对安卓系统的应用的配置文件,将所述配置文件中的入口activity声明为nativeActivity;
通过JAVA本地调用接口调用本地方法,使用C++构建针对所述nativeActivity的执行文件;其中,针对所述nativeActivity的执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
2.如权利要求1所述的方法,其特征在于,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:
在主界面函数中,调用native方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
3.如权利要求2所述的方法,其特征在于,所述第一签名信息为应用初始状态下的第一MD5值,所述第二签名信息为应用启动时的第二MD5值。
4.如权利要求2所述的方法,其特征在于,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
5.如权利要求1所述的方法,其特征在于,所述通过JAVA本地调用接口调用本地方法,使用C++构建针对所述nativeActivity的执行文件包括:
构建针对所述nativeActivity的SO文件;所述SO文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
6.一种防反编译软件启动的方法,包括:
在安卓系统的应用启动时,读取所述应用的配置文件中声明的nativeActivity;
通过所述配置文件中声明的nativeActivity,调用JAVA本地调用接口,加载针对所述nativeActivity的执行文件,所述执行文件通过本地方法使用C++构建;
在加载针对所述nativeActivity的执行文件后,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
7.如权利要求6所述的方法,其特征在于,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验包括:
在主界面函数中,调用native方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
8.如权利要求7所述的方法,其特征在于,所述第一签名信息为应用初始状态下的第一MD5值,所述第二签名信息为应用启动时的第二MD5值。
9.如权利要求7所述的方法,其特征在于,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
10.如权利要求6所述的方法,其特征在于,所述调用JAVA本地调用接口,加载针对所述nativeActivity的执行文件包括:
调用本地调用接口,加载针对所述nativeActivity的SO文件;所述SO文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
11.一种防软件反编译的装置,包括:
入口声明模块,适于针对安卓系统的应用的配置文件,将所述配置文件中的入口activity声明为nativeActivity;
主界面验证构建模块,适于通过JAVA本地调用接口调用本地方法,使用C++构建针对所述nativeActivity的执行文件;其中,针对所述nativeActivity的执行文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
12.如权利要求11所述的装置,其特征在于,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验,包括:
在主界面函数中,调用native方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
13.如权利要求12所述的装置,其特征在于,所述第一签名信息为应用初始状态下的第一MD5值,所述第二签名信息为应用启动时的第二MD5值。
14.如权利要求12所述的装置,其特征在于,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
15.如权利要求11所述的装置,其特征在于,所述通过JAVA本地调用接口调用本地方法,使用C++构建针对所述nativeActivity的执行文件包括:
构建针对所述nativeActivity的SO文件;所述SO文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
16.一种防反编译软件启动的装置,包括:
配置文件读取模块,适于在安卓系统的应用启动时,读取所述应用的配置文件中声明的nativeActivity;
主界面加载模块,适于通过所述配置文件中声明的nativeActivity,调用JAVA本地调用接口,加载针对所述nativeActivity的执行文件,所述执行文件通过本地方法使用C++构建;
主界面签名验证模块,适于在加载针对所述nativeActivity的执行文件后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用;
所述主界面签名验证模块包括:主界面函数执行模块,适于在所述针对所述nativeActivity的执行文件加载后,执行安卓主界面函数,通过所述主界面函数,在所述应用的主界面启动完成之前对所述应用进行签名校验。
17.如权利要求16所述的装置,其特征在于,所述主界面函数执行模块包括:
签名信息存放模块,适于针对所述nativeActivity的执行文件在加载后,通过native方法在系统内存中指定位置申请一块内存,存放预置的第一签名信息;
签名信息验证模块,适于获取当前应用的第二签名信息,判断所述第一签名信息与第二签名信息是否匹配;所述第一签名信息与第二签名信息不匹配,则确定所述应用的签名校验不通过。
18.如权利要求17所述的装置,其特征在于,所述第一签名信息为应用初始状态下的MD5值,所述第二签名信息为应用启动时的MD5值。
19.如权利要求17所述的装置,其特征在于,所述第一签名信息为所述应用初始状态下的第一证书文件,所述第二签名信息为所述应用启动时的第二证书文件。
20.如权利要求16所述的装置,其特征在于,所述主界面加载模块包括:
SO文件加载模块,适于调用本地调用接口,加载针对所述nativeActivity的SO文件;所述SO文件用于,在所述针对所述nativeActivity的执行文件加载后,在所述应用的主界面启动完成之前对所述应用进行签名校验,如果所述应用的签名校验不通过,则退出应用。
CN201510041209.7A 2015-01-27 2015-01-27 防软件反编译的方法、防反编译软件启动的方法和装置 Active CN104615933B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201510041209.7A CN104615933B (zh) 2015-01-27 2015-01-27 防软件反编译的方法、防反编译软件启动的方法和装置
PCT/CN2015/098978 WO2016119548A1 (zh) 2015-01-27 2015-12-25 防软件反编译的方法、防反编译软件启动的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510041209.7A CN104615933B (zh) 2015-01-27 2015-01-27 防软件反编译的方法、防反编译软件启动的方法和装置

Publications (2)

Publication Number Publication Date
CN104615933A CN104615933A (zh) 2015-05-13
CN104615933B true CN104615933B (zh) 2018-08-17

Family

ID=53150372

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510041209.7A Active CN104615933B (zh) 2015-01-27 2015-01-27 防软件反编译的方法、防反编译软件启动的方法和装置

Country Status (2)

Country Link
CN (1) CN104615933B (zh)
WO (1) WO2016119548A1 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104615933B (zh) * 2015-01-27 2018-08-17 北京奇虎科技有限公司 防软件反编译的方法、防反编译软件启动的方法和装置
CN105844150A (zh) * 2016-03-23 2016-08-10 青岛海信传媒网络技术有限公司 一种应用程序的数据保护方法和装置
CN106022098A (zh) * 2016-05-10 2016-10-12 青岛海信传媒网络技术有限公司 一种应用程序的签名验证方法和装置
CN107766701B (zh) * 2016-08-19 2021-01-26 北京京东尚科信息技术有限公司 电子设备、动态库文件保护方法及装置
CN106843853B (zh) * 2016-12-28 2020-09-08 北京五八信息技术有限公司 保护用户信息的方法和装置
CN109271758B (zh) * 2018-08-24 2021-04-20 阿里巴巴(中国)有限公司 防止So文件被盗用的方法、设备、装置及服务器
CN110275710B (zh) * 2019-06-10 2023-07-14 天翼电子商务有限公司 一种Java本地接口一致性检查方法及系统、存储介质及终端

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102831342A (zh) * 2012-07-28 2012-12-19 北京深思洛克软件技术股份有限公司 一种提高安卓系统中应用程序保护强度的方法
CN103544046A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种移动应用的软件加固方法
CN103679029A (zh) * 2013-12-11 2014-03-26 北京奇虎科技有限公司 一种修复山寨应用程序的方法及装置
CN104021321A (zh) * 2014-06-17 2014-09-03 北京奇虎科技有限公司 软件安装包的加固保护方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104615933B (zh) * 2015-01-27 2018-08-17 北京奇虎科技有限公司 防软件反编译的方法、防反编译软件启动的方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102831342A (zh) * 2012-07-28 2012-12-19 北京深思洛克软件技术股份有限公司 一种提高安卓系统中应用程序保护强度的方法
CN103544046A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种移动应用的软件加固方法
CN103679029A (zh) * 2013-12-11 2014-03-26 北京奇虎科技有限公司 一种修复山寨应用程序的方法及装置
CN104021321A (zh) * 2014-06-17 2014-09-03 北京奇虎科技有限公司 软件安装包的加固保护方法和装置

Also Published As

Publication number Publication date
CN104615933A (zh) 2015-05-13
WO2016119548A1 (zh) 2016-08-04

Similar Documents

Publication Publication Date Title
CN104615933B (zh) 防软件反编译的方法、防反编译软件启动的方法和装置
US8479188B2 (en) Binary code change vulnerability prioritization
CN104375861B (zh) 基于安卓平台的应用程序免安装运行的方法、装置及终端
CN105068932B (zh) 一种Android应用程序加壳的检测方法
US11237844B2 (en) Method and apparatus for loading kernel module
US9336381B1 (en) Entropy-based detection of sensitive information in code
US8856935B2 (en) Automatic synthesis of unit tests for security testing
Milano Android application testing guide
CN108920359B (zh) 应用程序的测试方法、装置、存储介质和电子装置
CN106293852A (zh) 一种加固安装包的资源文件的方法和装置
CN110673837B (zh) 代码修复方法及装置、电子设备、计算机可读存储介质
US20130326497A1 (en) Synchronization point visualization for modified program source code
CN113467784A (zh) 应用程序处理方法及其装置、计算机可读存储介质
US8438000B2 (en) Dynamic generation of tests
CN112965731A (zh) 基于Tinker的Flutter热更新方法、装置、设备及存储介质
Rocha et al. Hunting Memory Bugs in C Programs with Map2Check: (Competition Contribution)
US9983983B2 (en) Auto-generation of testable units for COBOL code
Kuusela Security testing in continuous integration processes
CN108460276A (zh) 一种安卓安装包的动态链接库so文件的处理方法和装置
CN113778451A (zh) 文件加载方法、装置、计算机系统和计算机可读存储介质
Schütte et al. lios: Lifting ios apps for fun and profit
Siriwardena Maven Essentials
Ravelo-Méndez et al. Kraken 2.0: A platform-agnostic and cross-device interaction testing tool
Hernández Elf parsing bugs by example with melkor fuzzer
CN113760706B (zh) 网页调试方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20220726

Address after: Room 801, 8th floor, No. 104, floors 1-19, building 2, yard 6, Jiuxianqiao Road, Chaoyang District, Beijing 100015

Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee before: Qizhi software (Beijing) Co.,Ltd.

TR01 Transfer of patent right