安卓程序逆向与防护

news2025/1/5 10:51:20

安卓程序逆向与防护

  • 实际用处
  • 代码打包生成apk的步骤
  • 程序基础逆向步骤
  • 程序基础防御
    • 代码混淆
    • 针对逆向工具的防御手段
      • Proguard
    • SO文件
    • 防止二次打包
  • 程序进阶逆向攻击
  • 实战练习逆向简易安卓程序

实际用处

1.当想要获得一款前后端分离的安卓程序的数据时,一般会考虑抓包后端传来的数据包,如果这个数据包的数据经过了加密,就不能直接获取我们想要的数据,一个经过加密的数据包将会在客户端解密,我们通过逆向安卓apk的方法获取解密的代码从而获取解密的数据(关于app的爬虫
2.当想要改变一个app中一段程序执行的代码,或者想要改变apk的美术资源时,可以逆向apk获取整个程序并修改对应代码段或者修改ui图片,最后重新打包即可(关于游戏外挂

代码打包生成apk的步骤

1.编译器将我们自己的Android工程下的源码文件、资源文件、aidl文件 和 依赖的module库文件、AAR库、jar库进行编译,所有源码编译后输出DEX文件,所有其他内容转换为已编译资源。
2.打包器将DEX文件和已编译资源文件合并成单个的apk
3.打包器对apk进行签名。如果是调试版本的apk用debug keystore进行签名,如果是release版本的apk用release keystore进行签名。
4.在生成最终的apk之前,使用zipalign工具对apk进行优化,减少在设备上运行时占用的内存。

程序基础逆向步骤

根据刚才的apk生成步骤逆序反推得到了获取源码的步骤
1.通过apktool将apk解包得到DEX和已编译文件
2.通过dex2jar将DEX文件逆向为jar包
3.通过jd-gui查看源码

程序基础防御

根据刚刚的步骤可以逆向出一个简单的apk的源码,那如何防御?下面给出基础防御的操作

代码混淆

将程序代码中的变量以及执行改变进行代码混淆,平时开发时,变量的命名一般遵循规律能看的出来变量的用途,通过改变变量的名字从而无法看出变量的用途。
将程序的执行步骤改变,就是等价的将代码段换成另一种难以理解的代码段,如将迭代换成递归(比如for换成递归)
代码混淆并没有加大逆向的难度,只是加大了源码阅读理解的难度,是一种比较基础的防御手段

针对逆向工具的防御手段

程序的代码段集中在DEX文件中,逆向工具都是基于DEX文件对程序进行逆向,如果不想DEX被逆向,则可以对DEX文件进行加密混淆,从而使得一些工具崩溃。

Proguard

Proguard 是混淆经常使用的工具,他的混淆原则如下
	反射用到的类不混淆
	JNI方法不混淆
	AndroidMainfest中的类不混淆,四大组件和Application的子类和Framework层下所有的类默认不会进行混淆
	Parcelable的子类和Creator静态成员变量不混淆,否则会产生android.os.BadParcelableException异常
	使用GSON、fastjson等框架时,所写的JSON对象类不混淆,否则无法将JSON解析成对应的对象
	使用第三方开源库或者引用其他第三方的SDK包时,需要在混淆文件中加入对应的混淆规则
	有用到WebView的JS调用时,也需要保证写的接口方法不混淆

SO文件

java/kotlin都是基于jvm虚拟机的编程语言,逆向java和kotlin代码的难度并不高,如果想要提高代码文件的安全性,可以考虑将重要代码写在native层(C/C++编写),由于对c与c++代码进行逆向获得的都是汇编代码,难以阅读,从而提高了程序的安全性

防止二次打包

由于逆向的目的在于解包->修改->打包,所以可以通过防止二次打包的办法来使得最后一步无法完成,提高程序的安全性
二次打包,又称为重打包,一般是在使用逆向工具APKTool等工具逆向修改后,进行APK文件重新生成的过程,被重新打包的apk应用文件,因为与之前的应用程序高度相似,市面上称为山寨货盗版APP。

在android系统操作系统中apk的唯一识别码是靠包名和签名来做鉴别的,包名和签名是绑定在一起的,一旦apk被反编译后签名自动消失,apk签名需要签名文件,签名文件是md5值基本上是无法伪造成一致的,Android要求安装到手机上的apk文件必须有签名,而理论上开发者的签名他人是无法得到的(有密码),所以比较容易想到的就是执行签名校验,验证本程序的签名是否为合法程序。

目前市面上的很多应用商店也是通过开发者提供的包名与签名做正版判断,所以我们需要对自己的程序apk防止二次打包,也就是在自己的应用程序内部加入代码验证自我的签名与包名是否被篡改,如果被篡改了,那么肯定是被二次打包了。

程序进阶逆向攻击

上述逆向攻击都是基于解包->修改->打包的逻辑进行的,而实际上由于目前程序本身代码量大且防逆向手段越发成熟,我们可以考虑通过挂钩子的方式修改程序,进行一些非法的操作,使用Xpose可以准确hook从而做到劫持登录等操作.

实战练习逆向简易安卓程序

(题目为buuctf的Reverse的简单注册器题目)
链接 https://buuoj.cn/challenges
首先拿到了apk之后我们先解包,解包后文件如下
在这里插入图片描述
接下来对dex文件解包
将dex文件放置在dex2jar文件夹运行命令行d2j-dex2jar.bat classes.dex 得到下图文件
在这里插入图片描述
接下来我们使用jeb查看jar包源码得到下图
在这里插入图片描述

明显有对flag进行混淆,我们通过一段简单的python脚本即可还原flag
在这里插入图片描述

flag为flag{59acc538825054c7de4b26440c0999dd}
在这里插入图片描述
过啦
在这里插入图片描述

作者:刘威
原文链接:http://t.csdn.cn/lqYLO

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kanzi:关于kanzi的一点杂谈

概述: 做过开发的小伙伴在初次接触Kanzi Studio 这个开发工具时,可能有点摸不着头脑,由于 它不像Android studio 也 不像QT ,而且最大的一个区别是:kanzi基本不用写代码逻辑来控制程序显示UI,但是Android …

做外贸一定要知道的20条经验教训

做外贸你必须知道的20课,由米贸搜为你整理如下: 1.在工厂里,客人抱怨价格太高的时候,我总是说一分钱一分货,质量好的回复。进入一家贸易公司后,我知道价格才是硬道理,尤其是大客人。对价格的考虑肯定高于对…

1776年美国才建国,那一年中国在干什么?

时代淘汰你,都不会跟你打一声招呼。时代的残酷性,对人如此,对国家也是这般。美国的历史是太嫩了,在1776年才得以建国。但在这年,美国踏上了工业化革命的节奏,走上了扬帆起航之旅,逐步成为了超级…

JavaIO流处理笔记(万字总结)

学习视频561-JavaSE进阶-IO流概述_哔哩哔哩_bilibili 目录 IO流概述 IO流的分类 IO流四大家族 FileInputStream初步(并非最终方法) FileInputStream循环读(并非最终方法) 往byte数组中读 FileInputStream最终版 FileInputStream的其他常用方法 FileOutputStream的使用…

Kamiya丨Kamiya艾美捷抗冷休克结构域蛋白E1说明书

Kamiya艾美捷抗冷休克结构域蛋白E1化学性质: 物种反应性:人类其他未知物种。 Ig同种型:正常兔全血抗体 免疫原:表达重组CSDE1(Met1~Val245)在大肠杆菌中 格式:500g/mL多克隆抗体在0.01M PBS…

【Redis】List类型和底层原理

文章目录List类型1.List介绍1.1常用命令2.List底层实现3.ziplist剖析3.1ziplist结构3.2创建一个空的ziplist3.3ziplist的元素节点结构3.4ziplisqt的连锁更新3.5ziplist的缺陷4.quicklist剖析4.1quicklist表头结构5.List的应用场景----消息队列5.1保证消息保序5.2处理重复的消息…

Ubuntu搭建本地web站点,并内网穿透实现公网访问

本次教程我们通过搭建Apache服务,部署一个简单的静态样例站点,并使用cpolar内网穿透将内网样例站点发布到公网来进行演示。 1. 设置 Apache Web 服务器 1.1 安装Apache Web sudo apt-get install apache2 -y1.2 启动Apache Web sudo service apache2…

[附源码]计算机毕业设计springboot校园招聘微信小程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[附源码]计算机毕业设计自行车租赁管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

CSS盒子模型

🍓个人主页:bit.. 🍒系列专栏:Linux(Ubuntu)入门必看 C语言刷题 数据结构与算法 HTML和CSS3 目录 1.盒子模型 1.2盒子模型(Box Model)组成 1.3边框(border) 1.4 表格的…

异常概述、常见异常 、自定义异常 、重载重写的异常区别

1.异常概述 程序运行过程中任何打断程序正常流程的情况称为异常或错误。比如:文件打不开、网络中断、操作符越界、类加载找不到等。 Java程序在执行过程中所发生的异常事件可分为两类: public class Test {public static void main (string [] args){stri…

靶向嵌合体PEG-ethoxycarbonyl-propanoic/Dodecaethylene glycol

蛋白水解靶向嵌合体(proteolysis targeting chimeras,PROTACs)通过连接基团将靶蛋白配体与E3连接酶配体利用化学键连接,将E3连接酶“募集”到靶蛋白附近,并利用细胞内的泛素-蛋白酶体系统,实现靶蛋白的泛素化标记和蛋白降解。靶蛋白一旦被降解,PROTACs分子便游离出来,参与到下一…

[附源码]JAVA毕业设计基于vue技术的汽车维修检测系统设计与实现(系统+LW)

[附源码]JAVA毕业设计基于vue技术的汽车维修检测系统设计与实现(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&…

【水光互补优化调度】基于非支配排序遗传算法的多目标水光互补优化调度(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

太厉害,Redis+Nginx+设计模式+Spring全家桶+Dubbo技术精选合集

最近花了很长的时间去搜罗Java核心技术好文,我把每个Java核心技术的优选文章都整理成了一个又一个的文档。昨天也是终于全部整理好了,今天就把这些东西分享给老铁们,也能为老铁们省去不少麻烦,想学什么技能了,遇到哪方…

MetersPhere自动化之后置SQL脚本及随机数变量---注册场景

MetersPhere自动化之后置SQL脚本及随机数变量—注册场景 场景分析: 1、需要一个手机号,不能每次都一样,因为注册一定是之前没有用的手机号,所以需要一个随机数 2、第一个接口,获取验证码,获取验证码后还需…

QT控件 — QScrollArea

例子:在窗体上显示一张大图片,然后使用滚动条来调节。 在窗体上添加控件 Scroll Area,如下图所示 需要说明的是,控件 Scroll Area 也相当于是一个容器。 后面主要说一下这个属性 在窗体上在放一个Label作为图片的容器。之后点…

Docker Toolbox下载安装运行镜像

1、Docker Toolbox下载 这是Docker Toolbox的下载链接,找个最新的下就好了. 阿里云开源镜像站资源目录 2、Docker Toolbox安装 下载之后点击exe文件点击安装,然后一直点next就行了. 安装之后,点击的时候如果显示快捷方式不对显示查找git.bash…

[附源码]Python计算机毕业设计Django贵港高铁站志愿者服务平台

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

GBase 8c 管理平台(一)-部署配置

GBase 8c 管理平台 GBase 8c 提供管理平台对数据库集群进行管理,用户可以通过管理平台提 供的图形化界面进行集群的部署配置、系统管理、运维监控、 告警管理、 备份恢 复、数据同步、数据加载等操作。 部署配置 GBase 管理平台提供可视化的界面,实现…