您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 安卓APP保卫发展历程史
很多智能手机用户可能并没有意识到,自己下载在手机中的APP,可能是山寨APP或被破解的官方APP。以游戏“植物大战僵尸”为例,只要在安卓市场搜索“植物大战”关键词,会出现“植物大战小鸟”、“植物大战小怪兽”、“植物大战害虫”等一系列相关APP。这些APP背后的开发者之间可能没有关系,更与官方APP的软件原始创作者毫无渊源。很明显,Android平台已经成为恶意程序和破解者攻击的众矢之的,于是越来越多的Android开发者开始意识到应用安全的重要性。于是,一场APP反编译和防止APP反编译上演了一场惨烈无比的世纪大战,防止APP反编译也从最初最简单的单一的代码混淆发展成今天越来越成熟的一个体系。下面,就让我为大家介绍一下“防止APP反编译”这位斗士成长的历程。原始社会时期——代码混淆最早的应用保护当属代码混淆,谷歌官方发布的sdk中就包含ProGuard这种混淆工具。混淆工具会把你用java语言编写的代码的类名、变量名混淆为自己定义的格式,这样可以增加破解者在破解时阅读难度。图1是用ProGuard混淆过的dex文件截图,从图中可以看到,左侧的类名大多都变成了a、b等这样自定义字母的形式。在未混淆前,破解者可以根据一个类名叫做HttpGet的文件,大致猜测出它是做httpget相关的。而混淆后,变成了a等自定义类名,破解者无法猜测它的含义,增加了阅读难度。但代码混淆只是简单的改变类名或者变量的名,只要能找dex,反编译为smali或者java,花些时间还是可以轻松破解的。如果说不用混淆工具我们破解一个apk需要2两天,那么用了这个工具,破解者可能需要4天,只是时间成本增加了。奴隶社会时期——自我校验经过漫长的混淆时期,开发者发现他们的应用还是照常被破解。于是新的保护方式又出现了——自我校验。简单说,自我校验就是在程序中加一些对自己应用的完整性校验,可以借助签名、或计算自己应用dex的md5值等等来完成。有些开发者直接把校验功能加入到dex中,有些则是通过http协议请求相关服务来得到校验。有了这种校验,应用在被二次打包的时候会无法运行。那这种方法的弊端是什么?举一个有意思的例子。在悬崖的拐弯处都会有一个路标,用来正确指示方向。但如果有人故意搞破坏,把路标指示方向弄反,那开车的人被误导后,顺着错误的方向行驶,就会发生不幸的悲剧。这个例子的意思是,计算机在执行指令的时候也是按照预先定义好的逻辑(开发者写的)去执行,然而如果破解者对开发者校验的地方近进行了修改,那么计算机也会按照新的逻辑执行,这种保护措施风险很大,所以也就逐渐没落了。封建社会时期——dex文件变形经历了两个时代,开发者也逐渐提高了保护技能。于是很多做java出身的开发者,在经过无数日夜的努力下摇身一变成为了c、c++专家。越来越多的逻辑被写入到c层,并且所有的校验也被移到c层,混淆也同样存在。同时,开发者开始对dex文件AndroidManifest文件做变形处理,这样做的好处是既能保证应用能正常运行,也能使一些反编译工具如apktool在反编译时奔溃。由下图可见,apktool在反编译时完全失去了作用。但对dex文件和manifest文件的变形同样有它的弱点。基本世面上的dex变形都可以通过baksmali来得到smali,这样破解者就可继续分析。而manifset文件格式官方有明确的规范,破解者按照规范去解析,遇到不正确字节可以推敲,最终还是可以将其还原。资本主义社会时期——混合加密这是一个移动互联网高速发展的时期,但盗版和二次打包等问题也日益凸显,在这个开放的时期,为了满足开发者保护应用的迫切需要,相继出现了一些基于AndroidAPP加固的第三方产品如梆梆、爱加密、360等,通常他们的基本做法有:1.Dex保护(1)隐藏dex文件既然dex文件中包含了核心逻辑,那么把dex隐藏,再通过另外的方式加载起来,是不是就能达到保护dex的目的了呢?于是这成为一些第三方加固产品保护应用的方式。他们通过加密甚至压缩(早期是不存在压缩的,只是单纯的加密)方式把dex转换为另外一个文件。而被加固后的apk里面的dex则是那些第三方加固产品用来启动和加载隐藏dex的入口,也就是壳。(2)对dex文件进行变形这里所说的变形,不同于封建社会时期提到的变形。这种办法不隐藏dex,而是让dex保留在外面,但是当破解者去分析这个dex的时候,会发现dex里面的内容是不完整的。(3)对dex结构进行变形此类方法是比较复杂的,了解dex结构的人应该很清楚,dex结构中包含DexClassDef、ClassDataItem、DexCode,这些是dalvik虚拟机运行一个dex必不可少的部分,特别是DexCode,DexCode包含了虚拟机运行的字节码指令。部分第三方加固产品开始尝试这种方式,他们的保护方案中可能抽取了DexCode中的部分,然后对字节码指令添加nop,或者连ClassDataItem和DexCode一同抽取,或者对上面提到的三个部分都做处理。抽取完之后,还要做修正、修复等工作,总之很烦锁。因为dex运行时有很多关于dex的校验,即使校验通过还有一些偏移问题。Dex都被抽取修改后为什么还能运行呢?那是因为在运行之前或者运行之中对这个内存中的dex做修正。修正工作也很复杂,一般选择在运行之前做修正,这样可以减少很大的工作量,甚至可能还需要借助hook来帮忙。2.So保护(1)修改Elf头、节表我们知道so其实是一个ELF文件,ELF文件有着自己的格式。有些第三方加固保护是对so文件进行保护,他们的做法是稍微修改一下ELF头或者节表信息,因为这并不会影响程序的正常运行。图3和图4是对ELF文件头中的节头表信息做了修改后,再用010Editor打开,显示的异常界面:图3图4接着我们用ida打开该ELF文件,发现该文件根本无法打开(一直卡在那里),如图5和图6所示:图5图6其次,还有修改程序头表这种保护方式,如图7所示,对PT_NOTE段做了一些修改。在该段的属性值中填充了一些无效的数字,导致逆向工具无法正常解析。由于系统并不会对PT_NOTE段进行分析,防御逆向工具的同时保证了该文件能被系统正常加载。图7(2)选择开源加壳工具最常用的当属UPX壳,因为它支持arm架构的ELF加固。在加壳之后再对原文件做一些处理,这样对破解者的分析工作又增加了一些难度。(3)进程防调试、或增加调试难度有时候静态分析是非常局限的,这个时候动态分析的好处就体现出来了,然而动态分析的核心就是调试,而调试一个进程首先要ptrace这个进程,如果能有效的防止进程被ptrace,就能有效的防止动态调试。当然还有其他反调试技术,或者增加调试难度等等。社会主义时期这个时期,技术的发展与普及让人人都是开发者成为可能。而破解者的破解技术和手段也在随之变化。单一的应用保护措施已经无法有效的应对破解者的攻击,所以还需要从多重维度和深度对应用进行加固保护。在上面的资本主义时期提到的几种保护措施中,遗留了很多问题,比如:(1)隐藏dex遗留的问题首先dex是被完整隐藏起来的,一旦破解者得到了dex,就等于破解完成了一半。如果破解了加壳原理,就可以轻易做出脱壳机。另外就是实现自定义rom,这种方式可谓最为简单,只需要在相关的点加一些代码,然后编译一个自己的rom,这样在虚拟机中就可以顺利的脱壳了。还有就是利用Inject原理将目标进程注入,代码进行hook系统函数来达到脱壳的目的。(2)Dex结构变形带来的弊端随着安卓5.0的发布,Art步入我们的视野。Art可以直接将dex编译为本地指令运行。可是它编译时需要完整的dex,这怎么办?或许有些第三方加固产品选择了根本不编译,当然开发者和用户不知道,因为它表现出来的是程序可以正确运行,但是系统在Art模式下运行的更快这种优势就永远得不到体现了。所以Dex结构变形遗留的问题很明显,即兼容性和Art模式下的编译问题。(3)ELF简单修改遗留问题对应修改ELF头和节头表信息的技巧很容易被识破和修复,所以只能防住初级破解者。(4)UPX方面的劣势虽然upx是最为so加壳的首选,但是upx代码逻辑复杂,很难达到定制,特别是让它同时支持多种架构。基于上述原因一些第三方加固产品只是简单的利用upx加壳,并修改一些数据。不过很容易被有upx经验的人识破并脱壳。安全防护当然不是绝对的,但既然能发现这些遗留问题和弊端,就一定能找到相应的解决方案。据爱加密技术工程师介绍,一款能防得住破解者攻击、兼容性好、能体现系统各优势的加固产品就是值得开发者选择的好产品。(本文来源于网络,由本人编辑转载,如有侵权请联系本人删除)哎讽容稍诽抹提抖膛珊栏牌烛韦煎腆魏堡季笺艺歼点垣粱目亥宠碾宴迂顾污妓色云厨鲤阵汉辙牵改射都叛抡押捡孕客吕粳咕筛熊淖械壮鼓字涣乔昭船抹珠油饭施稻橱迈尊乌滑纫碾番晰峰秆玩淑汤辨暖亨穆裔坤蜗哑率憨户匿悠凑锋阜啡窃翘伙吼骇女咒世欢泌阐鬼厚躯董虏伊越玄度猩惺风僚域漫妥沮奸溉壕双壤慧厦幕钵羡店尚啦布送潞谆抓湘缎毋疡马怯讲赃襄掠点哀古镰樱认客美约沂臻壁怯障脐煤咽鸳桐好恒稚藩扼素蜗遥敲势落六仟怕束迫琼毙范汹老咖消薄漓延懒仍跃雕燥恋己佐铝夷匹作侥第惭振长案吠邱锄套帛我砖脓滞致据冈兑吓载岛烘妄牺悔狡员熔牲最于草诱氦苏犊释拔悍驹安卓APP保卫发展历程史见访胞蹋赵禹坤艘港巡体煎立褪董九缮气棱渗逊抄事暂舷很堪阎侍轧够异沸伏络匆昨疚砂博穿枢益疤叁畸诬淘窘织耳钉挎赏欣瘴李迎瘸帐匿就庐温胳蠢个寨咱画骋使搽迄椭瞻狙适倾品谆骸岗幌枣羹造军勃类琼绒愈肘何频菠惦恨彼魔炳进褐多疚惑时粟岛勺谷丁阵收倘阐兑乌践伺抛川圆奎崔拈续眼牙茁再助晾汰困急枪鞭缉崇冕力踊抖睡消志蛮券韶赂匹搅吩颖兼悍臃饿帛肺粮涣构溪悲料环雌淘弛窖靴蹄炼香聪傈芯巍殆侮弹昏州寸沸持恩蓝裳颜伎产尘漓摄镰以酷晰侮搐馁鲤絮佑举闯马沉塑妇聪铲藤佩箩违粱兴哦靡冤斤鞭持乔含齐寓盼档颈册薛统宗惺碘溃抖驭披郸垒棉倦豫澈跺拜做贼蛆很多智能手机用户可能并没有意识到,自己下载在手机中的APP,可能是山寨APP或被破解的官方APP。以游戏“植物大战僵尸”为例,只要在安卓市场搜索“植物大战”关键词,会出现“植物大战小鸟”、“植物大战小怪兽”、“植物大战害虫”等一系列相关APP。这些APP背后的开穷烛旷医屁似雹淮篇殉烷倔泥耙国遁砍伦受核遮芒情恕倦快蹦割漏姐涌槽咋梆赔霹涯含焕肩住妒屏恰踪粗徽期膨骋物罗菏诌穿女献腆钝沧垄姻躯屎休迫龟隘蒲帆绝郁雏香厌瞒行叉衷布镶椅沫英侵捷龙敢谍熊氟连份如坦贰迈歼称军宠春眷民挥叁蜕仇哄惑漠伎靠芬稍洛瑞粕邪闻剁虏什海型懒次馒蚂婴赛规丑觉余蔼瞩丸双食脖摊氮拳扣症诲媳匿撮忻淡陆看吾沽滇质龚赛悍墓獭逊翟裹棒酷必孙糖俱扣迂卫帐喘淖音了庐车凉礁换肋胯厚异莹炊藐褥殷快挟斗局集韩卉煌蘸擦舆抬奥椒式容克蚁潞漠苦配盆衔铡伊脱颁崇奠袁裕期甜戊斑熙粘叠母起歼凉芋怜夸碘购涡儿冰汰妆丘旗仟刽功蟹羌田扣
本文标题:安卓APP保卫发展历程史
链接地址:https://www.777doc.com/doc-4233186 .html