Androidmanifest文件加固和对抗

前言

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

1、Androidmanifest文件组成

这里贴一张经典图,主要描述了androidmanifest的组成

image

androidmanifest文件头部仅仅占了8个字节,紧跟其后的是StringPoolType字符串常量池

(为了方便我们观察分析,可以先安装一下010editor的模板,详细见2、010editor模板)

Magic Number

这个值作为头部,是经常会被魔改的,需要重点关注

image

StylesStart

该值一般为0,也是经常会发现魔改

image

StringPool

image

寻找一个字符串,如何计算?

1、获得字符串存放开放位置:0xac(172),此时的0xac是不带开头的8个字节

所以需要我们加上8,最终字符串在文件中的开始位置是:0xb4

2、获取第一个字符串的偏移,可以看到,偏移为0

image

3、计算字符串最终存储的地方: 0xb4 = 0xb4 + 0

读取字符串,以字节00结束

image

读取到的字符为:theme

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

总结:

stringpool是紧跟在文件头后面的一块区域,用于存储文件所有用到的字符串

这个地方呢,也是经常发生魔改加固的,比如:将StringCount修改为0xFFFFFF无穷大

在经过我们的手动计算和分析后,我们对该区域有了更深的了解。

2、010editor模板

使用010editor工具打开,安装模板库

image

搜索:androidmanifest.bt

image

安装完成且运行之后:

image
会发现完整的结构,帮助我们分析

3、使用AXMLPrinter2进行的排错和修复

用法十分简单:

java -jar AXMLPrinter2.jar AndroidManifest_origin.xml

会有一系列的报错,但是不要慌张,根据这些报错来对原androidmanifest.xml进行修复

image​​

意思是:出乎意料的0x80003(正常读取的数据),此时却读取到:0x80000

按照小端序,正常的数据应该是: 03 00 08

使用 010editor 打开

image

将其修复

image

保存,再次尝试运行AXMLPrinter2

image

好家伙还有错误,这个-71304363,不方便我们分析,将其转换为python的hex数据

NegativeArraySizeException 表示在创建数组的时候,数组的大小出现了负数。

androidmanifest加固后文件与正常的androidmanifest文件对比之后就可以发现魔改的地方。

image

将其修改回去

image

运行仍然报错,是个新错误:

image

再次去分析:

image

stringoffsets如此离谱,并且数组的大小变为了0xff

image

image

根据报错的信息,尝试把FF修改为24

image
image

再次运行

image

成功拿到反编译后的androidmanifest.xml文件

总结:

这个例子有三个魔改点经常出现在androidmanifest.xml加固

恶意软件通过修改这些魔改点来对抗反编译

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/410022.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 第1章 HTML5+CSS3初体验 项目1-2 许愿墙

项目展示 在生活中,许愿墙是一种承载愿望的实体,来源于“许愿树”的习俗。后来人们逐渐改变观念,开始将愿望写在小纸片上,然后贴在墙上,这就是许愿墙。随着互联网的发展,人们又将许愿墙搬到了网络上&#…

C# 基础入门

第二章 C# 语法基础 2-1 C# 中的关键字 关键字,是一些被C#规定了用途的重要单词。 在Visual Studio的开发环境中,关键字被标识为蓝色,下图代码中,用红方框圈出的单词就是关键字。 关键字 class ,这个关键字的用途是…

【C语言】数据结构——排序三(归并与计数排序)

💗个人主页💗 ⭐个人专栏——数据结构学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读:1. 归并排序1.1 基本思想1.2 递归实现1.3 非递归实现 2. 计数排序2.1 基本思想2.2 代码实现 导读&#x…

考研机试题收获——高精度进制转换

代码的第一遍真的很重要,在第一次打的时候尽量把问题思考全面,不要漏打少打,尽量不要留bug给之后de。 一、基础方面 一、处理输出的结束问题 scanf和cin默认都不会读取空格 ①scanf():如果从文件中读取数据,当scanf()…

134基于matlab的时间序列预测

基于matlab的时间序列预测,包括最小二乘支持向量机和粒子群优化支持向量机及改进的粒子群优化支持向量机。输出测试结果,具有GUI可视化界面。程序已调通,可直接运行。 134matlab时间序列预测粒子群优化 (xiaohongshu.com)

.Net 8.0 Web API Controllers 添加到 windows 服务

示例源码下载:https://download.csdn.net/download/hefeng_aspnet/88747022 创建 Windows 服务的方法之一是从工作线程服务模板开始。 但是,如果您希望能够让它托管 API 控制器(也许是为了查看它正在运行的进程的状态)&#xff0…

TCP之三次握手四次挥手与UDP区别

文章目录 1 TCP三次握手四次挥手1.1 数据包说明1.1.1 TCP数据包1.1.2 UDP数据包1.1.3 TCP和UDP差异1.1.4 TCP可靠性传输机制 1.2 三次握手1.2.1 三次握手定义1.2.2 三次握手问题1.2.2.1 问题引入分析1.2.2.2 历史连接1.2.2.3 同步双方初始序列号1.2.2.4 避免资源浪费 1.3 四次挥…

遥感影像-语义分割数据集:高分卫星-云数据集详细介绍及训练样本处理流程

原始数据集详情 简介:该云数据集包括RGB三通道的高分辨率图像,包含高分一、高分二及宽幅数据集。 KeyValue卫星类型高分系列覆盖区域未知场景未知分辨率1m、2m、8m数量12000单张尺寸1024*1024原始影像位深8位标签图片位深8位原始影像通道数三通道标签图…

08- OpenCV:形态学操作(膨胀与腐蚀 、提取水平与垂直线)

目录 前言 一、膨胀(Dilation)与 腐蚀(Erosion) 二、形态学操作 1、开操作(Opening) 2、闭操作(Closing) 3、形态学梯度(Morphological Gradient) 4、…

SpringBoot教程(十一) | SpringBoot集成Mybatis

SpringBoot教程(十一) | SpringBoot集成Mybatis 上一篇文章我们介绍了SpringBoot集成JdbcTemplate.简单体验了一下JdbcTemplate框架的用法,今天的内容比较重要,我们来介绍一下SpringBoot集成Mybatis的步骤。 1、 Mybatis 介绍 MyBatis 本是apache的一…

C#,入门教程(18)——分支语句(switch-case)的基础知识

上一篇: C#,入门教程(17)——条件语句(if-else)的基础知识https://blog.csdn.net/beijinghorn/article/details/124033376 1、switch概述 switch-case分支语句 可以理解为 大号 的 if-else。 switch语句以switch关键字开头&…

树莓派4B+ubuntu20.04+ros1桌面配置(一)

烧录系统至树莓派 下载系统: 方案一 https://ubuntu.com/download/raspberry-pi 选择合适的版本下载 方案二 就是在软件中选择需要烧录的系统(我最后又装了20.04的ubuntu server系统,因为22的系统不能装ros1) 方案三(采用…