CN106326691B - 加解密功能的实现方法、装置及服务器 - Google Patents
加解密功能的实现方法、装置及服务器 Download PDFInfo
- Publication number
- CN106326691B CN106326691B CN201510331292.1A CN201510331292A CN106326691B CN 106326691 B CN106326691 B CN 106326691B CN 201510331292 A CN201510331292 A CN 201510331292A CN 106326691 B CN106326691 B CN 106326691B
- Authority
- CN
- China
- Prior art keywords
- file
- class
- smali
- application
- apk
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 39
- 230000006870 function Effects 0.000 claims abstract description 37
- 230000000694 effects Effects 0.000 claims description 13
- 238000009434 installation Methods 0.000 claims description 3
- 238000012423 maintenance Methods 0.000 abstract description 4
- 238000002347 injection Methods 0.000 description 18
- 239000007924 injection Substances 0.000 description 18
- 238000004806 packaging method and process Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 5
- 239000000243 solution Substances 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000012858 packaging process Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 238000012856 packing Methods 0.000 description 2
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002787 reinforcement Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2107—File encryption
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Stored Programmes (AREA)
- Storage Device Security (AREA)
Abstract
本发明提供了一种加解密功能的实现方法、装置及服务器,其中,该方法包括:对APK文件进行反编译,得到smali文件;将smali文件中用于执行I/O操作的代码替换为自定义的代码,其中,自定义的代码用于执行I/O操作以及对I/O的数据进行加解密操作;对替换过的smali文件进行编译并签名,得到新的APK文件。通过本发明,解决了对于没有源代码的应用无法再新增加解密功能的问题,减少了应用的维护成本。
Description
技术领域
本发明涉及通信领域,具体而言,涉及一种加解密功能的实现方法、装置及服务器。
背景技术
目前企业的IT建设向移动终端发展,企业移动应用在企业的日常工作中占据越来越重要的位置,其中移动办公等需求越来越普遍。企业移动应用不同于普通的手机应用程序(App),首先企业应用的多样化和个性化需求较强,比如对于核心系统的访问控制等,另外企业用户更加的趋向于全价值链的解决方案。由于企业移动应用发展之初没有统一标准的规划,很多的企业存在大量孤立遗留的移动应用,怎样灵活方便的为移动应用增加新的能力以适应企业多变的需求变的更加困难。
企业很多的移动应用相关的开发人员已经很难找到,代码维护也很少。如果重新修改源码来增加某些能力,如为原来的应用增加读写加解密文件的功能等,不仅对不熟悉代码的人来说比较困难,而且会给企业带来更大的成本。
目前很多的移动应用加解密是直接在应用的源代码级采用各种加密算法来保证数据的安全,对于没有源代码的应用无能为力。
针对相关技术中对于没有源代码的应用无法再新增加解密功能的问题,目前尚未提出有效的解决方案。
发明内容
为了解决上述技术问题,本发明提供了一种加解密功能的实现方法、装置及服务器。
根据本发明的一个方面,提供了一种加解密功能的实现方法,包括:对安卓安装包(Android Package,简称为APK)文件进行反编译,得到smali(一种安卓系统的JAVA虚拟机Dalvik所使用的寄存器语言)文件;将所述smali文件中用于执行输入/输出(I/O)操作的代码替换为自定义的代码,其中,所述自定义的代码用于执行I/O操作以及对I/O的数据进行加解密操作;对替换过的所述smali文件进行编译并签名,得到新的APK文件。
优选地,将所述smali文件中用于执行I/O操作的代码替换为自定义的代码包括:将所述smali文件中用于执行I/O操作的类替换为自定义的类,其中,所述用于执行I/O操作的类包括以下至少之一:FileOutputStream、FileInputStream、FileReader、FileWriter、RandomAccessFile等。
优选地,将所述smali文件中用于执行I/O操作的类替换为自定义的类包括:确定所述smali文件中所使用到的用于执行I/O操作的类;将所述smali文件所使用到的用于执行I/O操作的类替换为自定义的类。
优选地,在将所述smali文件中用于执行I/O操作的类替换为自定义的类之前,所述方法还包括:解析所述APK文件的AndroidManifest.xml文件,得到原始包名,其中,所述原始包名用于在进行注入替换时smali文件位置的定位。
优选地,在解析所述APK文件的AndroidManifest.xml文件之后,所述方法还包括:获取所述APK文件的Application的信息;在所述APK文件有继承自Application类的子类的情况下,将自定义的Application子类smali代码注入到所述smali文件本身的Application子类代码中;在所述APK文件没有继承自Application子类的情况下,在AndroidManifes.xml中添加android:name的属性,其中,所述属性的值是自定义的Application子类的完整名称。
优选地,在解析所述APK文件的AndroidManifest.xml文件之后,所述方法还包括:将所述smali文件中的继承自Activity子类的父类替换成自定义的Activity子类BaseActivity。
优选地,在将所述smali文件中用于执行I/O操作的代码替换为自定义的代码之后,所述方法还包括:在AndroidManifest.xml中增加用于指示进行过代码注入替换操作的标记。
根据本发明的另一个方面,还提供了一种加解密功能的实现装置,包括:反编译模块,用于对APK文件进行反编译,得到smali文件;替换模块,用于将所述smali文件中用于执行输入/输出I/O操作的代码替换为自定义的代码,其中,所述自定义的代码用于执行I/O操作以及对I/O的数据进行加解密操作;编译模块,用于对替换过的所述smali文件进行编译并签名,得到新的APK文件。
根据本发明的另一个方面,还提供了一种服务器,包括:上述的加解密功能的实现装置;其中,所述服务器还包括:第一获取装置,用于获取所述APK文件;提供装置,用于提供所述新的APK文件。
优选地,所述服务器还包括:第二获取装置,用于获取签名所述新的APK文件的keystore。
通过本发明,采用对APK文件进行反编译,得到smali文件;将smali文件中用于执行输入/输出I/O操作的代码替换为自定义的代码,其中,自定义的代码用于执行I/O操作以及对I/O的数据进行加解密操作;对替换过的smali文件进行编译并签名,得到新的APK文件的方式,解决了对于没有源代码的应用无法再新增加解密功能的问题,减少了应用的维护成本。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的加解密功能的实现方法的流程图;
图2是根据本发明实施例的加解密功能的实现装置的结构示意图;
图3是根据本发明实施例的服务器的结构示意图;
图4是根据本发明优选实施例的打包注入代码的流程图一;
图5是根据本发明优选实施例的打包注入代码的流程图二。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明实施例提供了一种加解密功能的实现方法,图1是根据本发明实施例的加解密功能的实现方法的流程图,如图1所示,该流程包括如下步骤:
步骤S102,对APK文件进行反编译,得到smali文件;
步骤S104,将smali文件中用于执行I/O操作的代码替换为自定义的代码,其中,自定义的代码用于执行I/O操作以及对I/O的数据进行加解密操作;
步骤S106,对替换过的smali文件进行编译并签名,得到新的APK文件。
通过上述步骤,将smali文件中用于I/O操作的代码替换为还可以进行加解密操作的自定义的代码,从而在没有APK文件源码的情况下,实现了APK文件的I/O数据的加解密,解决了对于没有源代码的应用无法再新增加解密功能的问题,减少了应用的维护成本,同时也提升了应用的安全性。
其中,smali是指安卓系统里的Java虚拟机(Dalvik)所使用的一种.dex格式文件的汇编语言;smali文件即为经由反汇编器(例如Baksmali)对APK文件进行反编译而得到的文件,smali文件的内容由smali语言描述。
优选地,在实施过程中,在步骤S104中,可以将反编译得到的smali文件中用于执行I/O操作的类替换为自定义的类,其中,用于执行I/O操作的类包括但不限于以下至少之一:FileOutputStream、FileInputStream、、FileReader、FileWriter、RandomAccessFile等。此外,在进行类替换时,对于相关的文件可以进行适应性修改,例如Application子类和Activity子类等。
优选地,对于一个应用而言,所使用到得I/O操作可能是全部I/O操作,也可能是其中的某一个I/O操作,为了避免不必要的类替换以及避免替换了不必要的类导致的APK文件增大的问题,在将smali文件中用于执行I/O操作的类替换为自定义的类时,可以先确定反编译所得到的smali文件所使用到的用于执行I/O操作的类及代码;然后将smali文件所使用到的用于执行I/O操作的类替换为自定义的类。对于APK文件中没有使用的类,可以不进行替换。
优选地,在步骤S104之前,方法还可以包括:解析对APK文件进行反编译得到的AndroidManifest.xml文件,得到原始包名,其中,原始包名用于在进行类替换时类文件位置的定位。
优选地,在解析反编译得到的AndroidManifest.xml文件之后,上述方法还可以包括:获取APK文件的Application的信息;在APK文件有继承自Application的子类的情况下,将自定义的Application子类代码注入到smali文件的Application子类代码中;在APK文件没有继承自Application的子类的情况下,在AndroidManifes.xml中添加android:name的属性,其中,属性的值是自定义的Application子类的完整名称。
优选地,在解析反编译得到的AndroidManifest.xml文件之后,上述方法还可以包括:将smali文件中的Activity子类的父类替换成自定义的Activity子类BaseActivity。其中,在Activity子类可以扩展需要执行的服务或者功能,例如,可以在Activity子类中启动自定义的服务,或者从服务器获取加解密密钥的功能等。
优选地,为了能对进行过代码注入的APK文件进行标识,在将smali文件中用于执行I/O操作的代码替换为自定义的代码之后,可以在AndroidManifest.xml中增加用于指示进行过代码替换操作的标记。
在本实施例中还提供了一种加解密功能的实现装置,用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述,下面对该装置中涉及到的模块进行说明。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图2是根据本发明实施例的加解密功能的实现装置的结构示意图,如图2所示,该装置包括:反编译模块22、替换模块24和编译模块26,其中,反编译模块22,用于对APK文件进行反编译,得到smali文件;替换模块24,耦合至反编译模块22,用于将smali文件中用于执行I/O操作的代码替换为自定义的代码,其中,自定义的代码用于执行I/O操作以及对I/O的数据进行加解密操作;编译模块26,耦合至替换模块24,用于对替换过的smali文件进行编译并签名,得到新的APK文件。
优选地,替换模块24用于将smali文件中用于执行I/O操作的类替换为自定义的类,其中,用于执行I/O操作的类包括但不限于以下至少之一:FileOutputStream、FileInputStream、、FileReader、FileWriter、RandomAccessFile等。
优选地,替换模块24包括:确定单元242,用于确定smali文件所使用到的用于执行I/O操作的类;替换单元244,耦合至确定单元242,用于将smali文件所使用到的用于执行I/O操作的类替换为自定义的类。
优选地,所述装置还包括:解析模块,耦合至反编译模块22和替换模块24之间,用于解析反编译APK文件得到的AndroidManifest.xml文件,得到原始包名,其中,原始包名用于在进行类替换时类文件位置的定位。
优选地,所述装置还包括:获取模块,耦合至解析模块,用于获取反编译得到的APK文件的Application的信息;处理模块,耦合至获取模块,用于在APK文件有继承自Application类的子类情况下,将自定义的Application子类代码注入到APK文件的Application子类smali代码中;和/或,在APK文件没有继承自Application的子类的情况下,在AndroidManifes.xml中添加android:name的属性,其中,属性的值是自定义的Application子类的完整名称。
优选地,所述装置还包括第二替换模块,耦合至解析模块,用于将反编译得到的smali文件中的Activity子类的父类替换成自定义的Activity子类。
优选地,所述装置还包括:注入模块,耦合至替换模块24和编译模块26之间,用于在AndroidManifest.xml中增加用于指示进行过代码替换操作的标记。
本发明实施例还提供了一种服务器。为了向用户提供APK文件处理的服务,用户可以通过服务器提供的接口(例如门户网站)上传APK文件,在APK文件经过服务器处理后,再由用户下载新的APK文件。
图3是根据本发明实施例的服务器的结构示意图,如图3所示,该服务器包括上述的加解密功能的实现装置32;其中,服务器还包括:第一获取装置34,耦合至加解密功能的实现装置32,用于获取APK文件;提供装置36,耦合至加解密功能的实现装置32,用于提供新的APK文件,以供用户下载。
优选地,第一获取装置34是通过国际互联网络或者局域网络获取该APK文件的。
优选地,服务器还包括:第二获取装置,用于获取签名新的APK文件的keystore。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
为了使本发明实施例的描述更加清楚,下面结合优选实施例进行描述和说明。
本发明优选实施例提供了一种企业移动应用文件加解密的方法和装置,该优选实施例涉及例如安卓(Android)应用的smali代码注入技术和终端应用的开发领域。
为了提供简单灵活的工具,在没有企业移动应用源码的情形下,通过smali代码注入的方式为企业移动应用增加读写加解密文件的能力,在本发明优选实施例中采用以下技术方案:
用户使用用户名和密码登录门户网站,上传所要打包的应用,选择加解密打包项进行相关的配置,后台自动打包注入,打包成功后下载,安装到手机上即可使用有读写加解密文件功能的应用。
其中的打包流程包括如下过程:判断上传的应用是不是APK文件,以及该应用是否已经增加过加解密功能,如果不是合法的APK文件或者已经增加过加解密功能,则退出打包流程。通过检查后,反编译上传的应用。分析反编译得到的AndroidManifest.xml文件,记录启动Activity、包名等信息,分析反编译得到的smali代码,看是否有注入的地方,如有注入的地方,修改原APK文件的smali代码进行注入,并拷贝加解密使用的相关文件到相应的文件夹,如.so文件,注入的smali文件等,并修改AndroidManifest.xml文件相关的项,最后重新编译并签名得到注入过读写加解密代码的应用。
被注入过加解密代码的APK文件具有读写加解密文件功能的原理如下:
1、由于修改了AndroidManifest.xml文件,注入了新的Application代码,应用刚启动会执行指定的Application子类中的代码,完成初始化等操作。
2、使用应用的过程中,代码运行到需要写文件的地方,如调用FileOutputStream类的相关方法,由于注入了代码,FileOutputStream类被替换成自定义的具有加密功能的类(在本实施例中记为MyFileOutputStream),实际上调用的是MyFileOutputStream中相关的方法,完成写入密文的操作。
3、应用运行到需要读文件的地方,与写文件类似,实际上运行的代码是注入后的具有读密文功能的代码。
4、实际上所有读写文件的I/O操作的代码都被替换成注入的代码,而注入的代码是继承原先java类库提供I/O的代码,加入了加解密的部分,这样原先只能读写明文的APK文件就具有了读写密文的功能。
另外,在一些优选的实施例中,由于java的I/O操作的类比较多,在注入的时候,可以根据原APK smali代码的解析,动态的选择所需要注入的类,而不会把所有重写的具有加解密功能的类都拷贝到其中去。比如,原APK文件只使用了FileOutputStream和FileInputStream,系统只需注入自定义的FileOutputStream和自定义的FileInputStream类,而不用把自定义的FileReader等注入进去,这样不仅可以提高注入的性能,还能防止注入后APK文件过大。
下面结合附图对smali代码注入实现增加读写加解密功能的技术方案的实施进行描述。
在浏览器中输入门户网站的网页地址(URL),输入用户名和密码,点击登录。从本地选择要上传打包的应用。上传成功后在应用列表中可以看到。选择应用,点击打包在弹出的页面中输入打包信息,描述,选择文件加解密打包项,点击打包,即可开始打包,打包过程可能会持续一段时间。打包成功后可以查看日志,并可以将打包后的应用下载到本地安装到手机终端上。
打包的流程如图4所示,先将原始的APK文件反编译到一个目录,再将反编译后的文件拷贝到一个目标目录,接着解析原APK文件的smali代码,记录注入点,并将注入所需要的smali文件拷入到目标目录,修改原APK文件的smali以实现注入,包括处理AndroidManifetste.xml,最后运行apktool将目标目录打成APK文件,最后对重新生成的APK文件进行签名即可得到注入了加解密代码的APK文件。
打包注入的优选流程如图5所示,描述如下:
步骤S501:判断要打包的APK文件是否已经注入过相同的代码,在这个过程中可还可以判断出APK文件是否是真正的APK文件,如果是真正的APK文件而且没有注入过相同的代码,则进行步骤S502,否则退出。
步骤S502:反编译待注入的APK文件到指定目录,若成功则执行步骤S503,否则退出。
步骤S503:检测目标目录是否含有.so文件,若有.so文件给出提示“该应用含有so库,文件加解密加固存在不可预知风险,是否继续”,若选择是则继续步骤S504,否则退出。
步骤S504:解析并分析原APK文件的smali代码,查找是否有文件I/O操作,若有则继续步骤S505,否则表示原APK文件没有注入点,不需要注入,退出。
步骤S505:拷贝反编译得到的文件和注入所需要的文件到目标文件夹。
步骤S506:解析原始APK文件的AndroidManifest.xml文件,得到原始包名。
步骤S507:获取原始APK文件的Application的信息。若原始APK文件有继承自Application的子类,则将自定义的类代码注入到原始的Application子类smali代码中,若没有继承自Application的子类,则修改AndroidManifes.xml加入android:name的属性,值是自定义的Application子类的完整名称。
步骤S508:注入自定义的BaseActivity,将所有原APK文件中的Activity子类的父类替换成BaseActivity。
步骤S509:注入读写加解密的smali代码,将原始I/O操作的代码替换成加解密的代码。
步骤S510:处理原始APK文件的图标,加上打过包的标记,作为和原始APK文件的区别。
步骤S511:处理AndroidManifest.xml的其它内容,如加上注入过加解密代码的标记,增加缺少的权限(permission)等。
步骤S512:调用APK工具(apktool)编译目标文件夹,若成功构建则生成注入代码后未签名的APK文件,如果失败则退出。
步骤S513:调用jar签名器(jarsigner)签名上一步生成的APK文件。
步骤S514:将已签名的APK文件拷贝到指定目录,流程结束。
其中,反编译的过程用到了apktool,步骤S505到步骤S509是在处理AndroidManifest.xml的内容,注入相关smali代码。最后打包生成的APK文件用到了jarsigner签名,签名的密钥库(keystore)可以通过门户上传。原始APK文件如果没有Application,则使用注入的代码,如果有,则会在原始Application末尾注入关于加解密的smali代码,这样在打过包的APK文件启动时会先执行原始的代码再执行注入的代码完成初始化的工作。
此外,注入使用的smali文件,可以采用不同的加密方式实现,每一种算法表示一种加解密方案。并且由上述描述可知,本发明优选实施例中可以灵活的替换加解密方案,不需要更改原有架构。
综上所述,通过本发明的上述实施例和优选实施例,可以在无需获得原来APK文件源码的前提下通过代码注入的方式赋予移动应用读写文件加解密的能力,从而可以灵活方便的定制和改造原有的企业移动应用,增加应用数据的安全性。
在另外一个实施例中,还提供了一种软件,该软件用于执行上述实施例及优选实施方式中描述的技术方案。
在另外一个实施例中,还提供了一种存储介质,该存储介质中存储有上述软件,该存储介质包括但不限于:光盘、软盘、硬盘、可擦写存储器等。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的对象在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种加解密功能的实现方法,其特征在于包括:
对安卓安装包APK文件进行反编译,得到smali文件,并确定所述smali文件中所使用到的用于执行I/O操作的类;
将所述smali文件所使用到的用于执行I/O操作的类替换为用于执行I/O操作以及对I/O的数据进行加解密操作的自定义的类,其中,所述用于执行I/O操作的类包括以下至少之一:FileOutputStream、FileInputStream、FileReader、FileWriter、RandomAccessFile;
对已替换为自定义的类的smali文件进行编译并签名,得到新的APK文件。
2.根据权利要求1所述的方法,其特征在于,在将所述smali文件中用于执行I/O操作的类替换为自定义的类之前,所述方法还包括:
解析所述APK文件的AndroidManifest.xml文件,得到原始包名,其中,所述原始包名用于在进行注入替换时smali文件位置的定位。
3.根据权利要求2所述的方法,其特征在于,在解析所述APK文件的AndroidManifest.xml文件之后,所述方法还包括:
获取所述APK文件的Application的信息;
在所述APK文件有继承自Application类的子类的情况下,将自定义的Application子类smali代码注入到所述smali文件本身的Application子类代码中;
在所述APK文件没有继承自Application子类的情况下,在AndroidManifes.xml中添加android:name的属性,其中,所述属性的值是自定义的Application子类的完整名称。
4.根据权利要求2所述的方法,其特征在于,在解析所述APK文件的AndroidManifest.xml文件之后,所述方法还包括:
将所述smali文件中的继承自Activity子类的父类替换成自定义的Activity子类BaseActivity。
5.根据权利要求1所述的方法,其特征在于,在将所述smali文件中用于执行I/O操作的类替换为自定义的类之后,所述方法还包括:
在AndroidManifest.xml中增加用于指示进行过类替换操作的标记。
6.一种加解密功能的实现装置,其特征在于包括:
反编译模块,用于对安卓安装包APK文件进行反编译,得到smali文件,并确定所述smali文件中所使用到的用于执行I/O操作的类;
替换模块,用于将所述smali文件所使用到的用于执行I/O操作的类替换为用于执行I/O操作以及对I/O的数据进行加解密操作的自定义的类,其中,所述用于执行I/O操作的类包括以下至少之一:FileOutputStream、FileInputStream、FileReader、FileWriter、RandomAccessFile;
编译模块,用于对已替换为自定义的类的smali文件进行编译并签名,得到新的APK文件。
7.一种服务器,其特征在于包括:如权利要求6所述的加解密功能的实现装置;其中,所述服务器还包括:
第一获取装置,用于获取所述安卓安装包APK文件;
提供装置,用于提供所述新的APK文件。
8.根据权利要求7所述的服务器,其特征在于,所述服务器还包括:
第二获取装置,用于获取签名所述新的APK文件的密钥库keystore。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510331292.1A CN106326691B (zh) | 2015-06-15 | 2015-06-15 | 加解密功能的实现方法、装置及服务器 |
PCT/CN2015/092988 WO2016201853A1 (zh) | 2015-06-15 | 2015-10-27 | 加解密功能的实现方法、装置及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510331292.1A CN106326691B (zh) | 2015-06-15 | 2015-06-15 | 加解密功能的实现方法、装置及服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106326691A CN106326691A (zh) | 2017-01-11 |
CN106326691B true CN106326691B (zh) | 2021-06-18 |
Family
ID=57546761
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510331292.1A Active CN106326691B (zh) | 2015-06-15 | 2015-06-15 | 加解密功能的实现方法、装置及服务器 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN106326691B (zh) |
WO (1) | WO2016201853A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108762775A (zh) * | 2018-05-24 | 2018-11-06 | 苏州乐麟无线信息科技有限公司 | 一种安装包的打包方法和装置 |
CN109492353B (zh) * | 2018-10-11 | 2024-04-16 | 北京奇虎科技有限公司 | 应用加固方法、装置、电子设备和存储介质 |
CN111124444B (zh) * | 2018-11-01 | 2023-12-19 | 百度在线网络技术(北京)有限公司 | 代码注入的方法及其装置、计算机程序产品、存储介质 |
CN109814912A (zh) * | 2018-12-15 | 2019-05-28 | 中国平安人寿保险股份有限公司 | 应用程序打包方法及系统 |
CN110896540A (zh) * | 2019-11-21 | 2020-03-20 | 国网辽宁省电力有限公司电力科学研究院 | 移动互联网客户端安全评估工具、方法、计算机设备及存储介质 |
CN113190263B (zh) * | 2021-04-21 | 2022-05-17 | 宝宝巴士股份有限公司 | 一种集成第三方sdk的方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103365699A (zh) * | 2012-12-21 | 2013-10-23 | 北京安天电子设备有限公司 | 基于apk的系统api和运行时字符串提取方法及系统 |
CN104102880A (zh) * | 2014-06-30 | 2014-10-15 | 华中科技大学 | 一种检测Android权限提升攻击的应用程序重写方法和系统 |
CN104463002A (zh) * | 2014-12-24 | 2015-03-25 | 北京奇虎科技有限公司 | 一种加固apk的方法和装置以及apk加固客户端和服务器 |
CN104484585A (zh) * | 2014-11-26 | 2015-04-01 | 北京奇虎科技有限公司 | 一种应用程序安装包的处理方法、装置及移动设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104156225B (zh) * | 2013-05-14 | 2018-07-06 | 腾讯科技(深圳)有限公司 | 一种安装包的下载方法、系统及服务器 |
CN104021346B (zh) * | 2014-06-06 | 2017-02-22 | 东南大学 | 基于程序流程图的Android恶意软件检测方法 |
-
2015
- 2015-06-15 CN CN201510331292.1A patent/CN106326691B/zh active Active
- 2015-10-27 WO PCT/CN2015/092988 patent/WO2016201853A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103365699A (zh) * | 2012-12-21 | 2013-10-23 | 北京安天电子设备有限公司 | 基于apk的系统api和运行时字符串提取方法及系统 |
CN104102880A (zh) * | 2014-06-30 | 2014-10-15 | 华中科技大学 | 一种检测Android权限提升攻击的应用程序重写方法和系统 |
CN104484585A (zh) * | 2014-11-26 | 2015-04-01 | 北京奇虎科技有限公司 | 一种应用程序安装包的处理方法、装置及移动设备 |
CN104463002A (zh) * | 2014-12-24 | 2015-03-25 | 北京奇虎科技有限公司 | 一种加固apk的方法和装置以及apk加固客户端和服务器 |
Non-Patent Citations (1)
Title |
---|
Android应用程序的恶意代码静态注入;黄超等;《技术天地》;20140131;第41-45页 * |
Also Published As
Publication number | Publication date |
---|---|
WO2016201853A1 (zh) | 2016-12-22 |
CN106326691A (zh) | 2017-01-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106326691B (zh) | 加解密功能的实现方法、装置及服务器 | |
JP6815385B2 (ja) | アプリケーションのコード難読化のためのシステムおよび方法 | |
CN108229112B (zh) | 一种保护应用程序、应用程序的运行方法以及装置 | |
CN102473220B (zh) | 信息处理装置、信息处理方法以及程序分发系统 | |
US10592696B2 (en) | CPU obfuscation for cloud applications | |
CN104680039B (zh) | 一种应用程序安装包的数据保护方法及装置 | |
AU2012337403B2 (en) | Cryptographic system and methodology for securing software cryptography | |
CN104462959A (zh) | 一种安卓应用的加固保护方法、服务器和系统 | |
KR102433011B1 (ko) | Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체 | |
CN109784007B (zh) | 一种字节码加密的方法、字节码解密的方法及终端 | |
Kovacheva | Efficient code obfuscation for Android | |
CN108363580A (zh) | 应用程序安装方法、装置、计算机设备和存储介质 | |
CN104392181A (zh) | So文件的保护方法、装置及安卓安装包的加固方法和系统 | |
US20150294114A1 (en) | Application randomization | |
Piao et al. | Server‐based code obfuscation scheme for APK tamper detection | |
US11301357B1 (en) | Method to check application programming interface correctness in software | |
CN108399319A (zh) | 源代码保护方法、应用服务器及计算机可读存储介质 | |
Kim et al. | Android Application Protection against Static Reverse Engineering based on Multidexing. | |
CN112153012B (zh) | 多端触点接入方法、装置及存储介质 | |
CN112966227A (zh) | 代码加密解密方法和装置、存储介质 | |
CN103824021A (zh) | 一种浏览器设置项的设置方法和装置 | |
CN113893550A (zh) | 脚本源码处理方法及相关设备 | |
Pan et al. | Advertisement removal of Android applications by reverse engineering | |
KR101863325B1 (ko) | 역공학 방지 방법 및 장치 | |
Tran et al. | Security issues in android application development and plug-in for android studio to support secure programming |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |