Android resources.arsc资源文件防护原理分析
来源:互联网 发布:淘宝主图无缝拼接 编辑:程序博客网 时间:2024/06/16 06:44
主要防止apktool反编译resources.acrs资源文件,从而对资源文件进行保护
resources.acrs资源文件格式主要引用老罗的博客内容
Resources.arsc文件格式是由一系列的chunk构成,每一个chunk均包含如下结构的ResChunk_header,用来描述这个chunk的基本信息。struct ResChunk_header { enum { RES_NULL_TYPE = 0x0000, RES_STRING_POOL_TYPE = 0x0001, RES_TABLE_TYPE = 0x0002, RES_XML_TYPE = 0x0003, RES_XML_FIRST_CHUNK_TYPE = 0x0100, RES_XML_START_NAMESPACE_TYPE= 0x0100, RES_XML_END_NAMESPACE_TYPE = 0x0101, RES_XML_START_ELEMENT_TYPE = 0x0102, RES_XML_END_ELEMENT_TYPE = 0x0103, RES_XML_CDATA_TYPE = 0x0104, RES_XML_LAST_CHUNK_TYPE = 0x017f, RES_XML_RESOURCE_MAP_TYPE = 0x0180, RES_TABLE_PACKAGE_TYPE = 0x0200, RES_TABLE_TYPE_TYPE = 0x0201, RES_TABLE_TYPE_SPEC_TYPE = 0x0202 }; //当前这个chunk的类型 uint16_t type; //当前这个chunk的头部大小 uint16_t headerSize; //当前这个chunk的大小 uint32_t size; };
我们先看反编译错误信息,后面再说如何实现
apktool错误日志:
Exception in thread "main" brut.androlib.err.UndefinedResObject: resource spec: 0x7f000005 at brut.androlib.res.data.ResPackage.getResSpec(ResPackage.java:59) at brut.androlib.res.data.ResTable.getResSpec(ResTable.java:65) at brut.androlib.res.data.ResTable.getResSpec(ResTable.java:61) at brut.androlib.res.data.value.ResReferenceValue.getReferent(ResReferenceValue.java:57) at brut.androlib.res.data.value.ResReferenceValue.encodeAsResXml(ResReferenceValue.java:47) at brut.androlib.res.data.value.ResScalarValue.encodeAsResXmlValue(ResScalarValue.java:58) at brut.androlib.res.data.value.ResScalarValue.serializeToResValuesXml(ResScalarValue.java:75) at brut.androlib.res.AndrolibResources.generateValuesFile(AndrolibResources.java:502) at brut.androlib.res.AndrolibResources.decode(AndrolibResources.java:252) at brut.androlib.Androlib.decodeResourcesFull(Androlib.java:136) at brut.androlib.ApkDecoder.decode(ApkDecoder.java:102) at brut.apktool.Main.cmdDecode(Main.java:165) at brut.apktool.Main.main(Main.java:81)
错误提示是resource spec: 0x7f000005,下面就来看看使用aapt d resources test.apk 查看资源信息
appt d resources的基本格式如下:
resource <Resource ID> <Package Name>:<Type>/<Name>: t=<DataType> d=<Data> (s=<Size> r=<Res0>)Resource ID R.java中的资源ID Package Name 资源所在的的包 Type 资源的类型 Name 资源名称 DataType 数据类型,按照以下枚举类型取值 Data 资源的值,根据dataType进行解释 Size 一直为0x0008Res0 固定为0x00
aapt d resources test.apkPackage Groups (1)Package Group 0 id=0x7f packageCount=1 name=com.example.myapp Package 0 id=0x7f name=com.example.myapp type 1 configCount=4 entryCount=1 spec resource 0x7f020000 com.example.myapp:drawable/ic_launcher: flags=0x00000100 config ldpi-v4: resource 0x7f020000 com.example.myapp:drawable/ic_launcher: t=0x03 d=0x00000001 (s=0x0008 r=0x00) config mdpi-v4: resource 0x7f020000 com.example.myapp:drawable/ic_launcher: t=0x03 d=0x00000002 (s=0x0008 r=0x00) config hdpi-v4: resource 0x7f020000 com.example.myapp:drawable/ic_launcher: t=0x03 d=0x00000003 (s=0x0008 r=0x00) config xhdpi-v4: resource 0x7f020000 com.example.myapp:drawable/ic_launcher: t=0x03 d=0x00000004 (s=0x0008 r=0x00) type 2 configCount=1 entryCount=1 spec resource 0x7f030000 com.example.myapp:layout/main: flags=0x00000000 config (default): resource 0x7f030000 com.example.myapp:layout/main: t=0x03 d=0x00000000 (s=0x0008 r=0x00) type 3 configCount=1 entryCount=1 spec resource 0x7f040000 com.example.myapp:string/app_name: flags=0x00000000 config (default): resource 0x7f040000 com.example.myapp:string/app_name: t=0x02 d=0x00000005 (s=0x0008 r=0x00)
我随便弄了一个com.example.myapp进行测试,通过上面信息可以看到app_name: t=0x02 已经改变,也就是DataType 数据类型。
直接使用010 Editor或其他HEX工具打开resources.arsc搜索对应的d=0x00000005(十六进制搜索需要反过来)
直接搜索HEX值:05000000然后将前面对应的08 00 00 02改成08 00 00 03然后保存打包,再反编译测试
经过测试drawable或string对应的DataType 数据类型值t=0x03修改为0x01或0x02都可以导致apktool反编译失败
0 0
- Android resources.arsc资源文件防护原理分析
- Android resources.arsc资源文件防护原理分析
- Android resources.arsc文件与资源防护
- 记一次resources.arsc文件hex修改原理分析
- resources.arsc (apk中的资源文件:键值对)
- android gradle build resources.arsc文件未压缩问题解决
- resources.arsc格式(包->类型->资源项)
- Android:Resources资源文件
- R.java(资源ID) resources.arsc(资源索引)
- 保护Android resources文件不被反编译原理分析
- resources.arsc(资源表):Package(包)+Type(类型)+Entry(项)
- resources.arsc 格式
- 003.android资源文件剖析(Resources)
- Android应用安全隐患现状,资源文件加密/安全防护进化史
- ResTable-Package-Type-Entry resources.arsc(system)+resources.arsc(app)
- android之resources资源
- Android 资源(Resources)访问
- Android 编译resource.arsc资源Resource ID解析
- caffee 安装教程
- JDBC常用驱动和语法汇总
- Centos 7 gem install -v=0.12.0 pcaprub 出错解决办法
- Android resources.arsc资源文件防护原理分析
- Codeforces 597C(树状数组 + dp)
- Android resources.arsc资源文件防护原理分析
- bellman_ford 模板
- Java http post远程请求数据
- centos7安装rabbitmq
- 常用的OpenCV函数速查
- linux sed命令
- SQL1224N SQLSTATE=55032报错和oracle数据库统计问题
- WebSocket 实战
- Oracle数据库193错误和数据分析师是做什么的