赞
踩
前几年,偶然的机会下,有幸接触Android开发,从iOS开发开始转Android开发。
一开始接触Android,发现简直是自由的海洋,iOS中各种限制,相对iOS开发来说,Android中简直不要太自由。
可能因为Android用到的环境和其他等等东西,大多开源,所以很多很多东西,都是透明的,对开发者来说都是可见的
虽然透明可见对开发者来说,写代码非常自由舒畅,但对一些逆向开发者来说,透明可见的特性让其逆向的难度大大降低。
透明可见的环境,让针对Android开发的各种工具变得非常丰富,当要分析一个apk,下面这个利器真的是非常牛逼。
正常一个Android开发都应该知道这个工具,它可以将一个apk解包,也可以将解包后的项目,再合成apk。
简易的逆向,就是使用apktool解包后,改一下包名,资源,文件,名字,icon等,再合包重签名。
复杂一点的逆向,需要改到代码的逻辑,可以apktool解包后,改一下对应的smali代码,再合包重签名。
这里就需要去学习一些smali相关的知识了。
在复杂的逆向基础上,调用自己的代码逻辑,展示自己的页面,更改原包的界面,逻辑,资源等。
复杂的二次开发,比如移除原包的模块或SDK,改运行逻辑,加自己的模块和引入自己需要的SDK,核心都是改smali代码,改运行逻辑,最后重新编译合包重签名。
市面上,有些二次开发工具使用起来,跟正常Android开发简直毫无区别。
有过2年的二次开发经验,得益于一些工具,二次开发效率很高。
二次开发过很多apk,有下面这些总结。
当分析apk是否能二次开发时,首先要看其是否加固。
是否使用安全策略是一个大的筛选项,只要原apk使用了任何相对复杂的安全策略,比如so加密隐藏,代码加密,服务器加密等,都不会继续对其进行逆向分析和二次开发,毕竟逆向成本会提高几何倍数。
如果实在一定要攻克某一个包,它使用的安全技术越高,越容易让我们放弃逆向该apk,毕竟,还能找到大把类似的应用,没必要死磕这个应用。
Android打包时,一般只会对代码进行简单的混淆,所以一个apk的代码资源等结构都还是非常容易分析破解的,所以市面上出现了很多apk安全加固的工具。
Android依赖的Java环境的一些特性,
比如动态加载,Android环境也支持一些动态加载代码的逻辑,如classloader.
加固工具基本都是将原包的代码加密成文件,运行时解密,再动态加载出来。
资源那些基本也是,打包时加密,使用的解密。
Android依赖的Java环境的一些特性,比如动态加载,hook,Android环境也支持一些动态加载代码的特性,如classloader等.
因为之前需要做so隐藏,发现自己写的so很好隐藏,但其他框架的so要隐藏,就要改到加载环境,不然改了so加载路径,它会加载不到,然后凑巧实现了同时隐藏代码和so方案,
为了隐藏一些敏感资源,实现了资源隐藏的方案。
最终
模仿别人加固的能力,实现了自己的加固工具,直接对apk进行处理。详见:
apk安全加固工具
如果自己项目,纯自己开发,隐藏自己的代码和so还有资源,其实很好实现:
将加密的文件转成代码,so和资源;用classloader加载代码,System.load(sopath)加载so,Resource加载资源,就行。
但如果有很多已存在的项目,或很多不是自己的项目需要处理,上述实现就需要大量时间重构。所以使用市面上有的加固工具,能大大解决成本并满足项目需要。
自己写Android应用,为了不让别人轻易的拿到你的应用代码资源,最好用一些方案将自己的东西加密隐藏一下。防止被别人破解,二次开发。
如果自己没能力,或项目已经开发完,重构成本太大,建议使用成熟的加固方案进行安全加固。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。