freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

分享一种andorid资源加载技术
2019-01-09 13:27:29

分享一种Andorid资源加载技术

 申明,看不懂可跳过,本着技术交流,不喜勿喷

 此技术可于App资源加密,资源动态加载,比如so加密替换,jar包替换,res文件替换,dex文件替换。Apk自身权限内所有文件都可通过此技术替换(系统访问部份除外)

 App本质是一个zip压缩包

 Android App中资源大概分为 dex,assert目录,res目录,values目录,lib目录,以及其它自定义目录,如下图

 1.jpg

 

程序访问asserts目录时通过AssetManager访问,多数通过java类访问

Apk本质是一个zip压缩包,有的程序也会可以通过Fopen/open直接读取apk(比如某狗music)

 

这里以android 4.4.4源码分析为例

我们简单看一看android中resource对象加载资源方式

 


2.jpg


AssetManger.open调用openAsset


3.jpg


打开4.4.4_r1\frameworks\base\core\jni\android_util_AssetManager.cpp

根据系统源码openAsset实现在android_content_AssetManager_openAsset


4.jpg


android-4.4.4_r1\frameworks\base\libs\androidfw\AssetManager.cpp

openAsset调用AssetManger->open方法

 

5.jpg

Assetmanger->open调用openNonAssetInPathLocked

openNonAssetInPathLocked调用openAssetFromZipLocked

 

调用openNonAssetInPathLocked,主要功能获取操作apk的pzip对象,通过


6.jpg7.jpg8.jpg

 

得到ZipFileRO,简单看下ZipFileRo成员方法open直接调用libc中的open

/frameworks/base/libs/androidfw/ZipFileRO.cpp


9.jpg

 

总结:

这里简单的分析了部份Android资源加载过程,既然知道加载过程,就可以在文件操作上下功夫。例如hook libc中的native相关函数,在其中做加解密过虑操作,就能实现资源加密替换的功能。许多加固厂商会对文件做加密操作,或者对文件做保护,也是通过类似原理。

 

上文中还提到,系统在加载资源的过程中会调用很多函数,从java层到native层,整个过程每个环节都能做加解密。

 

注:此技术可对apk中apk本身所操作所有文件做加解密,不能加密系统访问的文件。

本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者