农民 发表于 2024-4-5 00:55:02

Androidmanifest文件加固和对抗

前言

恶意软件为了不让我们很容易反编译一个apk,会对androidmanifest文件进行魔改加固,本文探索androidmanifest加固的常见手法以及对抗方法。这里提供一个恶意样本的androidmanifest.xml文件,我们学完之后可以动手实践。
1、Androidmanifest文件组成

这里贴一张经典图,主要描述了androidmanifest的组成
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924645.png​
androidmanifest文件头部仅仅占了8个字节,紧跟其后的是StringPoolType字符串常量池
(为了方便我们观察分析,可以先安装一下010editor的模板,详细见2、010editor模板)
Magic Number

这个值作为头部,是经常会被魔改的,需要重点关注
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924648.png​
StylesStart

该值一般为0,也是经常会发现魔改
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924649.png
StringPool

https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924650.png​
寻找一个字符串,如何计算?
1、获得字符串存放开放位置:0xac(172),此时的0xac是不带开头的8个字节
所以需要我们加上8,最终字符串在文件中的开始位置是:0xb4
2、获取第一个字符串的偏移,可以看到,偏移为0
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924651.png​
3、计算字符串最终存储的地方: 0xb4 = 0xb4 + 0
读取字符串,以字节00结束
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924653.png​
读取到的字符为:theme
【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】
 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
总结:
stringpool是紧跟在文件头后面的一块区域,用于存储文件所有用到的字符串
这个地方呢,也是经常发生魔改加固的,比如:将StringCount修改为0xFFFFFF无穷大
在经过我们的手动计算和分析后,我们对该区域有了更深的了解。
2、010editor模板

使用010editor工具打开,安装模板库
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924654.png​
搜索:androidmanifest.bt
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924655.png​
安装完成且运行之后:
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924656.png​
会发现完整的结构,帮助我们分析
3、使用AXMLPrinter2进行的排错和修复

用法十分简单:
java -jar AXMLPrinter2.jar AndroidManifest_origin.xml会有一系列的报错,但是不要慌张,根据这些报错来对原androidmanifest.xml进行修复
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924658.png​​
意思是:出乎意料的0x80003(正常读取的数据),此时却读取到:0x80000
按照小端序,正常的数据应该是: 03 00 08
使用 010editor 打开
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924659.png​
将其修复
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924660.png​
保存,再次尝试运行AXMLPrinter2
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924661.png​
好家伙还有错误,这个-71304363,不方便我们分析,将其转换为python的hex数据
NegativeArraySizeException 表示在创建数组的时候,数组的大小出现了负数。
androidmanifest加固后文件与正常的androidmanifest文件对比之后就可以发现魔改的地方。
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924662.png​
将其修改回去
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924663.png
运行仍然报错,是个新错误:
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924664.png​
再次去分析:
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924665.png​
stringoffsets如此离谱,并且数组的大小变为了0xff
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924666.png​
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924667.png​
根据报错的信息,尝试把FF修改为24
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924668.png​
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924669.png​
再次运行
https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202401150924670.png​
成功拿到反编译后的androidmanifest.xml文件
总结:

这个例子有三个魔改点经常出现在androidmanifest.xml加固
恶意软件通过修改这些魔改点来对抗反编译
更多网安技能的在线实操练习,请点击这里>>
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Androidmanifest文件加固和对抗