【Android】反编译与预防被反编译

近期在开发一款软件时,遇上了加密、解密数据方面的一些技术问题无法攻克,于是抱着试试看的态度使用 jadx-gui 工具进行反编译一下。哎,居然还成功了,更骚的是,这一款App没有对应用进行混淆、加密、加固,没多久我就研究明白了他们的应用是如何解决我所遇到的问题,升职加薪又离我更近一步了🤭

但是呢,为了防止我所编写的软件遇上像我这样的老六,特地写一篇文章来告诉大家如何能成为我这样的老六,以及如何加强App的软件防护等级。

目录

  • 反编译
    • jadx-gui
  • 预防反编译
    • 代码混淆
    • 应用加固
  • 其它
    • SDK 加固 & 插件加固
    • 加密重要数据
    • 使用C/C++代码
    • 防止调试

反编译

可以用于反编译 App 的工具有很多,敲命令行实现反编译的已经成为过去式了,这里分享一个有 GUI ,同时也是博主目前在使用的反编译工具:jadx

jadx-gui

jadx-gui 是用于从 Android DexApk 文件生成 Java 源代码的命令行和 GUI 工具。

我们可以借助该工具,实现反编译 App。

这里我使用 StepDemo 作为演示的项目,下载 jadx 安装到电脑上,使用 jadx 打开一个 .app.apk 文件 ,就可以得到如图的 app 信息。

在这里插入图片描述

使用 Android Studio 查看项目的源代码是这样:

在这里插入图片描述

StempDemo 打包成一个 .apk 或者 .aab ,使用 jadx 打开后自动反编译的代码:

在这里插入图片描述

咋样?你学会了没?

预防反编译

哈!反编译很简单吧!

上面讲了如何反编译他人的 app ,接下来就讲解,如何预防你们的 app 被某个老六给反编译抄走辛辛苦苦写的代码😊

代码混淆

代码混淆可以说是应用安全中最基础的知识了,但同时也是坑最多的方式之一。

关于代码混淆可参考往期文章 👉【Android】App攻防之代码混淆

打开 app 项目的 build.gradle.kts 文件,启用 isMinifyEnabled 即可开启混淆。

android {
    buildTypes {
        // 应用处于release模式时
        release {
            isMinifyEnabled = true // 开启混淆
            isShrinkResources = true // 开启资源压缩
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                // 设置定义混淆规则的文件
                "proguard-rules.pro"
            )
        }
        // 应用处于debug模式时
        debug {
            isMinifyEnabled = true // 开启混淆
            isShrinkResources = true // 开启资源压缩
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                // 设置定义混淆规则的文件
                "proguard-rules.pro"
            )
        }
    }
}

打包完成,我们再来反编译一下。通过以下反编译前、后对比,就可以看出,右边的代码相对于左边的代码变得更加复杂了,同时,开启混淆的 apk 文件比未开启混淆的 apk 占用空间更小。

在这里插入图片描述

小结

1.代码混淆只是增加了代码复杂度,对于有耐心的人来说,破解你的代码只是时间问题。
2.代码混淆若混淆规则编写不正确,会出现各种离谱的问题,且难以追踪问题产生原因。
3.代码混淆只是混淆了代码,并没有对 app 的资源文件进行加密,使得资源文件容易被他人窃取。

应用加固

应用加固的方式有很多,比如说 360 加固助手、百度应用加固、网易易盾等,360 加固助手每个月都是有免费加固次数使用,本文使用的是 360 加固助手。

点击下载 360 加固助手

使用 360 加固助手加固后的 app 再使用 jadx 打开,app 的源码、资源等信息已经提取不到了。

在这里插入图片描述

其它

SDK 加固 & 插件加固

SDK 加固、插件加固没有免费实现的方式,目前 360 加固助手、百度应用加固、网易易盾等,都需要花钱开通 VIP 才能使用该功能。

加密重要数据

对于一些重要的数据,如:API密钥,可以使用加密算法进行加密,然后在运行时进行解密。

使用C/C++代码

将一些关键的算法或者逻辑使用 C/C++ 实现,并通过 JNI 调用。因为 C/C++ 代码编译后为机器码,相比 Java 代码更难以反编译。

防止调试

当应用完成开发准备上线时,可以添加部分代码防止应用被调试。如下:

  1. AndroidManifest.xml 文件中,添加 android:debuggable="false" 以阻止用户调试。
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:debuggable="false">
    ...
</application>
  1. 在代码中添加判断是否处于 Debug 模式,若处于 Debug 模式,则退出应用程序。
if (android.os.Debug.isDebuggerConnected()) {
    // 当前处于调试模式,可以执行相应的操作,例如退出应用
    android.os.Process.killProcess(android.os.Process.myPid());
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【学习笔记】卫星基础知识

一、什么是卫星以及它如何工作&#xff1f; 通信卫星是一种人造卫星&#xff0c;通过使用转发器在源和接收器之间中继和放大无线电电信信号。卫星的工作原理是接收从地球发送的无线电信号并将无线电信号重新发送回地球。卫星使用从大型太阳能电池阵列收集的太阳能&#xff0c;…

2.Rust变量

变量的声明 let关键字 在Rust中变量必须要先声明才能使用&#xff0c;let关键字用于声明变量并将一个值绑定到该变量上。如下: fn main() {let var_name:i32 123123;println!("{}",var_name) //println! 是一个宏&#xff08;macros&#xff09;&#xff0c;可以…

Java 简单模拟银行存取钱

模拟银行存取钱 一、实验任务 在银行办理业务时&#xff0c;通常银行会开多个窗口&#xff0c;客户排队等候&#xff0c;窗口办理完业务&#xff0c;会呼叫下一个用户办理业务。本实验要求编写一个程序模拟银行存取钱业务办理。假如有两个用户在存取钱&#xff0c;两个用户分别…

记事本怎么导入Excel文件 记事本数据导入Excel方法

在日常生活中&#xff0c;记事本软件已经成为了我不可或缺的助手&#xff0c;帮助我记录着点点滴滴&#xff0c;释放了大脑的负担。然而&#xff0c;随着时间的推移&#xff0c;记事本里的内容越来越多&#xff0c;如何高效地整理这些数据成为了一个新的问题。特别是当我需要将…

创建Net8WebApi自动创建OpenApi集成swagger

问题&#xff1a;用Net8创建WebAPI时勾选启动OpenAPI&#xff0c;项目自动集成了Swagger&#xff0c;但是接口注释没有展示&#xff1f; 解决&#xff1a; 1.需要生成Api项目的XML文件。操作如下&#xff1a; 2.生成XML文件后&#xff0c;还需要在启动类Program.cs里面配置Sw…

位运算(位运算的技巧、二进制中1的个数、区间或、异或森林)

一、移位操作符 1.1 左移操作符 << 作用&#xff1a;二进制数向左边移动&#xff0c;右边补0. #include<stdio.h> int main() {int a 10;int b a << 1;//将a的二进制向左移动一位printf("a%d\nb%d", a, b);return 0; } 左移操作符相当于对…

语文教学方法有哪些,产生了什么效果

你是否曾想过&#xff0c;一位普通的语文老师如何化身为智慧的引导者&#xff0c;点燃学生心中的求知之火&#xff1f;让我们一起探寻那些神奇的语文教学方法&#xff0c;以及它们带来的深远影响。 不仅让知识变得容易理解&#xff0c;更在无形中培养了学生的各项能力。通过谈话…

华中某科技大学校园网疑似dns劫持的解决方法

问题 在校园网ping xxx.ddns.net&#xff0c;域名解析失败 使用热点ping xxx.ddns.net&#xff0c;可以ping通 尝试设置windows dns首选dns为114.114.114.114&#xff0c;重新ping&#xff0c;仍然域名解析失败 猜测【校园网可能劫持dns请求】 解决方法 使用加密的dns请求…

制作照片数字人,让图片开口说话

一、软件安装 全部按照默认程序安装 最后安装完成后把所有按钮取消勾选&#xff0c;选择【Finish】&#xff0c;在弹出的界面中选择【否】。 然后点击管理员运行&#xff0c;直接全部默认&#xff0c;不更改位置。 二、制作数字人 根据自己的电脑位数&#xff0c;选择打开 选…

修改一个教材上的网站源码使它能在www服务器子目录上正常运行

修改一个教材上的网站源码&#xff0c;使它能在www服务器子目录上正常运行。 该网站源码是教材《PHPMySQL网站开发项目式教程》上带的网站源码。该源码是用 php html 写的。该源码包含对mysql数据库进行操作的php代码。以前该网站源码只能在www服务器的根目录上正常运行&…

【Docker】技术架构演变

【Docker】技术架构演变 目录 【Docker】技术架构演变架构中的概念架构演进单机架构相关软件 应用数据分离架构应用服务集群架构相关软件 读写分离/主从分离架构相关软件 引入缓存——冷热分离架构相关软件 垂直分库&#xff08;分布式数据库架构&#xff09;相关软件 业务拆分…

第八篇 - 预测受众(Predictive audience)技术是如何赋能数字化营销生态的?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先后为700多家媒…

Android制作.9图回忆

背景 多年前&#xff0c;做app开发遇到IM需求&#xff0c;那会用到.9图做聊天气泡背景&#xff0c;现在总结下使用png图片制作.9图。方法有很多&#xff0c;这里主要介绍Android studio制作.9图。当然使用ps、draw9patch都行。 第一步、打开Android studio&#xff0c;切换到dr…

【Linux实践室】Linux常用命令:文件操作|文件夹操作

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;Linux文件操作2.1.1 &#x1f47b;创建文件2…

【粉丝福利】一本书讲透ChatGPT,实现从理论到实践的跨越!大模型技术工程师必读

&#x1f33c;一、前言 OpenAI 在 2022 年 11 月推出了人工智能聊天应用—ChatGPT。它具有广泛的应用场景&#xff0c;在多项专业和学术基准测试中表现出的智力水平&#xff0c;不仅接近甚至有时超越了人类的平均水平。这使得 ChatGPT 在推出之初就受到广大用户的欢迎&#xf…

速卖通关键字搜索API接口实战:Python代码与搜索策略解析

一、速卖通关键字搜索API简介 速卖通&#xff08;AliExpress&#xff09;作为阿里巴巴旗下的国际电商平台&#xff0c;为卖家和买家提供了便捷的交易渠道。其开放平台提供的API接口允许开发者集成速卖通的各种功能&#xff0c;其中之一就是关键字搜索API。通过这个API&#xf…

QT计算两个日期之间的月份数

数据库中单表数据存储量过大时&#xff0c;会造成数据库的查询统计速度变慢&#xff0c;因此需将单表数据拆分存储到按年月命名的多张数据表中。解决思路是获取单表中的最小时间和最大时间&#xff0c;然后计算两个时间中的月份数量&#xff0c;最后根据开始年月循环算出所有需…

蓝牙系列四:开源蓝牙协议BTStack框架分析

在学习蓝牙的时候,最好还是要借助源代码来学习,并且进行实际的操作从而更加理解蓝牙协议栈的运行。依然根据韦东山老师的学习视频进行学习,整理记录如下。 首先,协议栈是跑在硬件上的,我们这里选择使用windows来操控硬件。来看一下硬件的结构: 蓝牙模块接在电脑上,或是…

(每日持续更新)jdk api之PipedWriter基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…

设置word目录从正文开始记录页码,并解决word目录正常,但正文页脚处只显示第一页的页码

设置word目录从正文开始记录页码&#xff0c;并解决word目录正常&#xff0c;但正文页脚处只显示第一页的页码 问题详情1&#xff1a;如何设置目录从正文开始记录页码 问题详情2&#xff1a;word目录处的页码正常&#xff0c;但正文只有第一页的页脚处显示页码 解决方法 在设置…