快速浏览
≡核心技术社区≡
『Windows 11 专区』
『Windows 10 专区』
『秋无痕原创作品发布』
『Windows 8 | 8.1 专区』
『WINDOWS 7 专区』
『Linux 系统讨论专区』
『Windows XP 专区』
『WINDOWS Vista 专区』
『WINDOWS Server 专区』
≡网络共享社区≡
『Apple(苹果)资源共享区』
『Android(安卓)资源共享区』
『精品软件下载区』
『秋无痕IT资讯区』
『美化资源交流区』
『软件使用交流区』
『硬件使用交流区』
『系统安全综合区』
≡休闲娱乐社区≡
『无痕茶座』
『靓图共赏』
『影视交流』
『天籁之音』
『心情文学』
『无痕商场』
≡站务管理中心≡
『论坛管理』
≡PHPwind Board≡
登录
注册
游客
帖子:
今日:
我的主题
我的回复
我的收藏
好友近况
首页
搜索
社区服务
每日签到
帮助
设为首页
网址导航
常用软件
优惠券网
银行
邀请注册
勋章中心
道具中心
UID超市
社区论坛任务
基本信息
到访IP统计
管理团队
管理操作
在线会员
会员排行
版块排行
帖子排行
推荐排行
fresh
『Windows 11 专区』
『Windows 10 专区』
『秋无痕IT资讯区』
『硬件使用交流区』
『系统安全综合区』
『秋无痕原创作品发布』
秋无痕论坛
»
『Android(安卓)资源共享区』
»
纯干货:Android APP 防破解进化史
秋无痕淘宝天猫优惠券网
秋无痕常用软件全功能装机光盘 2023年金秋版
秋无痕一键优化Windows 10专版
秋无痕一键优化Windows 11专版
秋无痕论坛官方QQ群
获取无痕币和提高等级
上一主题
下一主题
新 帖
主题 : 纯干货:Android APP 防破解进化史
使用道具 |
复制链接
|
浏览器收藏
|
打印
加为好友
hexj9
千山同一月 万户尽皆春 千江有水千江月 万里无云万里天
级别: 总版主
作者资料
发送短消息
UID:
998
精华:
0
发帖:
605026
威望:
529007 点
无痕币:
14 WHB
贡献值:
0 点
在线时间: 62135(时)
注册时间:
2008-12-25
最后登录:
2024-04-23
0
发表于: 2015-04-30 09:56|
请将IE368导航设置为首页,支持论坛
只看楼主
|
小
中
大
纯干货:Android APP 防破解进化史
Android平台以其免费和开源的特性
使其
占据了移动领域大半壁江山,
越来越的人投身到移动应用开发中,但本文恐怕要先给Android应用开发者泼盆冷水,据
360发布
的
《2014年中国手机安全状况报告》显示,2014全年,360互联网安全中心累计监测到Android用户感染恶意程序3.19亿人次,平均每天恶意程序感染量达到了87.5万人次。
同时,Android应用被破解和盗版等事件也层出不穷。
很明显,
Android平台
已经成为恶意程序和破解者攻击的众矢之的,于是越来越多的
Android
开发者开始意识到应用安全的重要性。如何捍卫自己苦心开发的应用安全,开发者们都使用过哪些保护手段, 360加固保
技术工程师为大家一一分析。
原始社会时期——代码混淆
最早的应用保护当属代码混淆,谷歌官方发布的sdk中就包含ProGuard这种混淆工具。混淆工具会把你用java语言编写的代码的类名、变量名混淆为自己定义的格式,这样可以增加破解者在破解时阅读难度。
图1是用ProGuard混淆过的dex文件截图,从图中可以看到,左侧的类名大多都变成了a、b等这样自定义字母的形式。在未混淆前,破解者可以根据一个类名叫做HttpGet的文件,大致猜测出它是做http get相关的。而混淆后,变成了a等自定义类名,破解者无法猜测它的含义,增加了阅读难度。
图1
但代码混淆只是简单的改变类名或者变量的名,只要能找dex,反编译为smali或者java,花些时间还是可以轻松破解的。如果说不用混淆工具我们破解一个apk需要2两天,那么用了这个工具,破解者可能需要4天,只是时间成本增加了。
奴隶社会时期——自我校验
经过漫长的混淆时期,开发者发现他们的应用还是照常被破解。于是新的保护方式又出现了——自我校验。
简单说,自我校验就是在程序中加一些对自己应用的完整性校验,可以借助签名、或计算自己应用dex的md5值等等来完成。有些开发者直接把校验功能加入到dex中,有些则是通过http协议请求相关服务来得到校验。有了这种校验,应用在被二次打包的时候会无法运行。
那这种方法的弊端是什么?举一个有意思的例子。在悬崖的拐弯处都会有一个路标,用来正确指示方向。但如果有人故意搞破坏,把路标指示方向弄反,那开车的人被误导后,顺着错误的方向行驶,就会发生不幸的悲剧。
这个例子的意思是,计算机在执行指令的时候也是按照预先定义好的逻辑(开发者写的)去执行,然而如果破解者对开发者校验的地方近进行了修改,那么计算机也会按照新的逻辑执行,这种保护措施风险很大,所以也就逐渐没落了。
封建社会时期——dex文件变形
经历了两个时代,开发者也逐渐提高了保护技能。于是很多做java出身的开发者,在经过无数日夜的努力下摇身一变成为了c、c++专家。越来越多的逻辑被写入到c层,并且所有的校验也被移到c层,混淆也同样存在。同时,开发者开始对dex文件AndroidManifest文件做变形处理,这样做的好处是既能保证应用能正常运行,也能使一些反编译工具如apktool在反编译时奔溃。由图2可见, apktool在反编译时完全失去了作用。
图2
但对dex文件和manifest文件的变形同样有它的弱点。基本世面上的dex变形都可以通过baksmali来得到smali,这样破解者就可继续分析。而manifset文件格式官方有明确的规范,破解者按照规范去解析,遇到不正确字节可以推敲,最终还是可以将其还原。
资本主义社会时期
这是一个移动互联网高速发展的时期,但盗版和二次打包等问题也日益凸显,在这个开放的时期,为了满足开发者保护应用的迫切需要,相继出现了一些基于Android APP加固的第三方产品,通常他们的基本做法有:
1.嬀/font]
D
ex保护
(1)嬀/font]
隐藏dex文件
既然dex文件中包含了核心逻辑,那么把dex隐藏,再通过另外的方式加载起来,是不是就能达到保护dex的目的了呢?于是这成为一些第三方加固产品保护应用的方式。
他们通过加密甚至压缩(早期是不存在压缩的,只是单纯的加密)方式把dex转换为另外一个文件。而被加固后的apk里面的dex则是那些第三方加固产品用来启动和加载隐藏dex的入口,也就是壳。
(2)嬀/font]
对dex文件进行变形
这里所说的变形,不同于封建社会时期提到的变形。这种办法不隐藏dex,而是让dex保留在外面,但是当破解者去分析这个dex的时候,会发现dex里面的内容是不完整的。
(3) 对dex结构进行变形
此类方法是比较复杂的,了解dex结构的人应该很清楚,dex结构中包含DexClassDef、ClassDataItem、DexCode,这些是dalvik虚拟机运行一个dex必不可少的部分,特别是DexCode,DexCode包含了虚拟机运行的字节码指令。
部分第三方加固产品开始尝试这种方式,他们的保护方案中可能抽取了DexCode中的部分,然后对字节码指令添加nop,或者连ClassDataItem和DexCode一同抽取,或者对上面提到的三个部分都做处理。抽取完之后,还要做修正、修复等工作,总之很烦锁。因为dex运行时有很多关于dex的校验,即使校验通过还有一些偏移问题。
D
ex都被抽取修改后为什么还能运行呢?那是因为在运行之前或者运行之中对这个内存中的dex做修正。修正工作也很复杂,一般选择在运行之前做修正,这样可以减少很大的工作量,甚至可能还需要借助hook来帮忙。
2.嬀/font]
S
o保护
(1) 修改Elf头、节表
我们知道so其实是一个ELF文件,ELF文件有着自己的格式。有些第三方加固保护是对so文件进行保护,他们的做法是稍微修改一下ELF头或者节表信息,因为这并不会影响程序的正常运行。
图3和图4是对ELF文件头中的节头表信息做了修改后,再用010 Editor打开,显示的异常界面:
图3
图4
接着我们用ida打开该ELF文件,发现该文件根本无法打开(一直卡在那里),如图5和图6所示:
图5
图6
其次,还有修改程序头表这种保护方式,如图7 所示,
对PT_NOTE段做了一些修改。在该段的属性值中填充了一些无效的数字
,
导致逆向工具无法正常解析。由于系统并不会对PT_NOTE段进行分析,防御逆向工具的同时保证了该文件能被系统正常加载。
图7
(2) 选择开源加壳工具
最常用的当属UPX壳,因为它支持arm架构的ELF加固。在加壳之后再对原文件做一些处理,这样对破解者的分析工作又增加了一些难度。
(3)嬀/font]
进程防调试、或增加调试难度
有时候静态分析是非常局限的,这个时候动态分析的好处就体现出来了,然而动态分析的核心就是调试,而调试一个进程首先要ptrace这个进程,如果能有效的防止进程被ptrace,就能有效的防止动态调试。当然还有其他反调试技术,或者增加调试难度等等。
社会主义时期
这个时期,技术的发展与普及让人人都是开发者成为可能。而破解者的破解技术和手段也在随之变化。单一的应用保护措施已经无法有效的应对破解者的攻击,所以还需要从多重维度和深度对应用进行加固保护。
在上面的资本主义时期提到的几种保护措施中,遗留了很多问题,比如:
(1)嬀/font]
隐藏dex遗留的问题
首先dex是被完整隐藏起来的,一旦破解者得到了dex,就等于破解完成了一半。如果破解了加壳原理,就可以轻易做出脱壳机。
另外就是实现自定义rom,这种方式可谓最为简单,只需要在相关的点加一些代码,然后编译一个自己的rom,这样在虚拟机中就可以顺利的脱壳了。
还有就是利用Inject原理将目标进程注入,代码进行hook系统函数来达到脱壳的目的。
(2) Dex结构变形带来的弊端
随着安卓5.0的发布,
A
rt步入我们的视野。
A
rt可以直接将dex编译为本地指令运行。
可是它编译时需要完整的dex,这怎么办?或许有些第三方加固产品选择了根本不编译,当然开发者和用户不知道,因为它表现出来的是程序可以正确运行,但是系统在
A
rt模式下运行的更快这种优势就永远得不到体现了。
所以Dex结构变形遗留的问题很明显,即兼容性和
A
rt模式下的编译问题。
(3) ELF简单修改遗留问题
对应修改ELF头和节头表信息的技巧很容易被识破和修复,所以只能防住初级破解者。
(4) UPX方面的劣势
虽然upx是最为so加壳的首选,但是upx代码逻辑复杂,很难达到定制,特别是让它同时支持多种架构。
基于上述原因一些第三方加固产品只是简单的利用upx加壳,并修改一些数据。不过很容易被有upx经验的人识破并脱壳。
安全防护当然不是绝对的,但既然能发现这些遗留问题和弊端,就一定能找到相应的解决方案。据360加固保
技术工程师介绍,一款能防得住破解者攻击、兼容性好、能体现系统各优势的加固产品就是值得开发者选择的好产品。
来自:
评分选定
顶端
回复
引用
评分
分享
加为好友
jxm
级别: 十方秋水
作者资料
发送短消息
UID:
88
精华:
0
发帖:
130083
威望:
221815 点
无痕币:
107273 WHB
贡献值:
0 点
在线时间: 51931(时)
注册时间:
2008-03-18
最后登录:
2024-04-23
1
发表于: 2015-04-30 12:31|
请将IE368导航设置为首页,支持论坛
只看该作者
|
小
中
大
谢谢楼主的分享。
来自:
评分选定
顶端
回复
引用
评分
分享
加为好友
醉苦居士
影视交流
级别: 论坛版主
作者资料
发送短消息
QQ联系
UID:
33334
精华:
0
发帖:
62432
威望:
501219 点
无痕币:
18489 WHB
贡献值:
1145213 点
在线时间: 60624(时)
注册时间:
2009-03-18
最后登录:
2024-04-23
2
发表于: 2015-05-01 09:05|
请将IE368导航设置为首页,支持论坛
只看该作者
|
小
中
大
这个只是了解一下子,
标签
来自:
评分选定
顶端
回复
引用
评分
分享
上一主题
下一主题
秋无痕论坛
»
『Android(安卓)资源共享区』
http://realqwh.cn
访问内容超出本站范围,不能确定是否安全
继续访问
取消访问
Total 0.044817(s) query 4, Time now is:04-23 19:12, Gzip enabled
粤ICP备07514325号-1
Powered by
PHPWind
v7.3.2
Certificate
Code © 2003-13
秋无痕论坛