《2024移动APP风险防护与安全测评手册安卓平台.docx》由会员分享,可在线阅读,更多相关《2024移动APP风险防护与安全测评手册安卓平台.docx(59页珍藏版)》请在第壹文秘上搜索。
1、移动APP风险防护刖三 APP面临的安全威胁 APP加固APP原理:APP反编译保护 APP反汇编保护APP防篡改保护 APP防调试与注入保护APP脱壳攻击测试前言AndrOid开发者常常面临的一个问题就是防破解、防二次打包。现如今,安全问题越来越重要,越来越多的Android开发者也开始寻求安全的保护方案。:盗版、数据篡改、山寨:代码修改(广告植入、移除)资源修改(界面替换广告页面、链接篡改)。破解(解除应用付费)篡改应用数据(游戏金币篡改):挂马、添加恶意代码以及病毒(隐私窃取、交易篡改等):动态注入:数据监听、拦截、窃取、修改:本地数据修改、数据库文件修改:服务器欺骗、向服务器发送假数据
2、5E0CD7605E0CD7705E0CD7805EOCD7905E0CD7A05E0CD7B05E0CD7C05E0CD7D05EOCD7E05E0CD7F05EOCD80O5EOCD810Qq687B2254582C382222434522492222395F434252434F444E222CUE006514E44457465633A4F593A22334445223A223144223A2222682E222232223A4D6E432222426900483A315371794922334B7500624422533645563430313A223322222C362C3322352
3、230333633504134226D6F373259652236532C00D30800003A22223030323322722C2253226465353A73222C57552236226953224F533A2C3138226F45535245222222392C6E434B445231zhCN.e.y.b|CGRANCHIJTXCODE,Z,S70021,fDN,13623568989MBSKEV:,ftechniquUersion,3.40103,SECC0DE,3636,SKEy“:.”,.passWORD,123654,USERID,11odez,1,监听拦截窃取修改MENU
4、-RTMENl1.SEQMEHU.IHDEXBlEliU_UAlEMEHU_TYPE1.DKJJR1.TIT1.E20320305EOfi三Ei,倒2/rvltc信用卡查调2032030621账单查询1X信用卡查询20320308W积分查询2/srvltc信用卡查词20320309q人民币还款1Xk信用卡还款2032031050购汇还薇2/servletc信用卡还款20320311N取消购汇还款2/strvlttc信用卡还款2032030170信用卡申请2/xrvltc信用卡申请及开卡2032030280申请进度查询2/servletc信用卡申请及开卡2032030394信用卡开卡2/clin
5、tHE信用卡申请及开卡20320304IN账单分期申请1XXq信用卡分期20320307Iq账单分期查询2/servletc信用卡分期203212120信用卡挂失2Zsrvltc信用卡管理20320313妁定运款设置1Xjfdhksz信用卡7D0000000000000000000000000000:应用名称复制或模仿:应用图标复制或模仿:应用内容复制或模仿为了加强APP安全性,越来越多的开发者选择APP加固方案对APP进行加固保护来防止二次打包(盗版)、数据篡改等风险APP加固基本服务:防止逆向分析加密app代码,阻止反编译防止二次打包对app完整性校验保护,防止盗版防止调试及注入阻止动态调
6、试注入,防止外挂、木马窃取账号密码,修改交易金额等防止应用数据窃取加密应用敏感数据,防止泄漏防止木马病毒监测设备环境,防止木马、病毒、恶意应用或钓鱼攻击目前国内APP加固厂商较多,其中以专业从事加固为主打产品的厂商有:爱加密、娜迦(nagain)、梆梆、通付盾等APP加固技术原理以及发展现状目前加固技术主要分为一代和二代:一代(1.O)加固方案1.O的方案是基于类加载的技术,原理:对ClaSSes.dex文件进行完整加密,另存为文件放入资源文件中,通过壳代码(壳dex)进行载入并解密运行:二代(2.0)加固方案2.0的方案是基于方法替换方式,原理:将原dex中的所有方法的代码提取出来进行加密,
7、运行时动态劫持DaIVik虚拟机中解析方法的代码,将解密后的代码交给虚拟机执行引擎Yw各厂商APP加固技术加固技术加固原理加固厂商类加载技术(ar对原ClaSSes.dex文件进行完整加密,另存为文件放入资源文件中,通过壳代码(壳dex)进行载入并解密运行娜迦、爱加密、梆梆、网秦等(1.C)对原dex文件整体压缩加密,保存在壳代理的dex文件尾部,加载到内存中解密运行360方法替换技术(2.0)将原ClaSSes.dex中的所有方法的代码提取出来,单独加密,运行时动态劫持DaIVIk虚拟机中解析方法的代码,将解密后的代码交给虚拟机执行引擎娜迦、梆梆各加固厂商采用的加固保护核心库大致如下(存放在
8、Iib目录或assets目录)加固厂商加固保护核心库娜迦1.0(libchaosvmp.so)20(libddogso、Iibfdog.so)爰加密Iibexec.soIibexecmain.so梆梆1.0(libsecexe.soIibsecmain.so)2.0(libDexHelper.so)360IibprotectCIass.soIibjiagu.so通付盾libegis.so网泰IibnqshieId.SO百度Iibbaiduprotect.So腾讯Iibtup.so阿里Iibmobisec-SoAndBd平台应用采用JaVa语言进行开发,由于JdVd语言很容易被反编译,反编译后的
9、代码接近源代码的级别,易读性极高。容易暴露客户端的所有逻辑,比如与服务端的通讯方式,加解密算法、密钥,转账业务流程、软键盘技术实现等等。因此很有必要对JaVa代码进行加密保护,即采用加固方案。Y。APP加固一反编译保护JAVA层保护AndrOid平台采用使用JaVa作为原生语言进行开发。在最终的安装包中,所有的java代码编译并打包到APK中的CIaSSes.dex文件中,java代码的保护的目标就是dasses.dex。 1.0类加载加固技术原理对原ClaSSes.dex文件进行完整加密,另存为文件放入资源文件中,通过壳代码(壳dex)进行载入并解密运行 :*2.0方法替换加固技术原理将原C
10、ldSSes.dex中的所有方法的代码提取出来,单独加密,运行时动态劫持DalVik虚拟机中解析方法的代码,将解密后的代码交给虚拟机执行引擎实例:某加固应用 :反编译工具:dex2jar(ApkToolkit)jd-gui等 :反编译结果:无法获取到原dex代码或完整的dex代码privateStringbuilderJscn(StringparamStringlrStringparanString2)JS0N0bectIocalJSONObject=newJSONObjectO;tryIocalJSONObject.put(ansTypefpara5tring2);IocalJSONObje
11、ct.put(wsnsPhonerparamScringl);IocalJSONObject.put(wOinTyPe*rS55w);returnIocalJSONObject.toStringO;catch(JsClTExceptionIocaljSCNException)while(true)IocaljSONException.printStacTrace():privatefinalvoidChoiceUser1.oginIfNeedOi=this.InUserManager.getMltIpleUsers().size();If(i=O)Close1.oadingDialofWith
12、Bg();AhowToast(2131296976);return;if(!VerifyPhoneIfNeed()return;StringstrlString3tr2=Stringstr3三(String)this.BiUserManager.getUserIds().get(O);(String)thisInUserManagergetNares().get(O);this.sp.getString(-userId-rnull);if(!TextUtils.isfpty(str3)sc(!sr3.equals(scrl)Tool3.ClearNotifacationJPush(this.c
13、ontext);this.ap.editO.putString(userid,Strl).comic();this.sp.editO.putScring(username,str2).comc();Xequesc1.ogin(str2);return;privateStringbuilderJson(StringParaffiStlring1,StringparnString2)(returnnull;private(private(privateprivateprivate(refinalfinalfinalfinalvoidvoidvoidvoidChoiceUaer1.oginIfNeed()dlsablePhonelnputlfHeed()ParseJsonToObject(StringparamString)IequestAppPhoneQuery()voidZequest1.oadGSPassword()finalvoidrequestVer