哈希游戏- 哈希游戏平台- 哈希游戏官方网站
::目前,业内常用的现有技术是这样的:android应用程序采用了签名机制来保证开发者的唯一性,对apk的完整性和唯一性进行校验。所有的android应用程序,包括系统应用,必须由开发者签名。具体的签名过程:1)将apk中的所有资源文件进行sha-1(也支持sha-256)运算,将摘要使用base64进行编码产生sha1-digest-manifest的值并进行格式规整,写入manifest.mf文件。2)将manifest.mf文件使用rsasha-1算法进行hash,并将manifest.mf文件中的每一个属性消息再做hash,写入cert.sf文件。3)使用开发者私钥对cert.sf文件签名,并加上公钥一同写入cert.rsa文件。在安装apk时过程相反。因为android代码签名机制是基于javajar签名机制的,所以它与许多代码签名方案一样,使用公钥加密和x.509证书。但是两者还是有一些区别,android不以pki形式验证证书,只是使用相同的证书和签名格式。android系统应用是用平台密钥(platformkey)签名的,代表不同的系统组件之间可以共享资源,如果被相同的平台密钥签名后,可以在一个进程中运行。每一个应用都必须有一个数字证书,这样可以将应用程序与作者绑定,如果没有数字证书,则不能被安装。但是,android应用程序首次发布时授予的都是正常权限,如果攻击者将危险权限加入此软件后重新发布,目前android机制无法检测出授权危险权限的这种应用程序。为了保障商用密码安全,国家商用密码管理办公室制定了一系列密码标准,2010年12月17日,国家密码管理局公布了sm3杂凑算法,对长度为l(l<264)比特的消息m经过填充和迭代压缩,生成杂凑值,杂凑值长度为256比特。目前android市场上对于apk的校验都是基于密码算法md5、sha-1等传统密码算法,这些密码算法不适用我国在通信安全方面的法律要求,并且我国密码学家王小云破解了包括md5、sha-1等杂凑密码算法,说明md5、sha-1已经不再安全,使用这些杂凑算法计算apk完整性已不再合适,sm3杂凑算法安全性已高于md5、sha-1等,sm3是我国自主研发的密码算法,使用此算法,国外恶意攻击者攻击难度大,安全性得到保障。android作为开源的操作系统,每年受到恶意软件的攻击量持续增加,新的恶意软件种类层出不穷,用户的隐私资料很难得到保护。综上所述,现有技术存在的问题是:android系统经常受恶意软件的攻击,虽然android系统有自身的安全机制,但是针对android设备攻击的类型不断增加,勒索软件成为新的攻击方式,用户的隐私安全受到很大的挑战,恶意攻击的增加导致用户数据随时有泄露的风险,所以使用国密算法sm3校验apk的完整性,对恶意软件的检测多了一层保障。解决上述技术问题的难度:android软件更新版本快,每个版本的apkhash值不同,校验难度会随着版本的改变而增大。解决上述技术问题的意义:基于国密算法sm3的apk完整性校验,是将我国自主研发的密码算法应用到android操作系统,用于检测恶意软件,从而使apk的完整性校验不再局限于md5等传统密码算法,安全性上得到提高,更好的保护我国公民的数据安全,也增强了android安全机制,是国密算法一次很好的应用。技术实现要素:针对现有技术存在的问题,本发明提供了一种基于国密算法sm3的apk完整性校验方法、计算机程序。本发明是这样实现的,一种基于国密算法sm3的apk完整性校验方法,所述基于国密算法sm3的apk完整性校验方法通过messagedigest对安装到android手机的apk使用国密算法sm3进行完整性计算得到hash值,将得到的hash值与保存在手机数据库中正确hash值比较;如果比较结果正确,apk完整,没有经过攻击者篡改以及没有恶意病毒,如果比较结果错误,两个hash值不一致,apk不是正确版本,卸载或禁止安装。进一步,所述基于国密算法sm3的apk完整性校验方法具体包括:第一步,分析android应用程序安全机制、完整性校验原理;第二步,获取apk信息;第三步,计算apk的sm3hash值;第四步,获取android数据库保存的正确hash值;第五步,检测apk的完整性;第六步,卸载或安装应用程序。进一步,所述第一步的分析android应用程序安全机制具体包括:android使用dalvik和基于linux的文件访问控制实现沙箱机制,任何app如果想要访问其它app的资源或者系统在自己的manifest文件中进行声明权限或者共享uid。进一步,所述第一步的分析完整性校验原理包括:选择用国密算法sm3计算整个apk的完整性。进一步,所述第二步的获取apk信息通过androidsdk中的packagemanager类获取apk的基本信息,packagemanager类即可以管理包,也可以获得应用程序包的信息,通过getpackagemanager()方法获取,获取应用程序的activity,application,service,receiver,provider相应属性;通过application获得应用程序的包名、应用名、图标;获得应用程序的包名通过stringpackagename=packageinfo.packagename;得到apk信息后,计算相应apk的sm3hash值。进一步,所述第三步计算apk的sm3hash值通过messagedigest类对安装到手机的apk文件进行sm3hash值计算;当收到加密数据和消息摘要时,从数据中重新计算消息摘要,并检查计算的摘要值是否与随数据一起收到的消息摘要相匹配;两个消息摘要相同,则在传输期间未传递数据;进一步,所述第四步的获取android数据库中保存的正确hash值具体包括:a)调用sqlitedatabase类的execsql()方法来执行ddl语句;db.execsql(createtablesm3_hash(_idintegerprimarykeyautoincrement,titletext,valuereal););创建了一个名为sm3_hash的数据表;b)将正确的hash值hash_r,调用execsql()方法执行insert语句来写入数据,并保存在数据库中;在传入之前对hash_r值进行加密,当需要调用hash_r值时,对它解密;c)使用query()构建一个查询,通过getstring()得到给定字段当前保存的值,因b)中对传入的hash_r值进行加密,getstring()方法得到的值进行解密;所述第五步的检测apk的完整性通过第四步计算得到应用程序的sm3hash值sm3,将sm3与步骤五中保存正确的hash_r值作比较,如果两个值相同,说明apk没有经过篡改,是正确且合法的应用程序;如果两个值不同,说明检测的应用程序不是正确版本或经过了篡改,包含恶意代码攻击手机;所述第六步的比较的值相同,同意安装或更新此应用程序;比较的值不同,调用androidpackagemanager类卸载此应用程序,packagemanager类提供的uninstall方法静默卸载apk,若apk还未安装,直接在文件管理中将其删除。本发明的另一目的在于提供一种实现所述基于国密算法sm3的apk完整性校验方法的计算机程序。本发明的另一目的在于提供一种实现所述基于国密算法sm3的apk完整性校验方法的信息数据处理终端。本发明的另一目的在于提供一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行所述的基于国密算法sm3的apk完整性校验方法。综上所述,本发明的优点及积极效果为:在android设备上进行测试。表1计算结果有测试结果可知,sm3密码算法和md5和sha-1传统密码算法速度上快很多,更能满足用户体验。附图说明图1是本发明实施例提供的基于国密算法sm3的apk完整性校验方法流程图。图2是本发明实施例提供的基于国密算法sm3的apk完整性校验方法实现流程图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。针对现有android系统经常受恶意软件的攻击,但是目前android应用程序的安全机制很难完全保护用户隐私的问题。本发明基于国密算法sm3的apk完整性校验,是将我国自主研发的密码算法应用到android操作系统,用于检测恶意软件,使apk的完整性校验不再局限于md5等传统密码算法,是国密算法一次很好的应用。下面结合附图对本发明的应用原理作详细的描述。如图1所示,本发明实施例提供的基于国密算法sm3的apk完整性校验方法包括以下步骤:s101:分析android应用程序安全机制、完整性校验原理;s102:获取apk信息;s103:计算apk的sm3hash值;s104:获取android数据库保存的正确hash值;s105:检测apk的完整性;s106:卸载或安装应用程序。下面结合附图对本发明的应用原理作进一步的描述。如图2所示,本发明实施例提供的基于国密算法sm3的apk完整性校验方法具体包括以下步骤:步骤一,分析android应用程序的安全机制android“沙箱”机制实现了不同app和进程之间的互相隔离,即在默认的情况下,app没有权限访问其它app和系统进程的资源。每个app和系统进程都只能活动在唯一固定的userid。每个app运行在各自独立的dalvik虚拟机,拥有独立的地址空间和资源。运行于dalvik中的进程必须依托于linux内核层进程而存在,因此android使用dalvik和基于linux的文件访问控制来实现沙箱机制。任何app如果想要访问其它app的资源或者系统西苑必须在自己的manifest文件中进行声明权限或者共享uid。步骤二,分析完整性校验原理完整性校验就是利用签名算法计算一个文件的完整性,防止这个文件被篡改。比较常见的方法是计算此文件的hash值,本发明验证apk是否完整也可以用到此方法。apk的主要逻辑是通过classes.dex文件执行,classes.dex主要由java文件生成的。所以即可以对classes.dex文件进行完整性校验,也可以对整个apk文件进行完整性校验。本发明选择用国密算法sm3来计算整个apk的完整性,因为如果修改apk文件的string.xml文件虽然不会影响apk的主要逻辑,也会影响到整个程序的运行,所以计算整个apk的完整性更有必要。步骤三,获取apk信息,可以通过androidsdk中的packagemanager类获取apk的基本信息,packagemanager类即可以管理包,也可以获得应用程序包的信息,通过getpackagemanager()方法获取,此方法可以获取应用程序的activity,application,service,receiver,provider等相应属性,通过application本发明可以获得应用程序的包名、应用名、图标等,例如,获得应用程序的包名可以通过下面方法:stringpackagename=packageinfo.packagename;得到apk信息后,本发明可以计算相应apk的sm3hash值。步骤四,计算apk的sm3hash值,通过messagedigest类对安装到手机的apk文件进行sm3hash值计算。messagedigest类为了提供像sha-1、sha-256或md5等密码上安全的报文摘要功能而设计的引擎类。密码上安全的消息摘要可以输入可以是任意大小,并产生固定大小的输出,该输出称为消息摘要。当收到加密数据和消息摘要时,可以从数据中重新计算消息摘要,并检查计算的摘要值是否与随数据一起收到的消息摘要相匹配。如果两个消息摘要相同,则有可能在传输期间未传递数据。a)创建messagedigest实例计算应用程序hash值第一步是创建javamessagedigest实例,调用该类的静态getinstance()方法:messagedigestmessagedigest=messagedigest.getinstance(“消息摘要算法”);消息摘要算法有:sha-1、sha-256或md5等,本发明使用的是国密算法sm3。b)传入需要计算的apk信息计算应用程序hash值的第二步是向已初始化的消息摘要对象提供数据。本发明可以通过方法3中描述获得应用程序数据:packageinfopak=(packageinfo)pmlist.get(i);stringapkdir=pak.applicationinfo.sourcedir;本发明将得到的apkdir值作为初始化的消息摘要对象。c)计算摘要值获得消息摘要数据后,本发明就可以调用国家密码算法sm3计算其摘要值,sm3=sm3.bytearraytohexstring(sm3.hash(apkdir.getbytes()));如上面代码所示,本发明调用国家密码算法sm3的hash值方法,计算apk的hash值,并调用bytearraytohexstring方法将hash值转为字符串类型,获得的sm3就是本发明需要得到的摘要值。步骤五,获取android数据库中保存的正确hash值android虚拟机集成了sqlite数据库,所以android应用程序都可以使用sqlite,为了提高速度减少消耗,android为开发者提供一些新的api来使用sqlite,本发明只需要调用这些api。a)创建sm3_hash数据表android提供了sqliteopenhelper类来创建一个数据库,只要继承此类就可以轻松创建数据库。为了创建表和索引,调用sqlitedatabase类的execsql()方法来执行ddl语句。db.execsql(createtablesm3_hash(_idintegerprimarykeyautoincrement,titletext,valuereal););创建了一个名为sm3_hash的数据表。b)向sm3_hash数据表写入正确的hash值本发明将正确的hash值hash_r,调用execsql()方法执行insert语句来写入数据,并保存在数据库中,为保证hash_r值不被篡改,本发明在传入之前对hash_r值进行加密,当需要调用hash_r值时,对它解密。c)调用正确的hash值使用query()方法可以构建一个查询,通过getstring()方法得到给定字段当前保存的值,因b)中本发明对传入的hash_r值进行加密,getstring()方法得到的值本发明需要进行解密。步骤六,检测apk的完整性通过步骤四本发明可以计算得到应用程序的sm3hash值sm3,本发明将sm3与步骤五中保存正确的hash_r值作比较,如果两个值相同,说明apk没有经过篡改,是正确且合法的应用程序;如果两个值不同,说明检测的应用程序不是正确版本或经过了篡改,里面可能包含恶意代码用来攻击手机。步骤七,安装或卸载应用程序如果步骤六中到比较的值相同,本发明可同意安装或更新此应用程序,如果比较的值不同,本发明可调用androidpackagemanager类来卸载此应用程序,packagemanager类提供的uninstall方法可静默卸载apk,若apk还未安装,可以直接在文件管理中将其删除。表1如表1所示,对com.example.mobilesecure应用程序更改后,可成功检测出其版本发生改变,hash值发生变化。在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用全部或部分地以计算机程序产品的形式实现,所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输)。所述计算机可读取存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12