对so文件中的导出符号进行保护的方法及装置的制造方法

文档序号:9687810阅读:1000来源:国知局
对so文件中的导出符号进行保护的方法及装置的制造方法
【技术领域】
[0001]本发明涉及应用程序安全性技术领域,特别是涉及一种对so文件中的导出符号进行保护的方法及装置。
【背景技术】
[0002]随着安卓(Android)智能设备的高速发展,移动终端的安全问题也逐渐暴露出来。
[0003]Android应用程序(APP)被逆向破解,难度非常低,在dex(是Android平台下由Dalvik字节码组成的可执行文件,Dalvik是Google公司自己设计用于Android平台的Java虚拟机)层面,甚至可以直接反编译出java源码进行阅读,为了提高Android应用的安全性,Google提供了 ProGuard工具,在生成Android安装包(apk)的时候,能够按照用户配置,对java代码中的类名、函数名进行混淆,变成一些无意义的字符串,破解者即使反编译成java代码,也无法根据这些名称来分析类或者函数的作用,极大增强了软件的安全性。
[0004]但是,大部分情况下,一个Android应用由两个部分组成:java层面的dex文件和native层面的so (是linux下的动态链接库文件)文件,这两个部分是独立的,so文件相当于一个模块,开发者可以在java层调用so文件的导出方法。然而,大部分应用中,so文件中才是最核心的代码,ProGuard工具对so文件的保护却无能为力。

【发明内容】

[0005]本发明主要解决的技术问题是提供一种对so文件中的导出符号进行保护的方法及装置,能够实现对so文件的保护,从而进一步加强应用程序的安全性。
[0006]为解决上述技术问题,本发明采用的一个技术方案是:提供一种对so文件中的导出符号进行保护的方法,所述方法包括:从so文件中逐一找到导出符号的字符串在所述so文件中的位置;获取所述位置的原始符号名称,并对所述位置的原始符号名称进行混淆处理;获取与所述位置的原始符号名称的长度相同的混淆后的符号名称;将所述混淆后的符号名称作为新的导出符号写入所述so文件中的对应位置。
[0007]其中,所述从so文件中逐一找到导出符号的字符串在所述so文件中的位置的步骤,包括:通过系统命令找到所述导出符号在所述so文件中的位置信息;根据所述导出符号在所述so文件中的位置信息,从所述so文件中逐一找到所述导出符号的字符串在所述so文件中的位置。
[0008]其中,所述获取所述位置的原始符号名称,并对所述位置的原始符号名称进行混淆处理的步骤,包括:获取所述位置的原始符号名称,并判断所述位置的原始符号名称是否可以混淆处理;若所述位置的原始符号名称是可以混淆处理的,则对所述位置的原始符号名称进行混淆处理。
[0009]其中,所述判断所述位置的原始符号名称是否可以混淆处理的步骤,包括:若所述原始符号名称不是JNI_0nload、JNI_Unload或者以java_开头的字符串,则判断出所述位置的原始符号名称是可以混淆处理的。
[0010]其中,所述对所述位置的原始符号名称进行混淆处理的步骤,包括:通过消息摘要算法第五版MD5对所述位置的原始符号名称进行混淆处理。
[0011]为解决上述技术问题,本发明采用的另一个技术方案是:提供一种对so文件中的导出符号进行保护的装置,所述装置包括:找到模块,用于从so文件中逐一找到导出符号的字符串在所述so文件中的位置;混淆模块,用于获取所述位置的原始符号名称,并对所述位置的原始符号名称进行混淆处理;获取模块,用于获取与所述位置的原始符号名称的长度相同的混淆后的符号名称;写入模块,用于将所述混淆后的符号名称作为新的导出符号写入所述so文件中的对应位置。
[0012]其中,所述找到模块包括:第一找到单元,用于通过系统命令找到所述导出符号在所述so文件中的位置信息;第二找到单元,用于根据所述导出符号在所述so文件中的位置信息,从所述so文件中逐一找到所述导出符号的字符串在所述so文件中的位置。
[0013]其中,所述混淆模块包括:获取单元,用于获取所述位置的原始符号名称,判断单元,用于判断所述位置的原始符号名称是否可以混淆处理;混淆单元,用于在所述位置的原始符号名称是可以混淆处理时,对所述位置的原始符号名称进行混淆处理。
[OOM] 其中,所述判断单元具体用于在所述原始符号名称不是JNI_0nload、JNI_Unload或者以」&似_开头的字符串时,判断出所述位置的原始符号名称是可以混淆处理的。
[0015]其中,所述混淆模块具体用于通过消息摘要算法第五版MD5对所述位置的原始符号名称进行混淆处理。
[0016]本发明的有益效果是:区别于现有技术的情况,本发明从so文件中逐一找到导出符号的字符串在so文件中的位置;获取该位置的原始符号名称,并对该位置的原始符号名称进行混淆处理;获取与该位置的原始符号名称的长度相同的混淆后的符号名称;将混淆后的符号名称作为新的导出符号写入so文件中的对应位置。由于对so文件的导出符号进行混淆,通过这种方式,能够实现对so文件的保护,从而进一步加强应用程序的安全性。
【附图说明】
[0017]图1是Android系统的架构示意图;
[0018]图2是本发明对so文件中的导出符号进行保护的方法一实施方式的流程图;
[0019]图3是本发明对so文件中的导出符号进行保护的方法另一实施方式的流程图;
[0020]图4是本发明对so文件中的导出符号进行保护的方法又一实施方式的流程图;
[0021]图5是本发明对so文件中的导出符号进行保护的装置一实施方式的结构示意图;
[0022]图6是本发明对so文件中的导出符号进行保护的装置另一实施方式的结构示意图;
[0023]图7是本发明对so文件中的导出符号进行保护的装置又一实施方式的结构示意图。
【具体实施方式】
[0024]在详细介绍本发明之前,先说明一下与本发明相关的技术。
[0025]Android是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序。Android采用WebKit浏览器引擎,具备触摸屏、高级图形显示和上网功能,用户能够在手机上查看电子邮件、搜索网址和观看视频节目等,是一种融入全部Web应用的单一平台。
[0026]Android的系统架构和其操作系统一样,采用了分层的架构。参见图1,图1是An droid的系统架构示意图,从架构图看,Android分为四个层,从高层到低层分别是:应用程序层10、应用程序框架层20、系统运行库层30和linux核心层40。
[0027](1)在应用程序层10,Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。
[0028](2)在应用程序框架层20,开发人员可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用,任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块。同样,该应用程序重用机制也使用户可以方便的替换程序组件。隐藏在每个应用后面的是一系列的服务和系统,其中包括:
[0029]丰富而又可扩展的视图(Views),可以用来构建应用程序,它包括列表(lists)、网格(grids)、文本框(text boxes)、按钮(buttons),甚至可嵌入的web浏览器;
[0030]内容提供器(ContentProviders),其使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据;
[0031]资源管理器(Resource Manager),其提供非代码资源的访问,如本地字符串、图形和布局文件(layout files);
[0032]通知管理器(Notificat1n Manager),其使得应用程序可以在状态栏中显示自定义的提示信息;
[0033]活动管理器(ActivityManager),用来管理应用程序生命周期并提供常用的导航回退功能。
[0034](3)系统运行库层30包括程序库和Android运行库。
[0035]1)程序库:
[0036]Android包含一些C/C++库,
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1